- vừa được xem lúc

Mật mã RSA - phần 2

0 0 5

Người đăng: Viblo Security

Theo Viblo Asia

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

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

1.1. Số nguyên tố

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

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

Bình luận

Bài viết tương tự

- vừa được xem lúc

[Cryptopals] Set 8: Abstract Algebra (Challenge 63-66)

Đây là một bài trong series Cùng giải Cryptopals!.Các bạn nên tự làm hoặc vừa đọc vừa làm thay vì đọc lời giải trực tiếp. . Cẩn thận nhé, phần này rất rất dài, và khó hơn các phần trước rất nhiều.

0 0 47

- vừa được xem lúc

Get Paid with Crypto in your App // Coinbase Commerce Tutorial

Learn how to accept cryptocurrency payments, like $BTC or $ETH, in your webapp with Coinbase Commerce. https://fireship.io/lessons/crypto-payments-web-firebase. .

0 0 53

- vừa được xem lúc

Tản mạn về lỗ hổng trong smart contract của Fairmoon Token, các dấu hiệu bất thường và nguy cơ từ crypto

Hôm nay (19/05/2021) là một ngày đen tối đối với cộng đồng crypto khi:. .

0 0 69

- vừa được xem lúc

Tạo mạng P2P trên blockchain và phát hành tiền điện tử của riêng bạn

Chào các bạn, trong bài viết Tự tạo Blockchain trong 60 dòng code Javascript , mình đã hướng dẫn cách tạo blockchain trong 60 dòng Javascript. Trong bài viết này, mình sẽ tạo bộ phận quan trọng nhất c

0 0 48

- vừa được xem lúc

What happens if you hack 4.5 billion BTC? // The Code Report

Blockchain networks are virtually unhackable, but crypto exchanges not so much. In 2016, hackers stole 4.

0 0 29

- vừa được xem lúc

Web5... The Web3 Killer?

Web5 is a new decentralized web framework based on the Bitcoin Lightning Network designed to replace Web3. . Resources. .

0 0 35