Hotline : 07 088 44444
Thích
Chia sẻ

RSA là gì? Cách thức hoạt động của mã hóa RSA

31/05/2021

Mã hóa RSA là một hệ thống giải quyết những gì đã từng là một trong những vấn đề lớn nhất trong bảo mật: Làm thế nào có thể gửi cho ai đó một tin nhắn được mã hóa mà không có cơ hội chia sẻ mã trước đó? Bài viết này sẽ hướng dẫn cho bạn biết mã hóa RSA là gì, cách nó được phát triển và hoạt động cũng như một số vấn đề bảo mật mà nó phải đối mặt.

RSA là gì?

Giả sử bạn muốn nói với bạn mình một bí mật. Nếu bạn ở ngay bên cạnh họ, bạn chỉ cần thì thầm điều gì đó. Nếu bạn ở hai phí đối nhau của đất nước, điều đó sẽ không an toàn. Bạn có thể viết nó ra và gửi cho họ qua đường bưu điện hoặc sử dụng điện thoại. Nhưng cách này sẽ không an toàn và bất kỳ ai có động cơ đủ mạnh đều có thể chặn được tin nhắn.

Nếu bí mật đó đủ quan trọng, bạn không nên mạo hiểm viết nó ra. Gián điệp hoặc một nhân viên bưu điện lừa đảo có thể xem nó qua thư của bạn. Tương tự như vậy, ai đó có thể nghe trộm điện thoại của bạn mà bạn không biết và họ sẽ ghi lại mọi cuộc gọi mà bạn thực hiện.

Một giải pháp để ngăn chặn kẻ nghe trộm và truy cập nội dung tin nhắn là mã hóa nó. Về cơ bản, điều này có nghĩa là thêm một mã vào tin nhắn, nó sẽ làm cho tin nhắn thành một mớ hỗn độn. Nếu mã của bạn đủ phức tạp, thì những người duy nhất có thể truy cập vào thư gốc là những người có quyền truy cập vào mã.

Nếu bạn có cơ hội chia sẻ mã với bạn mình trước đó, thì một trong hai người có thể gửi tin nhắn được mã hóa bất cứ lúc nào. Nhưng nếu bạn không có cơ hội chia sẻ mã đó thì sao?

Đây là một trong những vấn đề cơ bản của mật mã, đã được giải quyết bằng các sơ đồ mã hóa public-key ( còn được gọi là mã hóa bất đối xứng) như RSA.

Theo mã hóa RSA, các tin nhắn được mã hóa bằng một mã gọi là public key, mã này có thể được chia sẻ công khai. Do một số đặc thù tính toán khoa học khác biệt của thuật toán RSA, một khi một thông điệp đã được mã hóa bằng public key, nó chỉ có thể được giải mã bằng một key được gọi là private key. Mỗi người dùng RSA có cặp key bao gồm public key và private key của riêng họ. Private key cần được giữ bí mật.

Các lược đồ public key khác với key symmetric, trong khi đó cả quá trình mã hóa và giải mã đều phải sử dụng private key. Những khác biệt này làm cho mã hóa public key như RSA hữu ích để giao tiếp trong các tình huống mà trước đó không có cơ hội để phân phối key một cách an toàn.

Các thuật toán key đối xứng có các ứng dụng riêng của chúng. Chẳng hạn như mã hóa dữ liệu cho mục đích sử dụng các nhân hoặc khi có các kênh bảo mật mà private có thể được chia sẻ.

Trong mật mã học, RSA là một thuật toán mật mã hóa khóa công khai. Đây là thuật toán đầu tiên phù hợp với việc tạo ra chữ ký điện tử đồng thời với việc mã hóa. Nó đánh dấu một sự tiến bộ vượt bậc của lĩnh vực mật mã học trong việc sử dụng khóa công cộng. RSA đang được sử dụng phổ biến trong thương mại điện tử và được cho là đảm bảo an toàn với điều kiện độ dài khóa đủ lớn. – Wikipedia

Mã hóa RSA được sử dụng ở đâu?

Mã hóa RSA thường được sử dụng kết hợp với các sơ đồ mã hóa khác. Và cho các chữ ký kỹ thuật số có thể chứng minh tính xác thực và tính toàn vẹn của một thông điệp. Nó thường không được sử dụng để mã hóa toàn bộ thư và file vì nó kém hiệu quả và tốn tài nguyên hơn so với mã hóa key đối xứng.

Để làm cho mọi thứ hiệu quả hơn, một file thường sẽ được mã hóa bằng thuật toán key đối xứng. Sau đó key đối xứng sẽ được mã hóa bằng mã hóa RSA. Theo quy trình này, chỉ người có quyền được truy cập vào RSA private key mới có thể giải mã key đối xứng.

Nếu không thể truy cập key đối xứng, thì không thể giải mã file gốc. Phương pháp này có thể được sử dụng để bảo mật các thư và file mà không mất nhiều thời gian và tài nguyên.

Mã hóa RSA có thể được sử dụng trong một số hệ thống khác nhau. Nó có thể vận hành trong OpenSSL, wolfCrypt, cryptlib và một số thư viện mật mã khác.

Theo truyền thống, nó được sử dụng trong TLS và cũng là thuận toán ban đầu được sử dụng trong mã hóa PGP. RSA vẫn được nhìn thấy trong một loạt các trình duyệt web, email, VPN, chat và các kênh giao tiếp khác.

RSA cũng thường được sử dụng để tạo kết nối an toàn giữa VPN client và VPN server. Theo các giao thức như OpenVPN, TLS có thể sử dụng thuật toán RSA để trao đổi key và thiết lập một kênh an toàn.

Mã hóa RSA hoạt động như thế nào?

Phần sau sẽ đơn giản hơn một chút. Bởi vì quá nhiều độc giả có thể bị giáo viên cấp ba làm cho họ sợ hãi về việc mã hóa. Chúng ta sẽ đơn giản hóa một số khái niệm và sử dụng các số đơn giản hơn nhiều. Trong thực tế, mã hóa RSA sử dụng các số nguyên tố có độ lớn lớn hơn nhiều và sẽ có một vài trường hợp số phức tạp.

Có một số khái niệm khác nhau mà bạn cần tìm hiểu trước khi chúng tôi giải thích về chúng. Chúng bao gồm hàm trapdoor, tạo số nguyên tố, hàm phi Carmichael. Và các quy trình riêng biệt liên quan đến việc tính toán các public key và private key được sử dụng trong quá trình mã hóa và giải mã.

Hàm trapdoor

Mã hóa RSA hoạt động dựa trên tiền đề rằng thuật toán dễ dàng tính toán theo một hướng. Nhưng hầu như không thể thực hiện ngược lại. Ví dụ nếu bạn được cho biết rằng 701,111 là tích của hai số nguyên tố, vậy bạn có thể tìm ra hai số đó là bao nhiêu không?

Ngay cả với máy tính hay PC thì hầu hết chúng ta cũng sẽ không biết bắt đầu từ đâu chứ đừng nói đến việc tìm ra câu trả lời. Nhưng nếu lật lại mọi thứ thì nó sẽ dễ dàng hơn rất nhiều. Kết quả của:

907 x 773

Nếu bạn dùng máy tính để tính phép toán này thì bạn sẽ phát hiện câu trả lời là 701,111 và nó đã được đề cập trước đó. 907 và 773 này là hai số nguyên tố cần trả lời cho câu hỏi đầu tiên của chúng tôi. Điều này cho chúng ta thấy rằng một số phương trình có thể dễ dàng giải ra một cách dễ dàng, nhưng ngược lại dường như không thể.

Một khía cạnh thú vị khác của phương trình này là việc tìm ra một trong các số nguyên tốt rất đơn giản nếu bạn đã có số còn lại. Nếu bạn cho biết rằng 701,111 là kết quả của 907 nhân với một số nguyên tố khác, bạn sẽ tìm ra được số nguyên tố đó với phương trình sau:

701,111 ÷ 907 = 773

Bởi vì điều này, RSA sử dụng số lượng lớn hơn nhiều. Kích thước của các số nguyên tố trong quá trình vận hành RSA là như nhau. Nhưng trong RSA 2048-bit, chúng sẽ kết hợp với nhau để tạo ra các key dài 617 chữ số. Để hình dung nó, một key sẽ là một số có kích thước như sau:

99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999

Tạo số nguyên tố

Các chức năng của hàm trapdoor đã được đề cập ở trên tạo cơ sở cho cách thức hoạt động của các lược đồ mã hóa public key và private key. Các thuộc tính của chúng cho phép chia sẻ public key mà không gây nguy hiểm cho tin nhắn hoặc tiết lộ private key. Chúng cũng cho phép dữ liệu được mã hóa bằng một key theo cách mà chỉ có thể giải mã bằng key khác.

Các số nguyên tố trong RSA cần phải rất lớn và cũng tương đối xa nhau. Các số nhỏ hoặc gần nhau sẽ dễ bị bẻ khóa hơn nhiều. Mặc dù vậy, ví dụ của chúng tôi sẽ sử dụng các số nhỏ hơn để làm cho mọi thứ dễ theo dõi và tính toán hơn.

Giả sử kiểm tra tính nguyên tố cho các số nguyên tố mà chúng ta đã sử dụng ở trên, 907 và 773. Bước tiếp theo là khám phá module (n), sử dụng công thức sau:

n = p x q

Where p = 907 and q = 773

Therefore:

n = 907 x 773

n = 701,111

Hàm phi Carmichael

Một khi đã có n, chúng ta sẽ sử dụng hàm phi Carmichael:

λ(n) = lcm (p − 1, q − 1)

Phần này sẽ có thể hơi phức tạp. Bạn có thể bỏ qua và chỉ cần tin tưởng rằng phép toán hoạt động. Nếu không, hãy theo chúng tôi để thực hiện một vài phép tính khác. Mọi thứ sẽ được giải thích càng chi tiết càng tốt để giúp bạn nắm bắt những kiến thức cơ bản.

Đối với những người không biết, λ(n) là ký hiệu của hàm phi Carmichael, còn lcm là lowest common multiple (bội số chung nhỏ nhất) – nghĩa là số thấp nhất mà cả p và q có thể chia được. Có một số cách khác nhau để tìm ra điều này, nhưng cách dễ nhất là tin tưởng một máy tính online để làm phương trình cho bạn. Vì vậy, hãy đặt các con số của chúng ta vào phương trình:

  λ(701,111) = lcm (907 − 1, 773 − 1)

  λ(701,111) = lcm (906, 772)

Sử dụng máy tính chúng ta sẽ được:

rsa-la-gi

 λ(701,111) = 349,716

Tạo public key

Bây giờ chúng ta đã có tài liệu về các số nguyên tố của hàm phi Carmichael. Đã đến lúc tìm ra public key. Theo RSA, public key được tạo thành từ số nguyên tố e, cũng như module n (chúng tôi sẽ giải thích module là gì trong một vài đoạn văn). Số e có thể là bất kỳ giá trị nào từ 1 đến giá trị của λ (n), trong ví dụ của chúng ta là 349,716.

Vì public key được chia sẻ một cách công khai, nên sẽ không quá quan trọng nếu e là một số ngẫu nhiên. Trong thực tế, e thường được đặt ở 65,537. Bởi vì khi các số lớn hơn nhiều được chọn ngẫu nhiên, nó làm cho việc mã hóa kém hơn nhiều. Đối với ví dụ này, chúng tôi sẽ giữ các con số nhỏ để thực hiện các phép tính hiệu quả. Nếu:

e = 11

Dữ liệu được mã hóa cuối cùng của chúng tôi được gọi là ciphertext (c). Chúng tôi lấy nó từ plaintext message (m). Bằng cách áp dụng public key với công thức sau:

c = me mod n

Như đã đề cập, e mod n là public key. Chúng ta đã đặt giá trị cho e và cũng đã biết n. Điều duy nhất chúng ta cần giải thích là mod. Về cơ bản nó là phần dư khi lấy hai số chia cho nhau. Ví dụ:

10 mod 3 = 1

Điều này là do 10 chia 3 bằng 3 lần 3, dư 1.

Quay lại phương trình của chúng ta. Để đơn giản hóa mọi thứ, giả sử message (m) mà chúng tôi muốn mã hóa và giữ bí mật chỉ là một số duy nhất, 4.

c = me mod n

c = 411 mod 701,111

c = 4,194,304 mod 701,111

Một lần nữa, để làm cho module hoạt động dễ dàng, chúng ta sẽ sử dụng máy tính online. Bằng cách nhập 4,194,304 vào máy tính, nó sẽ cho chúng ta:

rsa-la-gi

c = 688,749

Do đó, khi chúng ta sử dụng RSA để mã hóa thông điệp của mình, 4. Bằng public key, nó sẽ cung cấp cho chúng ta bản mã là 688,749. Các bước trước đó có thể hơi nặng về toán học.

Chúng ta đã có một thông điệp là 4, chúng ta muốn giữ bí mật. Chúng ta đã áp dụng public key cho nó, mang lại một kết quả mã hóa là 688,749. Bây giờ nó đã được mã hóa, có thể gửi an toàn số 688,749 cho chủ sở hữu cặp key. Họ là người duy nhất có thể giải mã bằng private riêng của họ. Khi họ giải mã nó, họ sẽ thấy thông báo mà chúng tôi gửi, 4.

Tạo private key

Trong mã hóa RSA, một khi dữ liệu hoặc tin nhắn đã được chuyển thành bản mã với public key. Nó chỉ có thể được giải mã bằng private key từ cùng một cặp key. Private key bao gồm d và n. Chúng ta đã biết n, và phương trình sau được sử dụng để tìm d:

d =1/e mod λ(n)

Trong phần tạo public key, chúng ta đã chọn e=11. Tương tự, chúng ta biết rằng λ (n) bằng 349,716 từ phép tính trên. Mọi thứ trở nên phức tạp hơn một chút khi xem phần này của công thức:

1/e mod

Phương trình này có thể giống như yêu cầu bạn chia 1 cho 11, nhưng không phải vậy. Thay vào đó, điều này chỉ tượng trưng rằng chúng ta cần tính toán nghịch đảo module của e (trong trường hợp này là 11) và λ (n) (trong trường hợp này là 349,716).

Về cơ bản, điều này có nghĩa là thay vì thực hiện một phép toán modulo tiêu chuẩn, chúng ta sẽ sử dụng phép nghịch đảo. Điều này thường được tìm thấy với Thuật toán Euclid mở rộng, nhưng nó nằm ngoài phạm vi của bài viết này. Vì vậy chúng ta sẽ sử dụng máy tính online để thay thế. Bây giờ chúng ta sẽ kết hợp thông tin đã có vào công thức:

d =1/11 mod 349,716

Để thực hiện thao tác này, chỉ cần nhập 11 (hoặc bất kỳ giá trị nào bạn gán cho e) trong đó số nguyên là 349,716 ( hoặc bất kỳ giá trị nào mà bạn đã tính ra cho λ (n)). Nếu làm đúng, bạn sẽ nhận được kết quả:

d = 254, 339

Bây giờ chúng ta có giá trị cho d, chúng ta có thể giải mã các tin nhắn đã được mã hóa bằng public key bằng công thức sau:

m = cd mod n

Bây giờ hãy quay lại phần ciphertext (c) mà đã được mã hóa trong phần private key. Khi mã hóa thư bằng public key, nó cho giá trị c là 688,749. Như bên trên, chúng ta đã biết rằng d=254,339. Và chúng ta cũng đã biết n=701,111. Điều này mang lại:

m = 688,749254,339 mod 701,111.

Như bạn có thể nhận thấy, cố gắng lấy một số đến lũy thừa thứ 254,339 có thể hơi nhiều so với máy tính thường. Thay vào đó, chúng ta sẽ sử dụng máy tính giải mã RSA online.

rsa-la-gi

Khi bạn đã nhập dữ liệu, hãy nhấn Decrypt, thao tác này sẽ đưa các số thông qua công thức giải mã được liệt kê ở trên. Nếu bạn đã làm mọi thứ chính xác, bạn sẽ nhận được câu trả lời là 4. Đó là tin nhắn ban đầu mà chúng tôi đã mã hóa bằng public key.

Cách mã hóa RSA hoạt động trong thực tế

Các phần trên sẽ cung cấp cho bạn một hiểu biết hợp lý về cách thức hoạt động của phép toán đằng sau mã hóa public key nhưng nó có thể hơi khó hiểu.

Trong các bước được liệt kê ở trên, chúng tôi đã chỉ ra cách hai người giao tiếp với nhau an toàn mà không cần chia sẻ mã trước đó. Đầu tiên, mỗi người cần thiết lập cặp key của riêng mình và chia sẻ public key với nhau. Hai người cần giữ bí mật về private key của họ để thông tin liên lạc của họ được bảo mật.

Khi người gửi có public key của người nhận, họ có thể sử dụng key đó để mã hóa dữ liệu mà họ muốn bảo mật. Khi nó đã được mã hóa bằng public key, nó chỉ có thể được giả mã bằng private key từ cùng một cặp key. Ngay cả cùng một public key cũng không thể được sử dụng để giải mã dữ liệu. Điều này là do các thuộc tính của chức năng hàm trapdoor mà đã được đề cập.

Khi người nhận nhận được tin nhắn được mã hóa, họ sử dụng private key của mình để truy cập dữ liệu. Nếu người nhân muốn gửi lại thông tin liên lạc theo cách an toàn, thì họ có thể mã hóa tin nhắn của mình bằng public key. Một lần nữa, khi nó đã được mã hóa bằng public key, cách duy nhất để thông tin có thể được truy cập là thông qua private key.

Theo cách này, mã hóa RSA có thể được sử dụng bởi các bên chưa biết trước đây để gửi dữ liệu một cách an toàn. Vietnix mong các bạn hiểu rõ về cách thức hoạt động của mã hóa RSA và có thể áp dụng thành công thuật toán này để bảo mật dữ liệu của bạn.

Lời kết

Hy vọng bài viết trên sẽ giúp bạn hiểu hơn về mã hóa RSA là gì? Nếu có thắc mắc hay đóng góp ý kiến, mời bạn để lại bình luận phía dưới bài viết này. Vietnix xin chân thành cảm ơn bạn!

Nếu bạn có thắc mắc hay có vấn đề cần hỗ trợ, bạn có thể liên hệ trực tiếp với Vietnix thông qua các kênh sau:
  • Hotline: 1800 1093 - 07 088 44444
  • Email: support@vietnix.vn
  • Hoặc chat trực tiếp với Vietnix thông qua biểu tượng Livechat ở góc phải màn hình. Đội ngũ chuyên viên của chúng tôi luôn sẵn sàng tư vấn và hỗ trợ bạn 24/7.
Vietnix hiện đang có chương trình khuyến mãi lớn nhất trong năm, giảm giá TRỌN ĐỜI: Đăng ký dùng thử ngay và Vietnix sẽ hoàn tiền 100% nếu quý khách không hài lòng với chất lượng sản phẩm, dịch vụ!
Mình là Bo - admin của Quản Trị Linux. Mình đã có 10 năm làm việc trong mảng System, Network, Security và đã trải nghiệm qua các chứng chỉ như CCNP, CISSP, CISA, đặc biệt là chống tấn công DDoS. Gần đây mình trải nghiệm thêm Digital Marketing và đã hòan thành chứng chỉ CDMP của PersonVUE. Mình rất thích được chia sẻ và hỗ trợ cho mọi người, nhất là các bạn sinh viên. Hãy kết nối với mình nhé!
Bài viết liên quan
Không có bài viết liên quan
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments