RSA do Rivest, Shamir và Adleman phát triển năm 1977. Sơ đồ RSA là sơ đồ mã hóa từng khối, với mỗi khối có giá trị nhỏ hơn n. Việc mã hóa và giải mã theo hình thức sau, cho khối văn bản M và khối bảo mật C:
C = Me mod n
M = Cd mod n = (Me)d mod n = Mde mod n
Cả người gửi và nhận phải biết giá trị n, người gửi biết e và chỉ có người nhận biết d. Cho nên đây là giải thuật mã hóa với khóa công khai KU = [e,n] và khóa bí mật KR = [d,n]. Vì giải thuật này thỏa giải thuật mã khóa công khai nên các yêu cầu sau phải được đáp ứng:
* Có thể tìm thấy giá trị d, e, n để: M = Mde mod n với mọi M<n hay không? * Một cách tương đối dễ dàng tính Me và Cd với mọi M<n hay không? * Không thể xác định d khi biết e và n.
Theo lý thuyết Euler: cho 2 số nguyên p và q, 2 số nguyên n và m (n=p*q, 0<m<n) và số nguyên k. Ta có:
0(n)=0(pq)=(p-1)(q-1) Do đó:
Nếu: de = k0(n) + 1 và gcd(0(n),e)=1 (gcd: ước số chung lớn nhất) Thì: de mod 0(n) = 1 và d mod 0(n) = e- 1
Sơ đồ RSA:
Giả sử user A đã công bố khóa công khai e của nó và user B muốn gửi đoạn tin M tới A. Khi đó B tính C=Me mod n và truyền C. Khi nhận được đoạn tin C này, user A giải mã bằng cách tính Cd mod n. Có thể thấy rằng M=Cd mod n vì:
de mod 0(n) = 1 hay de = k0(n)+1
→ Mk0(n)+1mod n = Mk(p-1)(q-1)+1mod n=M mod n=(Mde mod n) modn=Mde mod n Cd mod n = (Me)dmod n = Mde mod n = M
Có thể tóm tắt giải thuật RSA như bảng sau:
Bảng 4.3: Tóm tắt giải thuật RSA và độ phức tạp
Tạo khóa Độ phức tạp
Tạo 2 số nguyên tố lớn p và q Tính n = p*q, 0(n) = (p-1)*(q-1)
Chọn 1 số ngẫu nhiên 1<e<0(n): gcd (0(n),e) = 1 Tính d: d=e-1mod 0(n) (giải thuật Euclidean mở rộng) Khóa công khai KU=[e,n]
Khóa bí mật KR=[d,n]
0((log n)2) 0(log(0(n))2) 0((log n)3)
Ví dụ về quá trình mật mã và giải mã của thuật toán RSA: Chọn p = 3, q = 11. Khi đó ta có n = pq = 33 và (p-1)(q-1) = 20 = 2*5*5. Giá trị e được chọn phải quan hệ nguyên tố với 20 , nghĩa là không chứa các ước số 2,5 và e < 20. Ta chọn e = 3, d = 7. Khi đó ta có: Phía mật mã: Giả sử có bản tin: M = {10, 9, 5, 20} → M3={1000, 729, 125, 8000} và C=M3 mod 33={10, 3, 26, 14}. Phía giải mã: C7 ={107, 2187, 267, 147} M=C7 mod 33{10, 9, 5, 20}
Kích thước khóa RSA: tùy thuộc vào tính bảo mật và thời gian sống của khóa mà khóa có chiều dài thích hợp:
- Loại Personnal : 768 bit. - Loại Commercial : 1024 bit. - Loại Militery : 2048 bit.
Trên đây là những nội dung chính của thuật toán mật mã RSA. Thực tế, để thực hiện được các thuật toán với kích thước khóa lớn đòi hỏi một lượng tính toán rất lớn liên quan đến vấn đề lý thuyết số như thuật toán Euclide để tìm USCLN của hai số nguyên hay thuật toán Miller-Rabin để kiểm tra tính nguyên tố của các số tự nhiên này.