Chƣơng 2: ĐỘ AN TOÀN CỦA SƠ ĐỒ CHỮ KÝ SỐ
2.1.3. Những sơ suất làm giảm mức an toàn của sơ đồ chữ ký RSA.
Tính bảo mật của sơ đồ chữ ký RSA chủ yếu dựa vào việc giữ bí mật khoá ký a và các thừa số p, q của n. Ta thử xét một vài trƣờng hợp xâm phạm tới các yếu tố bí mật đó.
1). Đối phương biết được khoá mật a.
(Do ngƣời dùng để lộ a, hay do đối phƣơng tính đƣợc)
Nếu biết số mũ giải mã a thì coi nhƣ đã làm xong việc thám mã, nên việc tìm đƣợc p, q cũng không còn ý nghĩa đối với việc thám mã nữa.
Tuy nhiên, điều này có một ý nghĩa quan trọng hơn đó là, nếu kẻ tấn công biết a thì không chỉ phải thay đổi khoá mật khác mà còn phải chọn modul n khác. Vì khi đó ngƣời sở hữu khoá mật a có thể tính đƣợc (n). Do đó biết cách tìm khoá giải mã a bất kỳ, nếu khoá lập mã vẫn giữ modul n cũ bằng p.q.
Ta sẽ chứng minh rằng nếu biết khoá mật a sẽ tìm đƣợc các thừa số p, q của n. Do a.b 1 mod (n) nên a.b – 1 = 1.(n) = k.
Do (n) là số chẵn, nên có thể viết k dƣới dạng k = 2t. r (với r là số lẻ) và t 1. ((n) là số chẵn vì (p-1) và (q-1) là số chẵn).
Theo định lý Ơle: với mọi a mà (a,n) = 1 thì a(n) mod n 1, do đó ta có:
g Z*n thì gk 1 mod n (do k là bội của (n)) và do đó gk/2 là căn bậc hai của 1 theo modul n.
Theo định lý phần dƣ Trung hoa, 1 có bốn căn bậc hai modul n =p.q. Hai căn
bậc hai là 1. Hai căn bậc hai khác là x (x 1 mod p và x - 1 mod q) (1 < x < p). Sử dụng một trong hai căn bậc hai không tầm thƣờng này sẽ tìm đƣợc p,
q trong thời gian đa thức bằng cách tính gcd(x-1, n).
x2 1 mod n (x-1)(x+1) 0 mod n suy ra (x-1)(x+1) chia hết cho n. Đặt (x-1, n) = d1 và (x+1, n) = d2.
Vì n = p.q và x 1, 0 < x < n nên:
x-1 0 và 0 < x-1 < n, x+1 n và 0 < x+1 < n
2). Đối phương biết (n), tính được p và q.
(Do ngƣời dùng để lộ (n), hay do đối phƣơng tính đƣợc) Biết (n) thì có thể tính p, q theo hệ phƣơng trình:
p.q = n p.q = n
(p-1)(q-1) = (n) p + q = n +1 - (n) Do đó p và q là nghiệm của phƣơng trình bậc hai:
x2 – (n - (n) + 1)x + n = 0
3). Nhiều người sử dụng chung modulo n.
Trong hệ thống có k ngƣời đăng ký sử dụng chữ ký RSA, trung tâm phân phối khoá (TT) sinh ra 2 số nguyên tố p, q, tính số modul n = p.q;
sinh ra các cặp khoá mã hoá/ giải mã ei, di . TT cấp cho ngƣời đăng ký thứ i khoá bí mật di tƣơng ứng, cùng các thông tin bao gồm số n và danh sách đầy đủ khoá công khai ei (i = 1…k).
Bất kỳ ngƣời nào có thông tin công khai trên đều có thể:
Mã hoá văn bản M để gửi cho ngƣời đăng ký thứ i, bằng cách sử dụng thuật toán mã hoá RSA với khoá mã hoá ei: Y = Mei mod n.
Ngƣời đăng ký thứ i có thể ký văn bản M bằng cách tính chữ ký Si=Mdi mod n. Bất cứ ai cũng có thể xác thực rằng M đƣợc ký bởi ngƣời đăng ký thứ i bằng cách tính Siei mod n và so sánh với M.
Điểm yếu 1:
Nếu một văn bản đƣợc gửi tới hơn một ngƣời trong nhóm trên, thì đối phƣơng có thể giải mã đƣợc văn bản mà không cần biết khoá giải mã.
Để chứng minh điều này, hãy xem kết quả của việc mã hoá văn bản M gửi cho hai ngƣời có khoá công khai tƣơng ứng ei và ej:
Yi = Mei mod n
Yj = Mej mod n
Vì ei và ej là hai số nguyên tố cùng nhau, nên có thể tìm đƣợc các số nguyên r và s bằng thuật toán Euclid, thoả: rei + sej = 1.
Rõ ràng, hoặc r hoặc s phải là số âm và trong trƣờng hợp này ta giả sử r < 0 và viết r = -1.│r│.
Nếu Yi hay Yj không nguyên tố cùng nhau với n, ta hãy sử dụng thuật toán Euclid để tìm nghịch đảo của Yi mod n.
Phép tính sau chỉ ra cách văn bản bị khám phá:
[Yi-1]│r│ . [Yj]s = [Mei ]-1│r│ . [Mej ]s = Mreise = M mod n.
Bởi vậy giao thức này thất bại trong việc bảo đảm bí mật văn bản M gửi tới các thành viên có khoá công khai là những số nguyên tố cùng nhau.
Chú ý rằng điều vừa trình bày ở trên không thể phá vỡ đƣợc hệ mật vì khả năng đọc đƣợc một văn bản M không thể dẫn tới khả năng đọc các văn bản tuỳ ý đƣợc mã hoá với cùng hệ thống đó.
Điểm yếu 2:
Việc sử dụng số modul chung cũng làm cho giao thức RSA dễ bị tấn công theo những cách khác nữa, trong đó một ngƣời đăng ký có thể bẻ đƣợc hệ mật.
Hệ mật bị sập, tất nhiên kênh bí mật bị lộ vì ngƣời đăng ký này có thể giải mã các văn bản của ngƣời dùng khác, kênh chữ ký cũng hỏng vì anh ta có thể giả mạo chữ ký của ngƣời dùng mà không bị phát hiện.
Đó là sử dụng phƣơng pháp xác suất để phân tích ra thừa số modul, hoặc sử dụng thuật toán tất định để tính toán số mũ giải mã mà không cần số modul.
Ý tƣởng cơ bản của kiểu tấn công thứ hai là phân tích số modul n bằng cách tìm căn bậc hai không tầm thƣờng của 1 mod n. Nghĩa là tìm một số b thoả mãn:
b2 = 1 mod n, b mod n, 1 < b < n-1
Nếu tìm đƣợc số b nhƣ thế, thì số modul n có thể đƣợc phân tích theo cách sau. Vì b2 = 1 mod n nên b2 – 1 = 0 mod n.
(b+1)(b-1) = 0 mod n. Hay (b+1)(b-1) = sn = spq, s là số nguyên tuỳ ý. Nghĩa là (b+1)(b-1) chia hết cho cả p và q.
Tuy nhiên, 1 < b < n-1, vì vậy 0 < b-1 < b+1 < n =p.q. Ta thấy: Nếu b-1 chia hết cho p, thì không chia hết cho q. Tƣơng tự với b+1.
Vì thế, ƣớc số chung lớn nhất của b+1 và n phải là p hoặc q. Áp dụng thuật toán Euclid, sẽ phân tích ra thừa số của n.
Vì vậy, cách tấn công vào hệ thống này tập trung vào cách để tìm căn bậc hai không tầm thƣờng của 1 mod n.
Đặt e1 và d1 là khoá mã hoá và giải mã của ngƣời dùng hệ thống.
Theo định nghĩa, e1.d1 = 1 mod (n). Vì vậy, e1d1 -1 phải là số nguyên nào đó, là bội số của (n), và có thể tìm đƣợc các số nguyên không âm và k mà
Thủ tục tìm căn bậc hai không tầm thƣờng của 1 mod n:
1. Chọn số nguyên a sao cho (a, n) = 1 và 1 < a < n-1.
2. Tìm số nguyên dƣơng j nhỏ nhất thoả mãn a2j = 1 mod n (vì 2k là bội số của (n), nên chắc chắn tồn tại số này). 3. Đặt b = a2j1
mod n.
4. Nếu b -1 mod n, thì nó là căn bậc hai không tầm thƣờng của 1. 5. Nếu b = -1 mod n, quay trở lại bƣớc 1.
De Laurentis đã chứng minh rằng với a ngẫu nhiên, 1 < a < n-1:
prob ((a 1 mod n) (j k) (a2j - 1 mod n)) 1/2 hay prob (j (1jk)(a2j1
1 mod n a2j = 1 mod n)) 1/2
Do đó, nếu ta xây dựng thuật toán xác suất, thử lần lƣợt với m giá trị ngẫu nhiên a theo tính chất:
(j (1jk)(a2j1k 1 mod n a2j = 1 mod n)).
Thuật toán dừng nếu tính chất đó đƣợc nghiệm đúng ở một lúc nào đó và cho kết quả b = a2j1
mod n. Ngƣợc lại, thuật toán cũng dừng, nhƣng không cho kết quả.
Nhƣ vậy, thuật toán khi dùng m giá trị ngẫu nhiên a (1 < a < n-1) sẽ cho kết quả với xác suất thành công 1-1/2m. Và khi đó, ta tìm đƣợc phân tích p, q của n.
Vì vậy, một ngƣời trong cuộc có thể bẻ mật mã trong giao thức này với xác suất rất cao, bằng cách sử dụng thông tin mà mình có. Cách tấn công vừa đề cập tới là rất quan trọng, vì nó chỉ ra rằng những thông tin về cặp khoá mã hoá/giải mã có thể cho phép tìm ra các thừa số của modul n.
Điểm yếu 3:
Kiểu tấn công thứ ba là một thành viên có thể sử dụng khoá công khai và bí mật của mình để sinh ra khoá bí mật của ngƣời dùng khác.
Tức là căn cứ vào khoá công khai e1, ngƣời giữ cặp khoá mã hoá/giải mã (e2, d2) có thể tìm đƣợc số nguyên d1‟ sao cho e1. d1‟ = 1 mod (n) mà không cần biết
(n).
Để tìm đƣợc số d1‟ này, cần phải tìm một số nguyên t, nguyên tố cùng nhau với e1 và là bội của (n). Điều này thực hiện đƣợc bởi (e, (n)) = 1.
Khi đó, do t và e1 nguyên tố cùng nhau nên tồn tại r và s sao cho rt + se1 = 1. Vì t là bội của (n) nên s.e1 1 mod (n), và khi đó d1‟ = s.
Thủ tục tìm số d1‟ nhƣ sau: (trong đó chỉ cần đến các giá trị e1, e2, d2). 1. Đặt t = e2d2 – 1;
2. Sử dụng thuật toán Euclid mở rộng để tìm ƣớc số chung lớn nhất f của e1 và t. Đồng thời cũng tìm đƣợc hai số r và s thoả r.t + s.e1 = f.
3. Nếu f = 1 thì đặt d1‟ = s và kết thúc; 4. Nếu f 1 thì đặt t := t/f, quay lại bƣớc 2.
Hiển nhiên t nguyên tố cùng nhau với e1. Theo các định nghĩa trên, ta biết rằng e1 nguyên tố cùng nhau với (n). Thủ tục trên đƣa ra khoá giải mã e1.
Vì độ phức tạp tính toán của thủ tục này là O[(log n)2], nên đó là một khả năng đe doạ hệ thống. Một lần nữa, những thông tin có sẵn cho ngƣời dùng hợp pháp trong hệ thống thừa sức bẻ đƣợc hệ thống mật mã. Tất nhiên, ngƣời dùng này không thực hiện nguyên xi theo yêu cầu của nhà thiết kế giao thức dành cho ngƣời dùng, nhƣng những thông tin cần thiết vẫn có thể lấy đƣợc mà ngƣời dùng không vi phạm quy định của giao thức.
Có thể kết luận rằng giao thức số modul chung sẽ gặp thất bại trong việc đảm bảo bí mật các văn bản, hoặc chữ ký của ngƣời dùng hệ thống. Vì vậy, dùng thuật toán RSA, việc sử dụng modul chung cần tránh.
Ngƣời thiết kế giao thức phải lƣu ý xem đối thủ có thể làm đƣợc gì với những bản mã mà những bản rõ của chúng có liên quan.
Có thể đƣa ra hai nguyên tắc khi áp dụng hệ mật RSA : đó là phải đảm bảo:
1. Thông tin của cặp khoá mã hoá/giải mã với số modul n đã cho có khả năng đối phó với thuật toán xác suất phân tích số modul.
2. Thông tin của cặp khoá mã hoá/ giải mã với số modul n đã cho có khả năng đối phó với thuật toán tất định, để tính toán các cặp khoá mã hoá/ giải mã khác, mà không cần biết trƣớc (n).
4). Dùng khoá công khai nhỏ.
Ta chỉ ra rằng nếu tất cả các khoá công khai bằng e, thì Oscar có thể khôi phục đƣợc m nếu ke, với e nhỏ.
Để giảm thời gian mã hoá, ngƣời ta sử dụng số mũ công khai e nhỏ, giá trị e nhỏ nhất có thể là 3.
Giả sử A muốn gửi văn bản mã m tới một số ngƣời nhận U1, U2,…, Uk. Mỗi ngƣời có khoá RSA riêng (n, ei). Ta giả thiết m nhỏ hơn tất cả mọi ni.
Bình thƣờng để gửi m, A mã hoá nó bằng cách sử dụng mỗi khoá công khai và gửi bản mã thứ i tới Ui. Oscar có thể chặn bắt và thu đƣợc k bản mã đã đƣợc truyền trên kênh là c1, c2, …, ck.
Để cho đơn giản, giả sử mọi số mũ công khai đều bằng 3, khi đó Oscar có thể khôi phục đƣợc m nếu k3. Thật vậy, Oscar nhận đƣợc các bản mã c1, c2, c3, với:
c1 = m3 mod n1
Ta giả thiết rằng ƢCLN(ni, nj) = 1 với mọi i j, vì trong trƣờng hợp ngƣợc lại thì Oscar có thể phân tích đƣợc số ni nào đó.
Khi đó, ta dùng định lý phần dƣ Trung Quốc tìm đƣợc nghiệm của hệ (2.1) là c‟, với c‟ =m3 mod n1 n2 n3, vì m nhỏ hơn các ni nên m3 < n1 n2 n3, nên có c‟ = m3.
Nhƣ vậy, Oscar có thể tìm đƣợc m bằng cách tính căn bậc 3 của c‟.
Một cách tổng quát, nếu tất cả các khoá công khai bằng e, thì Oscar có thể khôi phục đƣợc m nếu ke. Cách tấn công này chỉ có thể sử dụng khi e nhỏ.
5). Dùng khoá bí mật nhỏ.
Để giảm thời gian giải mã, mọi ngƣời có thể sử dụng giá trị d nhỏ thay cho d ngẫu nhiên. Bởi vì phép tính modulo tốn thời gian tuyến tính theo log2d, với d nhỏ có thể tăng tốc độ giải mã. Không may, cách tấn công của M. Wiener đã chỉ ra rằng, với d nhỏ sẽ dẫn đến việc phá hoàn toàn hệ mật.
Định lý M. Wiener:
Giả sử n = p.q với q<p<2q và d < n1/4/3.
Cho (n, e) với ed = 1 mod (n), thì Oscar có thể tính đƣợc d một cách hiệu quả.
Dan Boneh chỉ ra rằng với d< n0,292, thì có thể tính đƣợc d có hiệu quả từ (n, e). Kết quả này chứng tỏ cận của Wiener là chƣa chặt.
6). Dùng các tham số p-1 và q-1 có các ước nguyên tố nhỏ.
Khi xây dựng sơ đồ chữ ký RSA, nếu ta bất cẩn trong việc chọn các tham số p và q để p-1 hoặc q-1 có các ƣớc nguyên tố nhỏ, thì sơ đồ chữ ký trở nên mất an toàn. Khi p-1 hoặc q-1 có các ƣớc nguyên tố nhỏ thì ta có thể dùng thuật toán của Pollar đƣa ra vào năm 1974 phân tích đƣợc n một cách hiệu quả.
Thuật toán Pollar.
Input: n và cận b. Output: Trả lời
- Thành công và đƣa ra thừa số của n. - Không thành công.
Method:
B1: a := 2;
B2: For j:=2 to b do a:=aj mod n B3: d:= ƢCLN(a-1, n);
B4: If 1<d<n then
write(„Thành công, các thừa số của n là:‟, d, n/d); else
p-1 = n i i i p 1 Đặt q = max(p i i , i =1,…, n). Nếu qb, khi đó (p-1)│b ! Ở cuối bƣớc 2 ta có: a = 2b! mod n, nên a = 2b! mod p vì p│n.
Theo định lý Fermat, ta có: 2p-1 mod p. Vì (p-1)│b nên a = 1 mod p. Vì vậy ở bƣớc 4 ta có p │ (a-1) và p│n, do đó p│d = ƢCLN(a-1, n). Số nguyên d sẽ là ƣớc không tầm thƣờng của n trừ khi a =1 ở bƣớc 3.
Ví dụ:
Giả sử n = 15770708441. Nếu áp dụng thuật toán p-1 với b = 180 thì sẽ thấy rằng a = 11620221425 ở bƣớc 3, còn d = 235979 và n/d = 115979.
Trên thực tế, phân tích n thành các thừa số nguyên tố là: 15770708441 = 135979 x 115979
Trong trƣờng hợp này, phép phân tích sẽ thành công do:
p-1 = 135979-1 = 135978 = 2 x3 x131 x 173 Nếu lấy b 173 thì chắc chắn rằng 135978│b!
Trong thuật toán có (b-1) luỹ thừa theo modulo, mỗi luỹ thừa cần nhiều nhất là 2log2b phép nhân modulo, dùng thuật toán bình phƣơng và nhân. Việc tính ƢCLN có thể đƣợc thực hiện trong thời gian O((log2n)3) bằng thuật toán Euclide. Bởi vậy, độ phức tạp của thuật toán là O(blog2b(log2n)2 + (log2n)3).
Nếu b là O((log2n)i), với một số nguyên i xác định nào đó, thì thuật toán thực sự là thuật toán thời gian đa thức. Tuy nhiên, với phép chọn b nhƣ vậy, xác suất thành công sẽ rất nhỏ.
Mặt khác, nếu tăng kích thƣớc của b lên thật lớn, chẳng hạn tới n1/2, thì thuật toán sẽ thành công, nhƣng khi đó nó sẽ không thực hiện nhanh hơn phép chia thử.