CHƯƠNG 3: THỬ NGHIỆM PHƯƠNG PHÁP THÁM MÃ VỚI HỆ RSA
3.2. Thuật toán tấn công giao thức modul n chung
3.2.1. Kiểu tấn công thứ nhất: Tấn công dựa trên các số mũ mã hóa nguyên tố cùng nhau
Như Simmons chỉ ra, nếu một văn bản được gửi tới hơn một người đăng ký có các số mũ mã hóa nguyên tố cùng nhau thì đối phương có thể giải mã được văn bản mà không cần biết khóa giải mã. Để chứng minh điều này, hãy xem kết quả của việc mã hóa văn bản M gửi cho 2 người có khóa công khai tương ứng ei và ej:
n M
Y
n M
Y
j i
e j
e i
mod mod
Vì ei và ej là 2 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 ước chung lớn nhất của nó với n. Ước số chung lớn nhất này chính là một trong hai thừa số nguyên tố của số modul chung n. Khi lộ p, q , hệ mật mã coi như đã bị phá vỡ.
Nếu Yi và Yj 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á:
Y Yj s Me r Me s Mre se M n
r i
i
i . j mod
. 1
1
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ó khóa công khai là những số nguyên tố cùng nhau.
Việc sử dụng số modul chung cũng làm cho giao thức này dễ bị tấn công theo những cách khác nữa mà trong đó một người đăng ký có thể bẻ được hệ mật mã. 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 những người dùng khác và 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.
3.2.2. Kiểu tấn công thứ hai: 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
Ý 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:
1. b2 = 1 mod n 2. b 1 mod n 3. 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 đây.
Vì b2 = 1 mod n
nên b2 - 1 = 0 mod n (b+1)(b-1) = 0 mod n
(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
Bất đẳng thức này cho 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à số mũ mã hóa và giải mã của người dùng hệ thống. Với định nghĩa các số mũ này thì e1.d1 = 1 mod (n). Vì vậy, e1d1 - 1 phải là một số nguyên nào đó là bội số của (n) và chúng ta có thể tìm được các số nguyên không âm và k mà e1d1 - 1 = c.(n) = 2k, với là số lẻ. Thủ tục sau đây để 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 1modn (Vì 2k là bội số của (n), nên chắc chắn tồn tại số này).
3. Đặt
2 1
a j
b mod n.
4. Nếu b -1mod 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.
DeLaurentis[13] đã chứng minh rằng với a ngẫu nhiên, 1 < a < n-1:
prob((a 1 mod n) v ( j k) (a2j - 1 mod n)) 1/2
hay prob (j (1jk) (a2j1 1modna2j 1modn)) 1/2
Do đó, nếu ta xây dựng một 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) (a2j1k1modna2j1modn))
thuật toán sẽ dừng nếu tính chất đó được nghiệm đúng ở một lúc nào đó và cho ta
kết quả
2 1
a j
b mod n, trong trường hợp ngược lại, thuật toán cũng sẽ dừng và không có kết quả.
Như vậy, ta thấy ngay rằng thuật toán khi dùng m giá trị ngẫu nhiên a (1<a<n-1) sẽ cho ta 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ẻ hệ mật mã trong giao thức này với xác xuất rất cao, bằng cách sử dụng thông tin mà mình có. Cách tấn công mà chúng ta 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 số mũ mã hóa/giải mã có thể cho phép tìm ra các thừa số của số modul.
3.2.3. Kiểu tấn công thứ ba: Sử dụng khóa công khai và bí mật của mình để sinh ra khóa bí mật của người dùng khác
Kiểu tấn công thứ ba là một thành viên có thể sử dụng khóa công khai và bí mật của mình để sinh ra khóa bí mật của người dùng khác. Tức là căn cứ vào số mũ mã hóa công khai e1, người giữ cặp số mũ mã hóa/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 hai số 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.
Cụ thể, thủ tục tìm một số d1' như sau: (trong đó chỉ cần đến các giá trị e1, e2
và 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 còn khác 1 thì đặt t = t/f rồi 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, chúng ta biết rằng e1 nguyên tố cùng nhau với (n). Thủ tục trên đưa ra được số mũ giải mã của e1. Vì sự phức tạp tính toán của thủ tục này là O[(log n)2] nê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 pham quy định của giao thức.