Phép tính mã hóa và giải mã dùng phép lũy thừa modulọ Để an toàn, thường phải chọn N, e, d, M lớn. Nếu thực hiện bằng cách tính phép lũy thừa trước sau đó rút gọn modulo, thì giá trị của phép lũy thừa là quá lớn để có thể lưu trữ và tính toán. Tuy nhiên số học modulo có một tính chất sau:
[ ]
Chúng ta có thể sử dụng tính chất này để đơn giản phép tính lũy thừa modulo thông qua một phương pháp gọi là “bình phương liên tiếp”. Ví dụ cần tính x16 mod n , đầu tiên sẽ tính a = x mod n , tiếp theo là b = x2 mod n = a2 mod n, tiếp theo là c = x4 mod n = b2
mod n, tiếp theo là d = x8 mod n = c2 mod n, và cuối cùng x16 mod n = d2 mod n. Các số a,
b, c, d luôn nhỏ hơn n do đó tránh được việc tính số lũy thừa lớn đồng thời nâng cao tốc độ tính toán.
Trong trường hợp tổng quát để tính xb mod n,taviết b dưới dạng số nhị phân.
b = bkbk-1 … b2b1b0 trong đó bi là các bít 0, 1
Như vậy: ∑ 2
Do đó ∏
Như vậy ứng bới các bi =1, ta dùng phương pháp bình phương liên tiếp để tính các . Sau đó nhân các kết quả với nhau và rút gọn modulo để có kết quả cuối cùng Ví dụ, tính y = 520 mod 11 : số 20 viết dưới dạng nhị phân là 10100, có bít 2 và bít 4 bằng 1. (nghĩa là 20 = 16 + 4) 51 =5 mod11 52 =(51)2=25 ≡ 3 mod11 54 =(52)2=32 ≡ 9 mod11 58 =(54)2=92=81 ≡ 4 mod11 516 =(58)2=42=16 ≡ 5 mod11
Kết quả cuối cùng y=520 mod11=(54 mod11)(516 mod11)=9x5mod11=1
/* Thuật toán tính lũy thừa modulo xbmodn */ a = x; y = 1;
if (b mod 2 <> 0) y = (y*a) mod n; end if b = b shr 1; a = (a*a) mod n; 68 while (b>0); return y;
Để tăng tốc quá trình mã hóa dữ liệu, người ta thường chọn một khóa công khai e cụ thể nào đó. Thường thìe là 65537 (216 + 1 ). Ngoài ra còn có thể chọne là 3 hoặc 17. Lý do để chọn các con số này là lúc đó e chỉ có 2 bít 1. Do đó giảm được phép các phép nhân trong phép tính lũy thừa modulo (một điểm cần chú ý là phải chọn p và q sao cho e nguyên tố cùng nhau với n). Tuy nhiên nếu chọn e quá nhỏ thì RSA sẽ bị phá mã bằng cách sử dụng định lý số dư Trung Hoa (xem Phụ Lục 2-3).
Giả sử chọn e =3và Alice gửi cùng một thông điệp M cho ba người khác có khóa công khai lần lượt là (3, N1), (3, N2), (3,N3). Ba bản mã sẽ là C1= M3 mod N1 , C2= M3
mod N1 ,C3= M3 mod N3 . Thường thì N1, N2,N3 sẽ nguyên tố cùng nhau theo từng cặp. Theo nguyêntắc của RSA, M đều nhỏ hơn N1, N2, N3nên M3 < N1N2N3.Vậy xét dưới góc độ của định lý số dư Trung Hoa:
N1N2N3 ⇔ T M3 ⇔ A
N1 ⇔ t1, N2 ⇔ t2, N3 ⇔ t3
C1 ⇔ a1, C2 ⇔ a2, C1 ⇔ a3
Theo định lý số dư Trung Hoa, nếu biếta1, a2, a3, t1, t2, t3 ta có thể khôi phục được giá trị Ạ Vậy nếu Trudy có được C1, C2, C3 của Alice, Trudy sẽ tìm được M3 và từ đó tính được M.
Vì ta đã chọn e nhỏ nên d tìm được sẽ khá lớn. Do đó ngoài việc áp dụng phương pháp bình phương liên tiếp để tính , người ta còn áp dụng định lý số dư Trung Hoa để tăng tốc độ tính toán lên 4 lần. Cách thực hiện như sau:
Bổ sung vào khóa riêng các tham số p, q dP, dQ, qInv, với: − p, q là hai số nguyên tố để tính N
− dP.e ≡ 1 mod p
− dQ.e ≡ 1 mod q
− qInv.q ≡ 1 mod p (với giả định p>q)
Áp dụng định lý số dư Trung Hoa theo phương án Garner, thay vì tính , chúng ta có thể tính M như sau:
− − − −
Với cách thực hiện trên, chúng ta chỉ tính phép modulo trên các số p, q có kích thước nhỏ hơn N.
Ch
ứ ng minh:
Tương tự như cách chứng minh RSA, đặt 1 1, ta có:
(vì N chia hết cho p) 69
Từ đó áp dụng định lý Fermat bé, ta suy ra: Tương tự, ta cũng có
Do đó, xét theo định lý số dư Trung Hoa theo phương án Garner thì M trong ZN
tương ứng với cặp (m1, m2) trong Zp×Zq:
N ⇔ T, M ⇔ A, p ⇔ t2, q ⇔ t1, m1 ⇔ a2, m2 ⇔ a1, qInv ⇔ c12
Ta có:
Vậy:
(đpcm).