MathLabs

Toán ứng dụng và Tính toán

Mật mã học

Dùng lý thuyết số và đại số để bảo mật thông tin, từ RSA đến các sơ đồ mã hóa hiện đại.

Trực giácKhoá một thông điệp sao cho chỉ đúng người mới mở được

Hãy tưởng tượng một ổ khoá mà bất kỳ ai cũng có thể khoá lại, nhưng chỉ một chiếc chìa khoá duy nhất mới mở được. Nếu mọi người đều công khai ổ khoá của mình (nhưng giữ bí mật chìa khoá), thì bất kỳ ai cũng có thể khoá một thông điệp gửi cho bạn, nhưng chỉ bạn mới đọc lại được — không cần gặp trước, không cần ám hiệu bí mật. Đây là ý tưởng cốt lõi của mật mã khoá công khai: phép "khoá" dễ tính theo một chiều, và nếu không có chìa khoá bí mật thì về mặt tính toán là bất khả thi để đảo ngược, dù thiết kế ổ khoá là công khai.

Một điểm quay quanh đường tròn đơn vị, minh hoạ sự lặp tuần hoàn tương tự luỹ thừa modulo.
Phép nhân đồng dư x↦ax mod mx \mapsto a x \bmod m trên Z/17Z\mathbb{Z}/17\mathbb{Z}: tính xuôi tức thì, còn việc đảo ngược logarit rời rạc hay lũy thừa RSA trên mô-đun lớn là nền tảng của mật mã khóa công khai.

Phổ thôngSố học modulo: viên gạch nền tảng

Định nghĩa: Đồng dư và luỹ thừa modulo

Hai số nguyên aa và bb đồng dư theo modulo nn, viết là a≡b(modn)a \equiv b \pmod{n}, khi n∣(a−b)n \mid (a-b): hiệu của chúng là bội đúng của nn. Luỹ thừa modulo là phép nhân lặp lại một cơ số với chính nó theo modulo nn, chính là phép toán mà các sơ đồ mật mã như RSA và Diffie-Hellman được xây dựng trên đó, vì nó tính xuôi nhanh nhưng đảo ngược lại khó.

a≡b(modn)  ⟺  n∣(a−b)a \equiv b \pmod{n} \iff n \mid (a-b)

Ở đây n∣(a−b)n \mid (a-b) nghĩa là nn chia hết a−ba-b, nên a≡b(modn)a \equiv b \pmod{n} thực chất là một phát biểu về số dư: aa và bb có cùng số dư khi chia cho nn. Định lý Euler dưới đây mở rộng định lý nhỏ Fermat và là động cơ giải thích vì sao giải mã RSA khôi phục lại đúng thông điệp gốc.

aϕ(n)≡1(modn)whenevergcd⁡(a,n)=1a^{\phi(n)} \equiv 1 \pmod n \quad \text{whenever} \quad \gcd(a,n)=1
So sánh ba sơ đồ mật mã
Sơ đồBài toán khó nó dựa vàoKích thước khoá điển hình (2026)
RSAPhân tích n=pqn=pq thành thừa số nguyên tố2048-4096 bit
Diffie-HellmanLogarit rời rạc theo modulo số nguyên tố2048-3072 bit
Mật mã đường cong elliptic (ECC)Logarit rời rạc trên nhóm đường cong elliptic256-384 bit

Đại họcVì sao RSA hoạt động, và Diffie-Hellman tạo bí mật chung như thế nào

Cho n=pqn = pq là tích của hai số nguyên tố phân biệt, và cho ee và dd thoả mãn ed≡1(modϕ(n))ed \equiv 1 \pmod{\phi(n)}. Khi đó với mọi thông điệp mm với 0≤m<n0 \le m < n, mã hoá bằng ee rồi giải mã bằng dd sẽ khôi phục đúng thông điệp gốc: (me)d≡m(modn)(m^e)^d \equiv m \pmod n.

Vì sao đúng?

Đây là định lý khiến RSA thực sự dùng được: nó đảm bảo rằng bất kể người gửi mã hoá gì bằng số mũ công khai, người giữ số mũ bí mật luôn giải mã được, với mọi thông điệp có thể, không chỉ hầu hết — chứng minh phải xử lý trường hợp biên khi một thông điệp vô tình có chung thừa số với modulo.

Chứng minh

Vì ed≡1(modϕ(n))ed \equiv 1 \pmod{\phi(n)}, theo định nghĩa đồng dư modulo tồn tại một số nguyên không âm kk với ed=1+kϕ(n)ed = 1 + k\phi(n).

Trường hợp 1: gcd⁡(m,n)=1\gcd(m,n)=1. Định lý Euler cho mϕ(n)≡1(modn)m^{\phi(n)} \equiv 1 \pmod n, nên nâng cả hai vế lên luỹ thừa kk rồi nhân với mm cho med=m⋅(mϕ(n))k≡m⋅1k≡m(modn)m^{ed} = m \cdot (m^{\phi(n)})^{k} \equiv m \cdot 1^{k} \equiv m \pmod n.

Trường hợp 2: gcd⁡(m,n)≠1\gcd(m,n) \ne 1. Vì n=pqn = pq, điều này nghĩa là pp chia hết mm hoặc qq chia hết mm (không thể cả hai, vì mm nhỏ hơn nn). Xét theo modulo pp: nếu pp chia hết mm thì cả mm và medm^{ed} đều đồng dư 00 theo modulo pp; nếu không thì gcd⁡(m,p)=1\gcd(m,p)=1 và định lý nhỏ Fermat cho mp−1≡1(modp)m^{p-1} \equiv 1 \pmod p, và vì (p−1)(p-1) chia hết ϕ(n)\phi(n) nên cùng tính toán như Trường hợp 1 cho med≡m(modp)m^{ed} \equiv m \pmod p. Lập luận giống hệt theo modulo qq cho med≡m(modq)m^{ed} \equiv m \pmod q.

Theo định lý số dư Trung Hoa, một đồng dư đúng theo modulo pp và theo modulo qq riêng biệt thì cũng đúng theo modulo tích của chúng n=pqn=pq, nên (me)d≡m(modn)(m^e)^d \equiv m \pmod n đúng với mọi thông điệp mm, không chỉ những thông điệp nguyên tố cùng nhau với nn.

Cố định một số nguyên tố pp và một cơ số gg. Nếu Alice chọn bí mật aa và gửi A=ga mod pA = g^a \bmod p, còn Bob chọn bí mật bb và gửi B=gb mod pB = g^b \bmod p, thì việc tính Ba mod pB^a \bmod p và Ab mod pA^b \bmod p đều cho cùng giá trị gab mod pg^{ab} \bmod p, dù aa lẫn bb chưa từng được truyền đi.

Vì sao đúng?

Đây là điều cho phép hai bên thoả thuận một khoá bí mật qua một kênh công khai mà kẻ nghe lén đang theo dõi: kẻ nghe lén thấy cơ số, modulo, và cả hai giá trị công khai, nhưng để khôi phục bí mật chung từ những thứ đó cần giải một bài toán logarit rời rạc, được tin là khó về mặt tính toán với các tham số được chọn tốt.

Chứng minh

Theo định nghĩa, A=ga mod pA = g^a \bmod p và B=gb mod pB = g^b \bmod p là kết quả của luỹ thừa modulo, nên Bob nhận được AA và tính Ba=(gb)a mod pB^a = (g^b)^a \bmod p, trong khi Alice nhận được BB và tính Ab=(ga)b mod pA^b = (g^a)^b \bmod p.

Luỹ thừa modulo tuân theo cùng quy tắc số mũ như luỹ thừa thông thường, vì phép nhân lặp lại theo modulo pp kết hợp giống hệt phép nhân lặp lại các số nguyên, chỉ khác là được rút gọn theo modulo pp ở mỗi bước: (gb)a=gba=gab=(ga)b(g^b)^a = g^{ba} = g^{ab} = (g^a)^b xét như số mũ của gg, và đẳng thức này vẫn đúng sau khi rút gọn theo modulo pp ở mọi giai đoạn.

Do đó Ba mod p=gab mod p=Ab mod pB^a \bmod p = g^{ab} \bmod p = A^b \bmod p: Alice và Bob độc lập tính ra cùng một giá trị gab mod pg^{ab} \bmod p từ số mũ bí mật của riêng mình và giá trị công khai của phía kia, mà không bao giờ bí mật aa hay bb xuất hiện trên kênh.

Lập luận về an toàn tách biệt với lập luận về tính đúng đắn này: tính đúng đắn chỉ cho thấy cả hai bên đi đến cùng một số; độ khó của việc tính aa từ gg, pp, và AA (bài toán logarit rời rạc) mới là điều giữ bí mật số chung đó khỏi người quan sát.

Đại họcỨng dụng thực tiễn và Ví dụ minh họa

Mọi kết nối HTTPS, ứng dụng nhắn tin bảo mật, và ví tiền mã hoá đều dựa vào các định lý ở trên: bắt tay TLS dùng Diffie-Hellman (hoặc biến thể đường cong elliptic) để thoả thuận khoá phiên, hệ thống ngân hàng và cập nhật phần mềm dùng chữ ký RSA hoặc ECDSA để đảm bảo tính xác thực, và ví blockchain dùng logarit rời rạc trên đường cong elliptic để khiến việc suy ra khoá riêng từ địa chỉ công khai là bất khả thi về mặt tính toán. Hai ví dụ dưới đây thực hiện RSA và Diffie-Hellman bằng tay trên các số nhỏ để mọi bước đều kiểm tra được.

Ví dụ: RSA thực hiện bằng tay với số nguyên tố nhỏ

Dùng các số nguyên tố p=5p=5 và q=11q=11, với số mũ công khai e=3e=3 và thông điệp m=2m=2, tìm bản mã và kiểm tra rằng giải mã khôi phục lại đúng thông điệp.

Lời giải

Bước 1: Tính modulo n=5×11=55n = 5 \times 11 = 55 và ϕ(n)=(5−1)(11−1)=40\phi(n) = (5-1)(11-1) = 40.

Bước 2: Kiểm tra gcd⁡(3,40)=1\gcd(3,40)=1, nên e=3e=3 là số mũ công khai hợp lệ.

Bước 3: Tìm số mũ bí mật dd với 3d≡1(mod40)3d \equiv 1 \pmod{40}. Thử d=27d=27 cho 3×27=81=2×40+13 \times 27 = 81 = 2 \times 40 + 1, nên d=27d=27 thoả mãn.

Bước 4: Mã hoá m=2m=2: bản mã là c=23 mod 55=8 mod 55=8c = 2^3 \bmod 55 = 8 \bmod 55 = 8.

Bước 5: Giải mã bằng cách tính c27 mod 55=827 mod 55c^{27} \bmod 55 = 8^{27} \bmod 55. Dùng bình phương lặp theo modulo 55: 82=64≡98^2 = 64 \equiv 9, 84≡92=81≡268^4 \equiv 9^2 = 81 \equiv 26, 88≡262=676≡168^8 \equiv 26^2 = 676 \equiv 16, 816≡162=256≡368^{16} \equiv 16^2 = 256 \equiv 36. Vì 27=16+8+2+127 = 16+8+2+1, nhân 816⋅88⋅82⋅81≡36⋅16⋅9⋅8(mod55)8^{16} \cdot 8^{8} \cdot 8^{2} \cdot 8^{1} \equiv 36 \cdot 16 \cdot 9 \cdot 8 \pmod{55}, rút gọn từng bước cho 22.

Bước 6: Giá trị giải mã được là 22, đúng bằng thông điệp gốc, xác nhận định lý về tính đúng đắn của RSA trên thể hiện cụ thể này.

Ví dụ: Trao đổi khoá Diffie-Hellman thực hiện bằng tay

Với số nguyên tố p=23p=23 và cơ số g=5g=5, Alice chọn bí mật a=6a=6 và Bob chọn bí mật b=15b=15. Tính bí mật chung theo cả hai cách và kiểm tra chúng khớp nhau.

Lời giải

Bước 1: Alice tính A=56 mod 23A = 5^6 \bmod 23. Tính dần luỹ thừa của 5 theo modulo 23: 52=25≡25^2=25\equiv2, 53≡105^3\equiv10, 54≡45^4\equiv4, 55≡205^5\equiv20, 56≡85^6\equiv8. Vậy A=8A=8.

Bước 2: Bob tính B=515 mod 23B = 5^{15} \bmod 23. Dùng 56≡85^6\equiv8 ở trên, 512≡82=64≡185^{12}\equiv8^2=64\equiv18, và 515=512⋅53≡18⋅10=180≡195^{15}=5^{12}\cdot5^3\equiv18\cdot10=180\equiv19. Vậy B=19B=19.

Bước 3: Alice tính bí mật chung là Ba mod p=196 mod 23B^a \bmod p = 19^6 \bmod 23. Vì 19≡−419\equiv-4, 196≡(−4)6=46=409619^6\equiv(-4)^6=4^6=4096, và 4096=178×23+24096 = 178\times23+2, nên giá trị này bằng 22.

Bước 4: Bob tính bí mật chung là Ab mod p=815 mod 23A^b \bmod p = 8^{15} \bmod 23. Viết 8=238=2^3 cho 815=2458^{15}=2^{45}; vì 211≡1(mod23)2^{11}\equiv1 \pmod{23} (kiểm tra trực tiếp: 211=2048=89×23+12^{11}=2048=89\times23+1), và 45=4×11+145=4\times11+1, nên giá trị này rút gọn còn 21=22^{1}=2.

Bước 5: Cả hai phép tính đều cho 22, xác nhận Alice và Bob thống nhất cùng một bí mật chung mà không bao giờ truyền a=6a=6 hay b=15b=15 qua kênh.

Trong RSA với n=55n=55, ϕ(n)=40\phi(n)=40, và số mũ công khai e=3e=3, giá trị nào của dd thoả mãn 3d≡1(mod40)3d \equiv 1 \pmod{40}?

Sự an toàn của trao đổi khoá Diffie-Hellman dựa trên bài toán tính toán nền tảng nào?

Nếu gcd⁡(a,n)=1\gcd(a,n)=1, định lý Euler phát biểu rằng aϕ(n)≡1(modn)a^{\phi(n)} \equiv 1 \pmod n trong đó ϕ(n)\phi(n) đếm điều nào sau đây?

Một ngân hàng muốn ký các bản cập nhật phần mềm để khách hàng có thể xác minh chúng thực sự đến từ ngân hàng và không bị can thiệp. Công cụ mật mã nào trực tiếp cung cấp bảo đảm này?

Tài liệu tham khảo

  1. Alfred J. Menezes, Paul C. van Oorschot, Scott A. Vanstone (1996). Handbook of Applied Cryptography
  2. Peter W. Shor (1994). Algorithms for Quantum Computation: Discrete Logarithms and Factoring · arXiv:quant-ph/9508027
  3. National Institute of Standards and Technology (2024). Module-Lattice-Based Key-Encapsulation Mechanism Standard (FIPS 203)