Thắc mắc về Hệ mã RSA

Trong hệ mã RSA

  • Các bước Sinh Khóa:
    • B1: Chọn p,q nguyên tố,đủ lớn,tương đồng

    • B2: Tính n = p*q ; m = (p-1)(q-1)

    • B3: Chọn e: 1<e<m , UCLN(e,m) = 1

    • B4: Tính d : de đồng dư 1 (mod n)
      => Khóa công khai là cặp (e,m)
      Khóa bí mật là cặp <p,q,d>

    • B5: Bẻ X (thông tin cần mã hóa) thành các đoạn u-bit thỏa mãn: 2^u < n < 2^(u+1)

    • B6: Giả sử X là u bit cho đơn giản.Tính Y = (X^e) mod n


Cho em hỏi:

  1. Tại sao p,q phải nguyên tố, đủ lớn, tương đồng ?
  2. Vai trò của m là gì? ( thấy nó là khóa công khai mà ko tham gia vào sinh khóa :frowning: )
  3. Tại sao khi biết đc p,q thì tính được d.=> Bí mật p,q là đủ, Vậy tại sao phải bí mật d?
  4. Tại sao phải bẻ X thành các đoạn u bit thỏa mãn đk trên ?

Cái “bẻ bit” này thực ra không phải dùng như vậy đâu bạn. Tìm hiểu OAEP nhé.

Ba câu này thuộc về toán học, chỉ cần bạn học Số học nhập môn khoảng 6-7 tuần thì có thể tự trả lời.

  1. Nếu p, q không nguyên tố thì không thể tính m như vậy được, vì m (hàm totient) này dựa trên phân tích TSNT. Số bit phải ngang bằng để không thể chia thử được, và đó là một lí do nữa để p, q phải nguyên tố.
  2. m sinh ra từ n mà.
  3. Bạn phải chọn một số rồi lấy nghịch đảo mod, rồi giữ bí mật một trong hai số.

Thực ra nên dùng hàm Carmichael BCNN(p-1, q-1) thì đúng hơn.

2 Likes
  1. p q phải lớn ngang nhau, ngang ở đây là cùng số bit, vd p cần 1024 bit để biểu diễn thì q cũng phải là số có độ lớn 1024 bit. Nếu khác số bit thì bởi vì n = pq công khai mêm chỉ cần tìm p là có thể tìm ra q = n / p. Nếu p 512 bit, q 1536 bit thì tuy n 2048 bit, độ khó để phân tích n thành p q chỉ là 512 bit thay vì 1024 bit. Càng lớn thì phân tích p q càng khó, nhưng lớn quá thì mã hóa chậm đi rất nhiều.
  2. Hình như có nhầm lẫn ở đây? (n, e) mới là khóa công khai.
  3. Bạn tạo ra được e, d, bạn công khai cả hai thì lấy cái gì để mã hóa… 1 số dùng để mã hóa thì số còn lại để giải mã. Bạn công khai cả hai thì khác gì công khai password email cho mọi người biết…
  4. Vì RSA giải mã thông điệp ra thành 1 số nhỏ hơn n = pq, nếu thông điệp mã hóa X đc chuyển sang số lớn hơn n thì Y giải mã ra là (X mod n) < n nên Y < X, hay Y!= X. Vì vậy nên X phải < n.
3 Likes

Để trả lời câu hỏi, ta cần quay lại với cơ sở toán học của RSA. (Nếu quý bạn đọc đã hiểu test Miller-Rabin thì có thể đi thẳng đến phần kết luận vì cách chứng minh cũng tương tự, đây cũng chỉ là phần mở rộng của định lí Fermat a^p = a (mod p))


Định lí Bezout: Hai số nguyên dương có ước chung lớn nhất chia hết m khi và chỉ khi phương trình ax + by = m có nghiệm. Nghĩa là khi tồn tại x, y nguyên sao cho ax + by = 1 thì gcd(a, b) = 1 và ngược lại. Áp dụng well-ordering và tính chất đóng của + trên tập {d \ d = ax + by > 0; x, y ∈ Z} để c/m.


Tại sao RSA cơ bản là như vậy :smiley:

Tất cả nằm ở phương trình M^(ed) = M (mod n). Vậy tích ed phải bằng 1 với modulo nào đó, mà ai học sơ sơ đại số cũng biết 1 là phần tử trung hòa của nhóm nhân, nhưng nhóm nào?

Đặt S = {x ∈ N \ x < n && gcd(x, n) = 1}. Ta nói rằng phép nhân * mod n là đóng trên tập S, vì theo Bezout, với mỗi hai số a, b ∈ S ta có ngay ax + ny = 1 và bx’ + ny’ = 1. Nhân lại: ab(xx’) + nybx’ + ny’ax + n^2yy’ = 1
<=> ab(xx’) + n(ybx’ + y’ax + nyy’) = 1. Vậy là đủ :slight_smile:
Cũng do Bezout nên mỗi phần tử trong S đều có phần tử nghịch đảo (ax + ny = 1, nếu m | x và m | n thì m | 1, vậy m phải bằng 1, huề vốn). Vậy (S, *) đầy đủ các tính chất của một nhóm nhân.

Tính duy nhất. Không mất tính tổng quát chọn m bất kì thuộc S, dễ thấy rằng các tích mr với r ∈ S đều đôi một khác nhau, vì m*r = m*r' (mod n) <=> m(r - r') = 0 (mod n) <=> r = r' (do tính chất của S). Vậy m^|S| * pi(r ∈ S) (r) = pi(r ∈ S) (r) (mod n) (do tính chất đóng), hay m^|S| = 1 (mod n).


Thay |S| = phi(n) = (p-1)(q-1), vậy M^[(p-1)(q-1)] = 1, hay M^[k(p-1)(q-1)+1] = M. Vậy là giải thích xong một tính chất của nhóm nhân mod n.

Đừng nhầm với 1, g, g^2, g^3, … là thuật toán khác :slight_smile:

Vậy có thể trả lời:

  1. n có thể là bất cứ số tự nhiên nào miễn là đi theo những bước như vậy. Nếu n nguyên tố thì phương trình ed = 1 (mod n-1) quá dễ và thuật toán vứt đi. Nhưng nếu n là hợp số thì phương trình này không có modulo, vậy thì làm sao giải :smiley: Khi phân tích TSNT thì thừa số càng lớn càng khó tìm, nghĩa là tích hai số nguyên tố là khóa mạnh nhất.
  2. đã giải thích ở trên (tức là |S|).
  3. d là nghiệm phương trình trên nên phải giấu (chọn một trong hai số để giữ bí mật, số còn lại để công khai)

Để theo dõi thì phải đi từ ước cho tới phần số nguyên tố, mấy bài đầu thôi.


Tính chất đóng có thể chứng minh ntn: Ta có m*gcd(u, v) = gcd(mu, mv) (sử dụng đnghĩa), nên có thể viết: gcd(ab, n) = gcd(ab, n*gcd(a, 1)) = gcd(ab, gcd(an, n)) = gcd(ab, an, n) = gcd(a*gcd(b, n), n) = gcd(a, n) = 1. (SO: https://math.stackexchange.com/a/20904)

5 Likes

A post was merged into an existing topic: Topic lưu trữ các post off-topic - version 3

Ở trên thì ta kèm thêm điều kiện cơ số m (tức là plaintext) phải nguyên tố cùng nhau với modulus n. Thực sự RSA áp dụng được với mọi m ∈ [1… n-1] do tính chất bán nguyên tố của modulus (n = pq).


Ta đã chọn d, e sao cho (p-1)(q-1) | ed-1, vậy áp dụng định lí Fermat nhỏ ta có:
m^(ed) = m (mod p) && m^(ed) = m (mod q)
<=> p | m^(ed) - m && q | m^(ed) - m
<=> pq | m^(ed) - m (BCNN)
<=> n | m^(ed) - m
<=> m^(ed) = m (mod n)

Vì vậy chỉ cần ed = 1 (mod BCNN(p-1, q-1)).

Bạn đọc có thể c/m đk cần và đủ là n bằng tích các thừa số nguyên tố đôi một khác nhau (= pqrs…) để thỏa mãn m^(ed) = m (mod n) cho m = 0…n-1.

1 Like

Chào mọi người. Hiện tại mình đang làm bài tập lớn nghiên cứu về mã hoá RSA, chữ ký điện tử. Nhưng hiện tại mình đang gặp vấn đề khi số hoá thông điệp để mã hoá. Ví dụ mình có public key (n,e), private key (n,d) và thông điệp cần mã hoá là “abc” sau đó mình chuyển chuỗi sang ascii lần lượt là “97 98 99” và mã hoá lần lượt từng ký tự. Khi mã hoá c = m^e mod(n) = 97^e mod(n) = một số. Vd(c tính ra được bằng 12345) thì làm sao để chuyển 12345 ngược lại thành mã ascii để làm bản mã. Mình muốn thông điệp sau khi mã hoá là ký tự ascii thì phải chuyển 12345 kia như thế nào. Vd 12345->C. Rất mong mọi người ai đã từng làm có thể cho mình xin lời khuyên hoặc ý tưởng để giải quyết vấn đề này vì thời gian nộp báo cáo không còn nhiều và mình cũng đã nghĩ 2 hôm rồi mà vẫn không ra. Cám ơn mọi người!

Bài trên có thể sẽ giúp bạn nảy ra một ý gì đó.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?