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 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 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?001000101001 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á cha biết. Khóa đầy đủ ( ở dạng hexa gồm cả bít kiểm tra chặn lẻ) là:
1A624C89520DEC46