+2

Mật mã RSA - phần 2

III. Mật mã RSA - thực hiện

1. Kiến thức chuẩn bị

1.1. Số nguyên tố

image.png

Số nguyên tố là một khái niệm toán học quen thuộc chúng ta đã được tiếp xúc ở thời THCS. Một số tự nhiên lớn hơn 11 được gọi là số nguyên tố nếu nó chỉ có hai ước dương duy nhất là 11 và chính nó. Chẳng hạn, số 22 chỉ có hai ước dương là 1122 nên là số nguyên tố, số 55 chỉ có hai ước dương là 1155 nên là số nguyên tố, số 99 là hợp số (không phải số nguyên tố) vì nó có nhiều hơn 22 ước dương là 11, 33, 99.

Định lý vô hạn số nguyên tố: Từ thế kỷ III trước Công nguyên, nhà toán học Hy Lạp Ơ-Clit (Euclide) đã chỉ ra và chứng minh rằng tập hợp các số nguyên tố là vô hạn. Cách chứng minh rất đơn giản bằng cách sử dụng phương pháp phản chứng:

Giả sử có hữu hạn số nguyên tố lần lượt với giá trị tăng dần p1<p2<...<pnp_1 < p_2 < ... < p_n. Xét số A=p1×p2×...×pn+1A = p_1\times p_2\times ... \times p_n + 1 là một hợp số (do A>pnA > p_n), do đó AA phải có một ước nguyên tố pip_i nào đó. Mặt khác A=p1×p2×...×pi×pi+1×...×pn+1A = p_1\times p_2\times ... \times p_i \times p_{i+1} \times ... \times p_n + 1 nên AA chia cho pip_i có số dư là 11. Điều này dẫn đến 11 chia hết cho pip_i (mâu thuẫn). Như vậy có vô hạn số nguyên tố!

1.2. Hai số nguyên tố cùng nhau

Hai số tự nhiên được gọi là nguyên tố cùng nhau nếu chúng chỉ có duy nhất một ước chung là 11. Ví dụ: 7799 là hai số nguyên tố cùng nhau, 6688 không phải là hai số nguyên tố cùng nhau vì chúng có ước chung là 22.

Từ khái niệm trên, chúng ta có một hệ quả: Hai số nguyên tố khác nhau bất kỳ sẽ là hai số nguyên tố cùng nhau.

1.3. Hàm số Ơ-le (Euler) ϕ()\phi()

Leonhard Euler (15 tháng 4 năm 1707 – 18 tháng 9 năm 1783) là một nhà toán học, nhà vật lý học, nhà thiên văn học, nhà lý luận và kỹ sư người Thụy Sĩ.

Hàm số Euler của số nguyên dương nn được ký hiệu là ϕ(n)\phi(n). Với định nghĩa là số các số nguyên dương thỏa mãn đồng thời hai điều kiện:

  • Nhỏ hơn hoặc bằng nn.
  • Nguyên tố cùng nhau với nn.

Chẳng hạn, ϕ(9)=6\phi(9) = 6 vì có 66 số từ 11 đến 99 nguyên tố cùng nhau với 99 là: 1,2,4,5,7,81,2,4,5,7,8.

Công thức tính tổng quát hàm số Euler: Với p1,p2,...,pkp_1, p_2, ..., p_k là tất cả ước nguyên tố của nn, ta có:

ϕ(n)=n(11p1)(11p2)...(11pk)=npn(11p)\phi(n) = n(1-\frac{1}{p_1})(1-\frac{1}{p_2})...(1-\frac{1}{p_k}) = n\prod _{p|n}(1-\frac{1}{p})

Ví dụ: ϕ(9)=ϕ(32)=9(113)=6\phi(9)=\phi(3^2)=9(1-\frac{1}{3})=6, ϕ(36)=ϕ(22.32)=9(112)(113)=12\phi(36)=\phi(2^2.3^2)=9(1-\frac{1}{2})(1-\frac{1}{3})=12.

1.4. Đồng dư Modular

image.png

Hai số nguyên aabb được gọi là đồng dư với nhau theo module nn, nếu hiệu của chúng chia hết cho nn, hay nói cách khác, aabb có cùng số dư khi chia cho nn. Ký hiệu:

ab(modn)a \equiv b \pmod n

Ví dụ:

35(mod2)916(mod7)1325(mod19)3 \equiv 5 \pmod {2}\\ 9 \equiv 16 \pmod {7}\\ -13 \equiv 25 \pmod {19}

1.5. Định lý Fermat nhỏ

Pierre de Fermat (17 tháng 8 năm 1607 tại Pháp – 12 tháng 1 năm 1665) là một học giả nghiệp dư vĩ đại, một nhà toán học nổi tiếng và cha đẻ của lý thuyết số hiện đại.

Định lý Fermat nhỏ phát biểu rằng: Nếu pp là một số nguyên tố, thì với số nguyên aa bất kỳ, apaa^p - a sẽ chia hết cho pp. Ký hiệu bằng đồng dư thức, ta có:

apa(modp)a^p \equiv a \pmod {p}

Ví dụ, với p=7p=7, a=4a=4474(mod7)4^7 \equiv 4 \pmod {7}.

Hệ quả: Nếu pp là một số nguyên tố, thì với số nguyên aa bất kỳ và không chia hết cho pp (aapp nguyên tố cùng nhau), thì:

ap11(modp)a^{p-1} \equiv 1 \pmod {p}

Như ví dụ trên chúng ta còn có: 461(mod7)4^6 \equiv 1 \pmod {7}.

2. Sinh khóa

Trước khi có thể mã hóa và giải mã thuật toán RSA, chúng ta cần có bước tạo khóa, quá trình này đóng vai trò quan trọng vì ảnh hưởng trực tiếp tới tính an toàn trong toàn bộ giai đoạn truyền tin sau này. Yêu cầu cần tạo được cặp khóa public key và private key.

  • Bước 11: Chọn ra hai số nguyên tố pp, qq phân biệt và đủ lớn.
  • Bước 22: Tính n=p.qn=p.q
  • Bước 33: Tính giá trị hàm Euler ϕ(n)=(p1)(q1)\phi(n)=(p-1)(q-1)
  • Bước 44: Chọn một số tự nhiên ee thỏa mãn 1<e<ϕ(n)1<e<\phi(n), đồng thời eeϕ(n)\phi(n) nguyên tố cùng nhau.
  • Bước 55: Tính dd thỏa mãn: de1(modϕ(n))de\equiv 1 \pmod {\phi(n)}

Sau khi hoàn thiện các bước trên, chúng ta thu được khóa công khai (public key) bao gồm số nn (số module) và ee (số mũ công khai, hay số mũ mã hóa), khóa bí mật (private key) bao gồm số nn (xuất hiện ở cả hai khóa), số dd (số mũ bí mật, hay số mũ giải mã).

3. Mã hóa

Thuật toán mã hóa RSA sẽ mã hóa thông điệp dưới dạng các phép tính toán học, tức thực hiện với các con số. Giả sử A cần truyền tải một thông điệp PP cho B, trước hết, A cần chuyển thông điệp dưới dạng một số nguyên mm, với điều kiện dạng mã hóa này có thể giải mã lại thành thông điệp ban đầu (A và B đã thảo luận trước sẽ sử dụng loại mã hóa này). Tiếp theo A sử dụng bộ puclic key (n,e)(n, e) thực hiện tính số cc:

c=me  mod  nc = m^e\ \ \text{mod}\ \ {n}

Số cc được tính bằng số dư của mem^e khi chia cho nn, cũng chính là thông điệp đã mã hóa cần truyền tải.

Khi B nhận được cc, B sử dụng bộ private key (n,d)(n, d) thực hiện tính lại số mm:

m=cd  mod  nm = c^d\ \ \text{mod}\ \ {n}

Vì sao chúng ta có công thức tính lại số mm như trên? Bạn đọc theo dõi chứng minh như sau, ta có:

Từ công thức c=me  mod  nc = m^e\ \ \text{mod}\ \ {n} có:

cme(modn)cd(me)d(modn)cdmde(modn) ()c\equiv m^e \pmod{n}\\ \rightarrow c^d\equiv (m^e)^d \pmod{n}\\ \rightarrow c^d\equiv m^{de} \pmod{n}\ (*)

Tiếp theo, chúng ta sẽ chứng minh: mdem(modp)m^{de}\equiv m \pmod{p}, hay pmdemp|m^{de}-m (pp là ước của mdemm^{de}-m). Nếu mm là bội của pp thì điều này là rõ ràng. Ngược lại, nếu mmpp nguyên tố cùng nhau, theo định lý Fermat nhỏ ta có:

mp11(modp)m^{p-1}\equiv 1 \pmod{p}

de1(modϕ(n))de\equiv 1 \pmod {\phi(n)} nên ϕ(n)  de1\phi(n)\ |\ de-1, hay (p1)(q1)  de1(p-1)(q-1)\ |\ de-1, suy ra (p1)  de1(p-1)\ |\ de-1. Đặt de1=t(p1)de - 1 = t(p-1) thì:

mde1=mt(p1)=(mp1)t(mp1)t1t1(modp)mdem(modp)m^{de-1} = m^{t(p-1)} = (m^{p-1})^t\equiv (m^{p-1})^t\equiv 1^t\equiv 1 \pmod{p}\\ \rightarrow m^{de} \equiv m \pmod{p}\\

Tương tự ta cũng có: mdem(modq)m^{de} \equiv m \pmod{q}. Do ppqq là hai số nguyên tố cùng nhau nên mdem(modpq)m^{de} \equiv m \pmod{pq}, hay mdem(modn)m^{de} \equiv m \pmod{n}. Từ đây kết hợp với ()(*) ta có:

mcd(modn)m=cd  mod  nm \equiv c^{d} \pmod{n}\\ \rightarrow m = c^{d}\ \ \text{mod}\ \ {n}

Xem xét một ví dụ cụ thể: giả sử cặp số nguyên tố (p,q)=(61,53)(p, q)=(61, 53), số n=61×53=3233n=61\times 53=3233, ϕ(n)=ϕ(3233)=(611)×(531)=3120\phi(n)=\phi(3233)=(61-1)\times (53-1)=3120, chọn e=17e=17 thỏa mãn 1<17<31201<17<3120(e,ϕ(n))(e, \phi(n)) là hai số nguyên tố cùng nhau, số d=2753d=2753 thỏa mãn de1(modϕ(n))de\equiv 1 \pmod {\phi(n)}. Thông điệp cần mã hóa ở dạng chuỗi số nguyên m=1289. Tính thông điệp mã hóa c:

c=128917  mod  3233=272c = 1289^{17}\ \ \text{mod}\ \ {3233} = 272

Khi nhận được thông điệp mã hóa, người nhận có thể tính lại:

m=2722753  mod  3233=1289m = 272^{2753}\ \ \text{mod}\ \ {3233} = 1289

Bài tập dành cho bạn đọc:

  • Bài 11: Với khóa công khai n=943n=943e=7e=7, thông điệp mã hóa c=545c=545, số mũ bí mật d=503d=503 hãy tìm ra thông điệp gốc mm?
  • Bài 22: Với khóa công khai n=943n=943e=7e=7, thông điệp mã hóa c=545c=545, hãy tìm ra thông điệp gốc mm?

Tài liệu tham khảo


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí