Khác nhau cơ bản là trong trường hợp chỉ dùng khóa đóng, A phải gửi cho B khóa để B mở, nhưng thế thì còn gì là bí mật nữa vì khi chuyển khóa đi không an toàn, sẽ bị đánh cắp ngay. Trong khi dùng khóa mở vd. RSA thì, người nhận hay người gửi không cần phải chuyển khóa bí mật đi đâu hết, người gửi dùng public key của người nhận để mã hóa thông điệp, và chỉ có người nhận có secret private key để mở thông điệp mà những ng khác gửi cho mình. An toàn hơn chính là ở chỗ secret key không phải chuyển cho ai hết.
Algorithm của RSA rất đơn giản, dựa trên giả thuyết không có algorithm đủ nhanh để phân tích số cực lớn thành tích thừa số nguyên tố. Bạn trẻ nào ở đây chứng minh được là không có, hoặc tìm ra được algorithm tối ưu thì đó là kết quả cực kỳ quan trọng. Không cần phải đi theo con đường khoa bảng làm gì phí thời gian! :-$
Thiết kế khóa chỉ có 3 bước như sau:
1) Chọn 2 số nguyên tố P, Q khác nhau rất lớn ngẫu nhiên, tính tích N=P*Q và R=(P-1)*(Q-1).
2) Chọn số tự nhiên L nhỏ hơn N sao cho L và R nguyên tố cùng nhau, i.e. d(L,R) =1.
3) Tìm số tự nhiên S sao cho S*L=1 mod R, dĩ nhiên nhờ bước 2) mà tồn tại S.
Public keys là 2 số N và L, còn "secret" private key là số S. Biết (N,L) cho phép mã hóa thông tin, nhưng không có S thì chịu không mở khóa được.
Khi A muốn gửi mã hóa 1 thông điệp tới B, đầu tiên A chuyển thông tin cần gửi cho B thành 1 số, vd. n, và sau đó thông tin mà A sẽ gửi cho B là số m = n^L mod N. Người ngoài có thể đánh cắp số m (dễ dàng) nhưng có m cũng sẽ không thể tìm ra được số n. Còn B biết N,L,S sẽ tìm ra số n ra sao?
Đơn giản thôi, vì m^S = n mod N. Chứng minh điều này là một bài tập về nhà cho học sinh chuyên toán!
Phải thừa nhận, sau khi nghẫm nghĩ kỹ từng bước, những tên nghĩ ra cái algorithm đơn giản này thông minh thật!! Chú ý là hiện nay N phải có độ dài >= 2048 bit thì mới được coi là an toàn. Nếu N có 512 bit thôi thì có thể break được, tìm ra S, nếu chạy song song trên khoảng 100 PC cùng một lúc trong thời gian ngắn. N mà có 256 bit thì chỉ cần 1 PC cũng tìm ra được S, thời gian để break tăng như hàm mũ với N. Để an toàn thì phải chọn L lớn (>>1) và đặc biệt là private key S là số lớn, hiểu theo nghĩa S~Sqrt(N).
Tại sao? Hmmm,
lý thuyết số!
Với khả năng ra đời của Quantum Computer (sau vài chục năm nữa) cái RSA algorithm này sẽ không còn an toàn nữa. Thời gian cần thiết để tìm ra S sẽ chỉ tăng như đa thức với chiều dài của N, cho N lớn lên bao nhiêu đi nữa (hàng tỉ bít) vẫn có thể tìm ra khóa S không tốn quá nhiều thời gian.