RSA là gì? Bạn có biết RSA có cơ chế hoạt động như thế nào?

Mục lục

1. RSA là gì?

RSA có nguồn gốc vô cùng thú vị khi là đề tài nghiên cứu hợp lực của 3 nhà khoa học lớn đó là Ron Rivest, Adi Shamir, Len Adleman và được đưa ra những mô tả lần đầu tiên vào năm 1977 ở Học viện MIT. Nếu để ý kỹ thì bạn sẽ thấy sự đặc biệt trong tên gọi của thuật ngữ này, nó được tạo nên từ chính 3 chữ cái đầu tiên trong tên của 3 nhà phát minh. Vậy RSA là gì? Mục đích của sự ra đời RSA là gì?

Mã hóa RSA chính là một thuật toán hay còn gọi là hệ mã hóa bất đối xứng có pháp vi ứng dụng rộng rãi và phổ biến. đặc biệt người ta sử dụng RSA rất nhiều ở công tác mã hóa, thiết lập chữ ký điện tử, với vai trò là một mã hóa khóa công khai. Bất cứ ai cũng có thể dùng khóa công khai để có thể mã hóa được nguồn dữ liệu muốn gửi đi thế nhưng để giải mã được dữ liệu gửi đi đó thì buộc phải có sự hỗ trợ của khóa bí mật.

Hoạt động gửi và nhận sẽ được can thiệp bởi RSA vì bản thân nó chứa 2 khóa là khóa công khai và khóa bí mật để làm 2 nhiệm vụ bất đối xứng và mã hóa và giải mã. Điều này cũng tương tự như cơ chế đóng khóa và mở khóa cửa vậy nhưng tất nhiên RSA sẽ phức tạp hơn rất nhiều bởi nó là một thuật toán. Việc mã hóa để bảo mật thông tin nhưng gây bất lợi cho người nhận khi không thể giải mã được các giá trị thông tin đã được mã hóa, chính vì thế mà cần đến yếu tố khóa bí mật luôn đi kèm với việc mã hóa, và khóa bí mật này cũng chỉ có ở người nhận thông tin đã mã hóa được gửi tới họ thông qua RSA.

Không giống với loại mã hóa có khóa đối xứng, loại khóa bí mật của RSA tuyệt đối không truyền được thông tin ra bên ngoài ngay cả khi có thiết bị nghe trộm thì nếu đối tượng xấu không có khóa bị mật cũng sẽ không thể giải mã được thông tin đó. Như vậy rõ ràng với 2 tính năng mã hóa và giải mã tối ưu đến tuyệt đối ở một phương trình bất đối xứng như vậy cho nên giá trị của RSA vô cùng lớn, nó sẽ được sử dụng ở hầu hết mọi trường hợp cần bảo mật thông tin. Giao thức SSL hayTSL, HTTPS cùng với chứng chỉ điện tử đều sử dụng RSA.

2. Mô tả quá trình hoạt động của RSA

Hệ mã hóa RSA có cơ chế hoạt động rất dễ hiểu như vừa mô tả ở thông tin trên. Cơ chế public key sẽ chia sẻ một cách công khai nhưng RSA lại tối ưu rất tốt cơ chế công khai và bảo mật. Trải qua 4 bước sau đây, RSA sẽ hoàn thiện mọi yếu tố để hoàn thiện chức năng bảo mật.

2.1. Sinh khóa

Sinh khóa làm nhiệm vụ tìm kiếm được một bộ có 3 số tự nhiên là e, d, n thỏa mãn công thức sau đây:

Med trùng mmod n

Trong đó giá trị d sẽ cần phải được bảo mật tuyệt đối  để khi có biết các giá trị khác là n, e hay m thì cũng không có cách nào để tìm được giá trị của d. Với công thức trên đây, khóa RSA sẽ có cơ chế sinh khóa theo quy trình:

- Chọn ra 2 số nguyên tố là số p, số q

- Tính phương trình: n = pq. Về sau  giá trị của n có vai trò modulus ở cả hai loại là private key và public key.

- Một vài giả nguyên tố dựa trên Carmichael sẽ được tính toán và giữ bí mật.

- Chọn lấy một số e ở khoảng 1 và giả nguyên tố n sao cho ước chung lớn nhất của hai số này có giá trị bằng 1, có nghĩa là giá trị e và giả nguyên tố n có nguyên tố cùng nhau.

- Tiếp tục tính giá trị của d để d trùng với 1/e, viết cách khác là de trùng 1. Số tự nhiên d lúc này sẽ chính là nghịch đảo modulo của e theo công thức modulo mod λ(n).

Khi đó, Public key được tìm ra chính  là bộ số (n, e) còn và private key bộ số (n, d). Nhiệm vụ của bạn là phải giữ cẩn thận private key và số nguyên tố p, q từ đó phục vụ việc tính toán các khóa một cách dễ dàng.

Đưa vào thực tiễn thực hành thì con người vẫn hay lựa chọn giá trị e nhỏ để có được lợi thế giải mã nhanh chóng, thông thường e = 65537. Ngoài công thức tính giả nguyên tố đã nêu trên thì hàm Euler φ(n) cũng có thể được sử dụng thay thế với công thức tính toán như sau: Euler φ(n) = (p − 1)(q − 1) = λ(n).

Lý giải cho công thức trên, bạn có thể hiểu như sau: φ(n) là bội của λ(n), vậy nên, d cần thỏa mãn điều kiện de ≡ 1 (mod φ(n)) = d ≡ 1/e (mod λ(n)).  Thuật toán này không hoàn toàn mang tới độ hoàn hảo tuyệt đối do có thể khiến cho giá trị d trở nên lớn hơn.

2.2. Mã hóa và giải mã

Vì RSA được bảo mật tuyệt đối và việc mở khóa chỉ người nhận mới có thể thực hiện. Vậy thì nếu bạn là người nhận trong quá trình này, bạn đã biết cách giải mã hay chưa? Tìm hiểu trọn vẹn từ khâu mã hóa đến việc giải mã sẽ giúp bạn có được một logic đúng để giải mã thành công. Ngay nội dung này, chúng ta sẽ tìm hiểu cụ thể về cách sử dụng public key (n, e) để mã hóa và dùng Private key (n, d) để giải mã.

Nếu đang có M hãy chuyển nó sang thành số tự nhiên m ở khoảng (0, n) trước nhé, và đam bảo giá trị m và n có nguyên tố cùng nhau. Không khó để làm được điều đó, mẹo nằm ở chỗ, hãy thêm kỹ thuật padding vào, sau đó tiến hành mã hóa m để chuyển m thành c. Làm theo công thức dưới đây:

c ≡ me mod n

c sẽ được chuyển tới người nhận. Người nhận lúc này có nhiệm vụ giải mã c để lấy được giá trị của m bằng công thức:

cd ≡ mde ≡ m mod n

tiếp theo, lấy từ giá trị m, bạn đảo ngược padding lại nhé thì sẽ lấy được thông tin gốc. Xem ngay ví dụ rất đơn giản sau để hiểu được quá trình này diễn ra như thế nào:

* Nếu ta có các giá trị p = 5, q = 7 thì n = pq = 35. Do đó, φ(n) = 24

Tiếp theo, chọn e = 5 do ước chung lớn nhất của 5 và 24 chính bằng 1.

Chọn d = 29 do ed – 1 = 29*5 – 1 đều có giá trị chia hết 24.

* Lấy giả sử, giá trị m =32(cách) thì mã hóa m sẽ thu được kết quả: c = 32 ^ 5 % 35 = 2

Ngược lại, giải mã c sẽ thu được giá trị của m: m = 2 ^ 29 % 35 = 32

Vậy m = 32 chính là giá trị ban đầu mà người nhận muốn và cần giải mã, cũng là giá trị người gửi cần mã hóa.

Công thức trên được áp dụng theo một thuật toán đã được chứng minh, do đó mà dù bạn có thử với bất cứ giá trị nào của m theo công thức chuẩn RSA đã được công bố thì vẫn sẽ có được kết quả chính xác.

RSA được bảo mật phần lớn phụ thuộc vào chính khả năng phân tích thừa số nguyên tố từ những giá trị lớn lý do vì chúng ta cung cấp rộng rãi chế độ public cho nên theo logic, nếu như việc phân tích các thừa số nguyên tố trở nên quá dễ dàng thì đương nhiên, các private bị lộ cũng dễ dàng, khiến cho RSA không thể bảo mật được. Dựa trên nguyên lý này để lưu ý việc sinh khóa, mọi người cần lựa chọn ngẫu nhiên các số p và q, làm cho việc phân tích thừa số nguyên tố trở nên khó khăn để khó mở khóa. Muốn vậy  p và q sẽ không cùng độ dài. Có thể các máy tính cá nhân vẫn chưa thể thực hiện được nhiệm vụ này nhưng dưới thời đại công nghệ số phát triển như vũ bão hiện nay thì các siêu máy tính sẽ cùng con người tìm ra những phương án tính toán tốt nhất cho RSA. Đến nay, việc một người sở hữu máy tính lượng tử với ưu thế về tốc độ cao có khả năng phá vỡ sự bảo mật trong RSA. Nhưng đó là lý thuyết vì đối với máy tính lượng tử, nó cần rất nhiều thời gian để hoàn thiện rồi mới tính đến việc phá vỡ sự bảo mật của RSA như thế nào.

Nhiều học viên đã đưa ra câu hỏi khá thú vị như một sự đóng góp thêm ý tưởng vào công trình vĩ đại RSA đó chính là việc đảo ngược vai trò của hai loại public key và Private key có dược không? Đại ý của câu hỏi chính là việc sử dụng private key để mã hóa còn public key thì dùng để giải mã, điều này hoàn toàn có thể nhưng sẽ không được thực hiện. Vì sao ư?

Nếu đi từ public key thì khó lòng suy ra được Private key, còn thao tác ngược lại sẽ đơn giản hơn để tạo ra điều đó. Khi bạn đưa private key cho người khác và yêu cầu họ mã hóa thì quả thực bạn đang tạo điều kiện cho kẻ tấn công có cơ hội tính toán ra public key dễ dàng, từ đó thay đổi hoàn toàn nội dung hay cuộc thoại quan trọng đang cần nhờ RSA bảo mật. Mọi cố gắng bảo mật của chúng ta trở nên vô nghĩa và bí mật đã bị tấn công, điều này thật sự rất nguy hiểm, đặc biệt là nếu bí mật đó liên quan đến chính trị, quân sự, các vấn đề của một quốc gia.

3. Dùng chữ ký số trong RSA

Việc đảo ngược giữa hai vai trò của Private key và Public key quả thực để lại những hậu quả khá tai hại nhưng nếu ai đó vẫn làm điều này và muốn bảo mật được giá trị truyền tại thì hãy dùng tới cả sự hỗ trợ của chữ ký số nhé. Ngày nay, việc ký tên đã được công nghệ khoác cho một chiếc áo choàng mới, biến chúng trở thành chữ ký điện tử hay cũng gọi là chữ ký số. Loại chữ kỹ cao cấp này có sử dụng hệ mã hóa RSA để gia tăng tính bảo mật cho người dùng. Quá trình mã hóa và giải mã đối với RSA áp dụng cho chữ ký số cũng được tiến hành theo quy trình ở phần 2 trên đây nhưng có sự khác biệt một chút ở vai trò của hai loại key.

Cụ thể, khi tạo chữ ký số thì người gửi thông tin sẽ sử dụng private còn người nhận sử dụng public key phục vụ cho việc xác nhận chữ ký. Thông tin được gửi qua RSA khá dài, gây ra trở ngại lớn đến việc mã hóa ở mặt thời gian. Chính vì vậy mà khi áp dụng vào thực tiến, chữ ký số còn được áp dụng kèm theo phương pháp mã hóa cả giá trị Hash của nội dung thông tin. Đôi khi bạn nghĩ, ký số sẽ gây ra rắc rối ở khâu xác nhận vì nhiều lúc, mình chính là chủ của thông tin, tài khoản nào đó nhưng vẫn không được chấp nhận nếu chữ ký có sai lệch đi một ly một lai thế nhưng cái khó cũng chính là cái lợi vì như vậy, kẻ xấu cũng sẽ gặp rất nhiều rắc rối nếu như muốn đột nhập, hack tài khoản của bạn.

Như vậy, bài viết đã cho chúng ta hiểu RSA là gì, hơn cả vậy, giá trị chúng ta nhận được từ đây còn là những lợi ích mà RSA mang lại cho cuộc sống của con người. Bài viết sẽ giúp bạn đưa ra quyết định rõ ràng về việc có nên sử dụng RSA hay không. Mong rằng, bạn sẽ có thêm một bí quyết bảo vệ cuộc sống của mình trở nên tốt đẹp hơn.

Đăng ngày 20/11/2020, 12 lượt xem