3.3.1 Modul chung
Để tránh việc phân tích modul N = pq khác nhau cho các người dùng khác nhau, chúng ta lấy N chung cho tất cả. Cùng một N được sử dung cho tất cả người sử dụng. Trung tâm xác thực có thể cung cấp cho người sử dụng i với một cặp ei, di và người sử dụng i có một khóa công khai là (N,ei) và khóa riêng là (N,di).
Ban đầu chúng ta có: một bản mã C = Mea mod N cung cấp cho Alice không được mã hóa bởi Bob, vì Bob không có da. Tuy nhiên điều này là nhầm lẫn và kết quả là hệ thống không an toàn. Bằng mệnh đề 1 (ở trên) Bob có thể sử dụng các thành phần eb và db
của mình để nhân tử hóa N. N bị nhân tử hóa bởi Bob có thể lấy được khóa riêng da của Alice từ khóa công khai ea của cô ấy. Với cách tiếp cận này, theo Simmons chỉ ra rằng một modul RSA không nên sử dụng quá một thực thể.
3.3.2 Mù (Blinding)
Marvin chọn ngẫu nhiên một số r ∈ Z*
N và đặt M’ = re M mod N. Sau đó anh ta nhờ Bob ký lên M’. Bob có thể cung cấp chứ ký của mình là S’ lên M’. Nhưng từ cách tính S’= (M’)d mod N, Marvin có thể đơn giản tính S = S’/r mod N để có được chữ ký của Bob là S trên M.
Se = (S’)e/re = (M’)ed/re = M’/re = M/(mod N)
3.4 Số mũ riêng bé (Low Private Exponnent)
Trong thực tế, để giải mã nhanh đòi hỏi số d nhỏ và điều này để lộ lỗ hổng mà kẻ tấn công có thể thực hiện như sau. Trước hết ta nghiên cứu định lý Wiener
Định lý 1 (M. Wiener): Cho N = pq với q < p< 2q. Giả sử d < 1/3N1/4. Cho trước (N,e) với ed = 1 mod ϕ(N), Marvin có thể tìm được d hiệu quả.
Việc chứng minh định lý trên dựa trên xấp xỉ hóa phân số liên tục như sau: Khi ed = 1 mod ϕ(N), tồn tại một số k thỏa mãn ed - kϕ(N) = 1
Vì thế: ) ( 1 ) ( d d N k N e ϕ ϕ − = Do đó, d k
là xấp xỉ của ϕ(eN). Mặc dù Marvin không biết ϕ(N), anh ta có thể sử dụng N để xấp xỉ nó. Hơn nữa, từ ϕ(N) = N- p- q +1 và p + q-1< 3 N , chúng ta có | N - ϕ(N) | < 3 N . Sử dụng N thay vào ϕ(N), chúng ta có: Nd N k kN N k ed d k N e − = − ϕ( )− + ϕ( ) = N d k Nd N k Nd N N k( ( )) 3 3 1 = ≤ − − ϕ
Bây giờ, kϕ(N) = ed – 1 < ed. Từ e < ϕ(N), chúng ta thấy rằng k < d < 3 1 N1/4. Vì thế ta có: 2 4 / 1 2 1 1 d dN d k N e − ≤ <
Đây là hệ thức xấp xỉ cổ điển. Phân số
d k với d < N là xấp xỉ của N e nên bị chặn tại log2N. Trong thực tế, tất cả các nhân tử thu được từ phân tích đều hội tụ tại kết triển khai mở rộng phân số
N e
[12, Th, 177]. Tất cả kết quả đó đều thu được từ việc tính toán logN hội tụ của việc tính toán phân số
N e . Một trong những kết quả đó sẽ là d k . Khi đó ed - kϕ(N) = 1, chúng ta có gcd(k,d) = 1, và vì thế d k
là rút gọn phân số. Thuật toán tìm khóa riêng d là thuật toán có thời gian tuyến tính.
3.4.1 Độ lớn e
Thay vì rút gọn e trong ϕ(N), ta sử dụng (N,e’) cho khóa công khai thỏa mãn e’ = e + t.ϕ (N) trong đó số t lớn. Rõ ràng có thể sử dụng e’ thay thế e để mã hóa thông điệp. Tuy nhiên, khi số e có giá trị lớn, theo chứng minh ở trên thì số k không thể nhỏ hơn. Một tính toán đơn giản chỉ ra rằng nếu e’ > N1.5 thì sẽ không có vấn đề gì xẩy ra mặc dù số d nhỏ và tấn công ở trên không thể thực hiện được. Nhưng điều bất tiện là số e lớn sẽ là tăng thời gian mã hóa.
3.4.2 Sử dụng CRT
Một cách tiếp cận khác là sử dụng định lý đồng dư trung hoa (Chinese Remainder Theorem - CRT). Ta chọn một số d sao cho cả dp = d mod (p - 1) và dp =d mod (q - 1) đều nhỏ 128 bits. Để giải mã nhanh bản C ta có thể tiến hành: Trước hết ta tính Mp = Cdp
mod p và Mq = Cdq mod q . Sau đó sử dụng CRT để tính giá trị M ∈ ZN thỏa mãn M = Mp
và dq là nhỏ song giá trị d mod ϕ(N) có thể lớn, tùy thuộc vào ϕ(N). Theo kết quả, sự tấn công của định lý 2 không được áp dụng. Chúng ta lưu ý rằng nếu (N,e) được biết thì kẻ địch có thể tấn công N trong thời gian O(min( dp, dq)), vì thể dp và dq không thể quá nhỏ.
Mặt khác ta không thể biết được điều gì xẩy ra đối với vấn đề an ninh này. Chúng ta chỉ biết thông qua tấn công hữu hiệu của Wiener. Định lý 1 gần đây đã được cải thiện bởi Boneh và Durfee [4], họ chỉ ra rằng số với d < N0.292, kẻ tấn công có thể tính được d từ (N,e). Kết quả này chỉ ra ranh giới của Wiener là không rõ ràng. Nó có vẻ như là d< N0.5, đây là một bài toán mở.
Bài toán mở : Cho N = pq và d < N 0.5. Nếu Marvin biết (N,e) với ed = 1 mod ϕ
(N) và e < ϕ(N), anh ta có thể tìm được d không ?
3.5 Số mũ công khai bé (Low public Exponent)
Định lý 2 (Coppersmith): Cho N là một số nguyên và f ∈ Z[x] là một đa thức mà có độ đo
là d. Đặt X = N1/d-e cho e ≥ 0. Sau đó biết (N,f) Marvin có thể tìm tất cả số nguyên |x0| < X thỏa mãn f(x0) = 0 mod N. Thời gian chạy phụ thuộc vào thời gian chạy thuật toán LLL với trên một lưới có khoảng cách là O(ω) với ω = min(1/e, log2 N).
Định lý cung cấp một thuật toán có thể tìm kiếm hiệu quả tất cả gốc f của N ít hơn X = N1/d. Với X nhỏ hơn, thời gian chạy thuật toán cũng giảm. Sức mạnh của thuật toán là có thể tìm được gốc của N trong thời gian đa thức. Định lý Coppersmith làm việc rất hiệu quả với một số nguyên tố.
3.5.1 Hastad's Broadcast Attack.
Để đơn giản ta coi ei là thành phần công khai bằng 3. Marvin tìm ra M rất đơn giản nếu k ≥ 3. Thực vậy, Marvin có được C1, C2, C3, thỏa mãn:
C1 = M3 mod N1, C2 = M3 mod N2, C3 = M3 mod N3.
Nên với e = 3, gửi các thông điệp giống nhau đến 3 người nhận là không an toàn. Giải pháp chống tấn công này chúng ta gắn các thông điệp trước khi mã hóa với đa thức ?
Định lý 3 (Hastad). Cho N1, . . , Nk là những số nguyên tố và tập Nmin = mini(Ni) từng đôi một. Với gi ∈ ZNi[x], k là đa thức có giá trị nhỏ nhất là d. Tồn tại M < Nmin thỏa mãn: gi(M) = m mod Ni với tất cả i = 1,…,k. Giả thiết rằng k > d, có thể tìm M khi cho (Ni,gi)k
i=1.
Định lý chỉ ra rằng một hệ thống đồng biến với các đa thức nguyên tố hỗn hợp có thể giải quyết hiệu quả, giả thiết rằng các hàm được cung cấp đầy đủ. Bằng cách cài đặt gi
= fiei – Ci mod Ni, chúng ta thấy rằng Marvin có thể tìm được M từ bản mã được cho với số thành viên ít nhất là d, khi đó d là giá trị lơn nhất của eideg(fi) với i = 1,…,k.
Chúng ta lưu ý rằng để chống lại tấn công broadcast ở trên chúng ta sử dụng một cặp số ngẫu nhiên thay vì gắn cứng vào một giá trị.
3.5.2 Franklin-Reiter Related Message Attack.
Hệ quả (FR): Giả sử rằng với e =3 và (N,e) là một khóa công khai của RSA. Cho
M1 ≠M2∈ Z*
N thỏa mãn M1 = f(M2) mod N trong đó f = ax + b ∈ Z*
N là đa thức tuyến tính với b ≠ 0. Khi đó cho trước (N, e, C1,C2, f), Marvin có thể tìm được M1, M2 với thời gian là đa thức bậc hai log N.
- Để chứng minh hệ quả FR ta tính gcd của hai đa thức.
- Với e = 3 thì giá trị gcd phải là giá trị tuyến tính. Thật vậy, đa thức x3 – C2
phân tích thành p và q là phép phân tích tuyên tính và không thể rút gọn về nhân tố bậc hai (ta nhớ rằng gcd(e, ϕ(N)) = 1 và vì thế x3 – C2 chỉ có giá trị gốc nằm trong ZN). Khi đó g2
không thể chia cho g1, gcd phải là một hàm tuyến tính. Với e = 3 hàm gcd luôn là tuyến tính. Tuy nhiên, đối với một vài M1, M2 và f, gcd có thể không phải là tuyến tính, trong trường hợp này việc tấn công là thất bại.
- Thường nó chỉ áp dụng với khi số mũ công khai e được sử dụng với giá trị nhỏ. Với e lớn, công việc tính toán gcd là rất khó. Một câu hỏi thú vị (nếu không nói là khó) đặt ra là liệu việc tấn công với một số e bất kỳ sẽ như thế nào. Khí đó việc tính toán gcd của g1 và g2 theo cách trên có trong thời gian đa thức đối với log e ?
3.6.1 Coppersmith's Short Pad Attack.
- Ý tưởng chính của tấn công này là ta thêm ngẫu nhiên các bít vào cuối của thông điệp, thuật toán này có thể thu được bản rõ của M. Tấn công này rất đơn giản nhưng rất nguy hiểm.
Định lý 4: Với (N,e) là một khóa công khai của RSA, N có độ dài n-bits. Đặt m =
[n/e2]. Với M ∈ Z*
N là một thông điệp có độ dài n-m bit. M1 = 2mM + r1 và M2= 2mM + r2
với điều kiện r1 và r2 là hai số nguyên khác nhau thỏa mãn 0 ≤ r1 , r2< 2m. Nếu Marvin biết (N,e) và các bản mã hóa C1, C2 của M1, M2 (nhưng không biết r1 , r2 ), anh ấy có thể tìm ra M một cách có hiệu quả.
Thực tế, khi e = 3 tấn công có thể đạt được với độ dài của các bít thêm vào là ít hơn 1/9th độ dài của bản thông điệp. Đây là một kết quả quan trọng. Lưu ý rằng việc đưa ra giá trị e = 65537 thì sự tấn công là vô ích đối với các modul kích kỡ chuẩn.
3.6.2 Tấn công bằng khóa riêng.
Với (N,d) là một khóa riêng của RSA. Giả sử rằng Marvin có thể tìm được một nhân tử trong dãy bit của d, hay một phần của d. Từ đó Marvin có thể khôi phục được phần còn lại của d. Cụ thể ta có định lý sau:
Định lý 5 (BDF): Cho (N,d) là một khóa riêng của RSA trong đó N có độ dài là n
bit. Biết [n/4] bít ít ý nghĩa nhất của d, Marvin có khôi phục được số d với thời gian tuyến tính elog2e.
Định lý 6 (Coppersmith): Giả sử số N = pq (là một modul RSA) có n bit. Cho trước n/4 bít ít ý nghĩa nhất (hoặc n/4 bít nhiều ý nghĩa nhất) của p (giả thiết p<q). Khi đó có tồn tại một phân tích số N một cách có hiệu quả.
- Định lý BDF được chứng minh thông qua định lý Coppersmith.
Định lý 5 là kết quả của định lý 6. Trong thực tế, từ e và d, tồn tại một số nguyên k sao cho ed – k(N – p – q + 1) = 1
vì thế d < ϕ(N), mặt khác ta có 0 < k ≤ e. Rút gọn với 2n/4 và đặt q = N/p, chúng ta có: (ed)p – kp(N – p + 1) + kN = p (mod2n/4).
Khi Marvin biết được ít nhất n/4 bít của chuỗi bít d, anh ta có được giá trị của ed mod 2n/4. Ví thế anh ta có được phương trình có k và p. Mặt khác từ giá trị của e và có thể là k, Marvin giải phương trình bậc hai chứa p và thu được một giá trị của p mod 2n/4. Với các giá trị thu được này, anh ta chạy thuật toán của định lý 6 để phân tích nhân N thành nhân tử. Do tổng các giá trị của p mod 2n/4 lớn nhất là e log2e. Vì thế tại giá trị lớn nhất e log2e, N sẽ bị phân tích.
Định lý 5 được biết như là một phương pháp tấn công vào khóa riêng (partial key- exposure). Tương tự như các phương pháp tấn công đã tồn tại, với giá trị e lớn hơn và phải bé hơn N , tuy nhiên với số bít tăng kỹ thuật sẽ phức tạp hơn. Có một điều thú vị là các hệ mật dựa trên log rời rạc như hệ mật khóa công khai ElGamal, thì dường như không dẽ bị phá vỡ bởi phương pháp này. Hơn nữa nếu gx mod p và một nhân tử là hằng số x được cho, không có thuật toán với thời gian đa thức để tính phần còn lại của x.
Với cách tấn công này, chúng ta chỉ ra rằng khi mã hóa với thành phần e nhỏ, hệ mật RSA bị rò rỉ một nửa số bít quan trọng nhất (hoặc ít quan trọng nhất) tương ứng với rò khóa riêng d. Để hiểu rõ điều này, chúng ta xét phương trình
ed –k(N – p – q + 1) = 1
trong đó k là một số nguyên thỏa mãn 0 < k ≤ e. Cho k, Marvin có thể dẽ dàng tính :
kN e d∧ = ( +1)/ Sau đó tính: N e N k e q p k d d∧− ≤ ( + )/ ≤3 / <3
Vì thế d∧ là một xấp xỉ tốt cho d. Với biên này cho thấy với d tốt nhất, một nửa số tín hiệu bít của d∧ sẽ dẫn tới d. Vì thế chỉ e mới có thể là giá trị của k, Marvin có thể xây dựng một tập con nhỏ của e như là một thành phần của tập bằng một nửa tín hiệu bít có ý nghĩa nhất của d. Trong trường hợp e = 3 là trường hợp đặc biệt, tại đây có thể chỉ ra rằng k luôn bằng 2 và vì thế hoàn toàn bị rò rỉ một nửa tín hiệu bít ý nghĩa nhất của d.
3.7.1 Tấn công dựa trên thời gian.
Tấn công thông minh của Kocher cho thấy rằng bằng phương pháp lựa chọn thời gian chính xác để giải mã (hoặc ký số) RSA của smartcard, Marvin có thể nhanh chóng tìm ra thành phần giải mã riêng d.
Sử dụng thuật toán “repeated squaring algorithm” tính C = Md mod N. Với d =
dndn-1 . . . d0 là biểu diễn nhị phân của d (hay d = ∑ = n i idi 0 2 với di ∈ {0,1}), sử dụng nhiều
nhất 2n modul nhân. Nó dựa trên việc xem xét C = ∏=
n
i 0M2idi mod N. Thuật toán làm việc như sau:
Đặt: z = M và C =1.
For i = 0,…,n, thực hiện các bước: Nếu di = 1 đặt C = C – z mod N
Đặt z = z2 mod N
Tại trạng thái kết thúc, C có giá trị là Md mod N.
Để thực hiện tấn công, Marvin sẽ yêu cầu smartcard cung cấp chữ ký điện tử trên trường số lớn ngẫu nhiên với một trong các thông điệp M1, . . . , Mk∈ Z*
N và với đơn vị thời gian Ti nó yêu cầu card cung cấp các chữ ký khác nhau.
- Nếu d1 = 1, smardcard sẽ tính C.z = M . M2 mod N. Nếu khác 1 thì không tính. Gọi ti là thời gian tính Mi.Mi2 mod N. Các giá trị ti’s sẽ khác nhau phụ thuộc vào giá trị của Mi (Cũng như thuật toán rút gọn, thời gian tính toán sẽ phụ thuộc vào giá trị mà ta cần tình toán). Đơn vị ti’s là số lần anh ta ngừng để yêu cầu với card (trước khi thực hiện tấn công) tương ứng với những lần anh ta thao tác vật lý trực tiếp card.
- Khi d1 = 1, hai bộ {ti} và {Ti} có tương quan với nhau. Ví dụ: Nếu với i, ti lớn hơn so với sự mong đợi, thì Ti cũng lớn hơn so với sự mong đợi. Mặt khác: nếu d1 = 0, hai bộ {ti} và {Ti} độc lập như các biến ngẫu nhiên. Với độ đo độ tương quan, Marvin có thể xác định được d1 hoặc bằng 1 hoặc bằng 0. Tiếp tục với phương pháp này, anh ta có thể khôi phục được d2,d3… Lưu ý rằng, khi thành phần e của khóa công khai được sử dụng
thấp, khóa riêng tìm được theo phương pháp ở phần trên giúp cho phương pháp của Kocher có thể khôi phục được toàn bộ d chỉ cần biết trước một phần tư số bít của d.
Giải pháp chống đỡ:
1) Đơn giản nhất là tăng độ trễ nhất định để quá trình mũ hóa luôn mất một thời gian nhất định.
2) Rivest đưa ra dựa trên cơ chế bịt các kẽ hở (blinding).
Kocher đã khám phá ra một cách tấn công khác dọc theo các hàng được gọi là phân tích mật mã theo lũi thừa (power cryptanalysis). Kocher đã chỉ ra rằng bằng cách đo chính xác lũy thừa của smartcard trong suốt quá trình sinh chữ ký, Marvin có thể dễ dàng ra khóa riêng. Thật vậy, trong suốt quá trình thực hiện một phép nhân, năng lương tiêu thụ của card cao hơn mức bình thường. Bằng phương pháp đo chiều dài của độ cao của sự tiêu thụ trong phần trước, Marvin có thể dễ dàng xác định được nếu card lặp đi lặp