Bây giờ ta xét xem việc ứng dụng các ý t−ởng của phần tr−ớc trong phép tấn công bản rõ chọn lọc lên một hệ DES 3 vòng. Ta bắt đầu ằng một cặp các bản rõ và bản mã t−ơng ứng L0R0, L0*R0*,L3R3, và L3*R3* . Có thể biểu thị R3 nh− sau:
R3 = L2 ⊕ f (R2,K3) = R1 ⊕ f (R2,K3)
= L0 ⊕ f (R0,K1) ⊕ f (R2,K3) Biểu diễn R3* theo cách t−ơng tự nh− vậy
R3' = L0' ⊕ f (R0,K1) ⊕ f(R0*,K1) ⊕ f (R2,K3) ⊕ f (R2*,K3) Bây giờ, giả sử ta đã chọn đ−ợc các bản rõ sao cho R0 = R0* , nghĩa là để
R0' = 00. . .0 Khi đó f (R0,K1) = f (R0*,K1) và nh− vậy:
R3' = L0' ⊕ f(R2,K3) ⊕ f(R2*,K3).
Lúc này R3' đã biết vì có thể tính đ−ợc nó từ hai bản mã. L0' cũng đã biết do có thể tính đ−ợc nó từ hai bản rõ. Điều này có nghiã là ta có thể tính f(R2,K3)⊕f(R2*,K3) từ ph−ơng trình:
f(R2,K3)⊕f(R2*,K3) = R3' ⊕ L0'
Bây giờ ta có f(R2,K3) = P(C) và f(R2*,K3) = P(C*), trong đó C và C* ký hiệu t−ơng ứng 2 dãy ra của 8 hộp S ( hãy nhớ lại rằng P là một phép hoán vị cố định công khai ). Bởi vậy:
P(C) ⊕ P(C*) = R3' ⊕ L0' và do đó:
C' = C ⊕ C* = P-1(R3' ⊕ L0') (3.1) Đây là XOR ra của 8 hộp S ở vòng thứ 3.
Bây giờ R2 = L3 và R2* = L3* cũng đã biết ( chúng là một phần của các bản mã). Bởi vậy, có thể tính
E = E(L3) (3.2) và E* = E(L3*) (3.3) và E* = E(L3*) (3.3)
bằng cách dùng hàm mở rộng E đ−ợc biết công khai. Đây là các mẫu vào các hột S ở vòng thứ 3. Nh− thế ta đã biết E và E* và C ' của vòng thứ 3 và có thể thực hiện ( nh− ở phần tr−ớc) để xây dựng các tệp test1, . .., test8 chứa các giá trị có thể của các bít trong J1,. . .,J8 .
Mô tả dạng giả mã của thuật toán này đ−ợc cho ở hình 3.9.
Hình 3.9. Cách tấn công DC lên DES 3 vòng.
Đầu vào L0R0,L0*R0* , L3R3 và L3*R3*, trong đó R0 = R0* 1. Tính C ' = P-1(R3' ⊕ L0')
2. Tính E = E(L3) và E* = E(L3*) 3. For j = 1 to 8 do
Tính testj(Ej, Ej*, Cj')
Trong ph−ơng pháp tấn công này sẽ phải dùng một số bộ ba E, E*,C ' nh− vậy, Ta phải thiết lập 8 dãy bộ đếm và nhờ vậy xác định đ−ợc 48 bít trong khoá K3 ( khoá của vòng thứ 3). Sau đó tính 56 bít trong khóa theo cách tìm kiếm vét cạn trong 28 = 256 khả năng cho 8 bít khoá còn lại.
Ta sẽ xem xét một ví dụ để minh hoạ. Ví dụ 3.3.
Giả sử ta có 3 cặp các bản rõ và các bản mã, trong đó các bản rõ có các phép XOR xác định, chúng đ−ợc mã hoá bằng cùng một khoá. Để cho gọn ta sẽ biểu thị d−ới dạng mã Hexa:
Bản rõ Bản mã 748502CD38451097 03C70306D8AO9F10 3874756438451097 78560A960E6D4CB 486911026ACDFF31 45FA285BE5ADC730 375BD31F6ACDFF31 134F7915AC253457 357418DA013FEC86 D8A31B2F28BBC5CF 12549847013FEC86 0F317AC2B23CB944
Từ cặp đầu tiên, tính các đầu vào của hộp S ( cho vòng 3 ) theo các ph−ơng trình (3.2) và (3.3). Ta có:
E = 000000000111111000001110100000000110100000001100 E* = 101111110000001010101100000001010100000001010010 E* = 101111110000001010101100000001010100000001010010 XOR ra của các hộp S đ−ợc tính theo ph−ơng trình (3.1) là:
C' = 10010110010111010101101101100111 Từ cặp thứ hai, ta tính đ−ợc các đầu vào của các hộp S là:
E = 101000001011111111110100000101010000001011110110 E* = 000001011110100110100010101111110101011000000100 E* = 000001011110100110100010101111110101011000000100 và XOR ra của các hộp S là:
C' = 11010101011101011101101100101011
Tiếp theo, lập bảng các giá trị trong 8 dãy bộ đếm cho từng cặp. Minh hoạ thủ tục này với dãy bộ đếm cho J1 theo cặp đầu tiên. Trong cặp này ta có: E' = 101111 và C' = 1001. Khi đó tập:
IN1(101111,1001) = {000000,000111,101000,101111} vì E1 = 000000 nê ta có:
J1∈test1(000000,101111,1001) = {000000,000111,101000,101111} Bởi vậy ta sẽ tăng các giá trị 0,7,40 và 47 trong dãy bộ đếm cho J1.
Bây giờ sẽ trình bày các bảng cuối cùng. Nếu coi một xâu bít độ dài 6 nh− biểu diễn nhị phân của một số nguyên nằm giữa 0 và 63 thì 64 giá trị t−ơng ứng là 0,1,. . . ,63. Các mảng bộ đếm sẽ nh− sau: J1 1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 1 0 0 0 1 0 0 1 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
J2 0 0 0 1 0 3 0 0 1 0 0 1 0 0 0 0 0 1 0 0 0 2 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 1 0 1 0 0 0 1 0 0 0 1 1 0 0 0 0 1 0 1 0 2 0 0 0 J3 1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 1 0 0 0 1 0 0 1 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 J4 3 1 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 1 0 0 0 1 0 0 1 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 J5 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 0 0 0 0 2 0 J6 1 0 0 1 1 0 0 3 0 0 0 0 1 0 0 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 0 1 0 0 0 0 0 0 0 0 1 0 0 1 1 0 1 1 0 0 0 0 0 0 0 0 J7 0 0 2 1 0 3 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 2 0 0 0 2 0 0 0 0 1 2 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1
J8
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 1 0 1 0 3 0 0 0 0 1 0 0 0 0 0 0 0 0 1
Trong số 8 mảng bộ đếm ( trong 8 mangt ở trên) có duy nhất một bộ đếm có giá trị 3, các vị trí của các bộ đếm này sẽ đ−ợc xác định các bít khoá trong J1,.. ., J8. Các vị trí này t−ơng ứng là 47,5,19,0,24,7,7,49. Đổi các số nguyên sang dạng nhị phân ta nhận đ−ợc J1, . . .,J8:
J 1 = 101111 J2 = 000101 J3 = 010011 J4 = 000000 J5 = 011000 J6 = 000111 J7 = 000111 J8 = 110001
Bây giờ ta có thể xây dựng 48 bít của khoá bằng cách nhìn vào bảng khoá đối với vòng 3. Khi đó K có dạng:
0001101 0110001 01?01?0 1?00100 0101001 0000??0 111?11? ?100011 0101001 0000??0 111?11? ?100011
ở đây ta đã bỏ qua các bít kiểm tra chặn lẻ và"?" chỉ bít khoá ch−a biết. Khóa đầy đủ ( ở dạng hexa gồm cả bít kiểm tra chặn lẻ) là:
1A624C89520DEC46