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