Tấn công MD5

Một phần của tài liệu Hàm băm an toàn và ứng dụng (Trang 25)

3. Tấn công hàm băm

3.1.1.Tấn công MD5

Hàm băm MD5 bị tấn công vào năm 2004 bởi Wang. Cơ sở của việc tấn công này đó là dựa trên phép toán XOR (X =X’X, X có thể là các message block, chaining

variable….) và phép trừ mod 232

(X=X’-X mod 232

).

Trong việc tấn công MD5 chúng ta sẽ xem xét phương pháp tấn công của Wang. Có

nghĩa là tìm hai khối message M = (M0, M1) và M’= (M’0, M’1) có chiều dài 1024 bít

(M0, M1, M’0, M’1 mỗi khối có chiều dài 512 bít) mà sau khi băm hai message này

cho cùng giá trị băm.

Các ký hiệu.

- M0= (m

0, m1, m2,…m15), M’0=(m’0, m’1, m’2,….m’15) diễn tả hai message.

M

 = (m0,m1,m2,… m15) diễn tả sự khác nhau của hai khối message. mi

=m’i- mi sự khác biệt của từ thứ i.

- ai, bi, ci, di diễn tả chaining varibale của vòng thứ 4i-3, 4i-2, 4i-1, 4i, của message M , với i116.

- xi,j diễn ta bít thứ j của xi với chú ý rằng bít có ý nghĩa nhất (the most sigfinication bit) ở vị trí thứ 32 và bít có ít ý nghĩa nhất(the least sigfinication bit) ở vị trí thứ 1.

- xi,j=x’i,j- xi,j=1 sự khác biệt được tạo ra bởi sự thay đổi bít thứ j của xi. Ký hiệu xi[j] diễn tả sự thay đổi bít thứ j từ 0 thành 1, xi[-j] diễn tả thay đổi bít thứ j từ 1 thành 0.

- xi[j0, j1, …, jl]=xi[j0, j1, …, jl] diễn tả sự khác nhau, được tạo ra bởi sự thay đổi các bít j0, j1, …, jl.

Chúng ta lựa chọn sự khác biệt với hai phép lặp như sau.

0 H  (M0,M'0) 1 H  (M1,M'1) H  = 0

Với điều kiện.

0 M  = M’0- M0 = (0, 0, 0, 0, 231 , 0, 0, 0, 0, 0, 0, 215 , 0, 0, 231 , 0) 1 M  = M’1- M1 = (0, 0, 0, 0, 231, 0, 0, 0, 0, 0, 0, -215, 0, 0, 231, 0) 1 H  = (231 , 231 +225 , 231 +225 , 231 +225 ) 1 H

 = (a,b,c,d) là sự khác biệt của bốn biến chaining variable cho vòng lặp đầu tiên.

Chúng ta lựa chọn M0 để không chỉ đảm bảo vòng 3 và vòng 4 có sự khác biệt với khả năng cao mà còn hủy sự khác biệt đầu ra ở các vòng 3, 4. Sự khác biệt có thể tham khảo các bảng 1. Các cột của bảng này có ý nghĩa tương tự nhau, ở đây tôi chỉ mô tả ý nghĩa của bảng 1. Cột đầu tiên diễn tả bước thực hiện, cột thứ hai diễn tả các chaining

variable của M0, cột thứ 3 diễn tả message word của M0, cột thứ 4 diễn tả sự dịch bít

(shift bit), cột thứ 5 diễn tả sự khác biệt chaining variable, cột thứ 6 diễn tả sự khác biệt đầu ra của M0 và M’0, cột thứ 7 diễn tả giá trị bít của M’0. Các ô rỗng là không có sự khác biệt[4].

Điều kiện đủ để xảy ra sự đụng độ.

Trong phần này tôi sẽ mô tả tập các điều kiện để đảm bảo sự đụng độ sảy ra trong bước thứ 8. Tính chất khác biệt của đầu ra trong bước thứ 8.

(c2, d2, a2,b1)b2.

Mỗi một chaining variable thỏa mãn các điều kiện sau. b’1= b1.

a’2= a2 [7, ..., 22,−23]. d’2= d2 [−7, 24, 32]. (adsbygoogle = window.adsbygoogle || []).push({});

c’2= c2 [7, 8, 9, 10, 11,−12,−24,−25,−26, 27, 28, 29, 30, 31, 32, 1, 2, 3, 4, 5,−6]. b’2= b2 [1, 16,−17, 18, 19, 20,−21,−24].

Tại bước thứ 8 b2và b’2 được tính theo công thức sau. b2=c2+ ((b1+F(c2, d2, a2) +m2+t2) <<<22.

b’2=c’2+ ((b’1+ F(c’2, d’2, a’2)+m’2+t2) <<<22. Hàm tuyến tính được sử dụng trong bước này là.

7

 =F(c2, d2, a2) =(c2^d2) V (⌐c2^a2).

Trong các biểu thức trên c2xuất hiện hai lần, ở bên trái và bên phải của biểu thức. Để

phân biệt chúng ta ký hiệu cF2 diễn tả c2 ở trong F và c2NF diễn tả c2ở ngoài F. Chúng ta có b1= 0 và m7=0, chúng ta biết rằng b2= NF

c2

 + (7<<<22). Chúng ta đặt cố định 1 trong 2 biến trong F để F thành hàm 1 biến cố định [4].

Điều kiện cho những bít khác không trongb2.

- Điều kiện d2,11= 1và b2,1 = 0 đảm bảo sự thay đổi với bít đầu tiên của b2. i. Nếu d2,11=a2,11=1 thì chúng ta có 7,11=1.

ii. Sau khi <<<22 thì 7,11 thì sẽ ở vị trí 1((22+11) mod 32=1).

iii. Vì NF

C2,1

- Điều kiện d2,26=a2,26=1, b2,16=0 và b2,17=1 đảm bảo sự thay đổi của những bít 16 và 17 trong b2.

- Điều kiện d2,28=a2,28 =0, b2,i=0, i=18, 19, 20 và b2,21=1 đảm bảo sự thay đổi trong những bít 19, 20, 21 trong b2.

- Điều kiện d2,3=a2,3=0 và b2,24 =1 đảm bảo sự thay đổi trong bít thứ 24 của b2. Điều này có thể dễ dàng chứng minh như sau.

NF

C2

 [−24, −25, −26, 27] + (7[3] <<<22) =223

-224

=-223

Điều kiện cho những bít bằng không trongb2.

- Điều kiện c2,17=0 đảm bảo cho những bít thay đổi từ bít 7 thành bít thứ 12 trong c’NF

2 , bít thứ 17 của a’2 là không thay đổi. Đó là dễ dàng chứng minh được

điều này từ NF C2  [−24,−25,−26, 27]+(7[3]<<<22)=223 -224 =-223 . - Điều kiện d2,i= a2,i đảm bảo những bít thay đổi trong cNF

2 là không thay đổi trong b2, i = {1, 2, 4, 5, 25, 27, 29, 30, 31}.

- Điều kiện c2,i= 1 đảm bảo bít thứ i thay đổi trong a2 là không thay đổi trong b2 , i = {13, 14, 15, 16, 18, 19, 20, 21, 22, 23}.

- Điều kiện d2,6=a2,6=0 đảm bảo bít thứ 6 trong cF

2 là không thay đổi trong b2. - Điều kiện a2,32 đảm bảo sự thay đổi bít thứ 32 trong cF (adsbygoogle = window.adsbygoogle || []).push({});

2 , và d2 là không thay đổi trong b2.

- Điều kiện d2,i=0 đảm bảo bít thứ i trong a2 và bít thứ i trong cF

2 là không thay đổi trong b2, i={8, 9, 10}.

- Điều kiện d2,12=0 đảm bảo bít thứ 12 trong a2và cF

2 là không thay đổi trong b2. - Điều kiện a2,24 =0 đảm bảo bít thứ 24 trong cF

2 và d2 là không thay đổi trong b

2.

- Sự thay đổi trong bít thứ 7 của cF

2 , d2,a2 là không thay đổi trong b2.

Bằng kỹ thuật tương tự chúng ta có thể tìm ra tập các điều kiện để để đảm bảo sự đụng độ xảy ra với khả năng cao[4].

Modify single message

Đây là kỹ thuật modify message để message sau khi được băm thỏa mãn tất cả các điều kiện đủ của 16 bước đầu tiên. Tất nhiên lúc đầu message sau khi được băm không thỏa mãn điều kiện đủ của 16 bước đầu tiên.

Chọn ngẫu nhiên M0 thỏa mãn tất cả các điều kiện trong 16 bước đầu tiên, sau đó ta

tính tất cả các chaining variable, nếu chaining variable nào không thõa mãn các điều kiện ta có thể modify chúng, rồi sau đó tính lại các giá trị của từng khối message block.

Ví dụ để thỏa mãn 3 điều kiện của c1(c1 có nghĩa là giá trị của biến c chaining variable ở bước 1) chúng ta modify như sau.

c1new c1old - c1old,7 .26

- c1old,12.211

- c1old,20 .219

mnew2 ((c1new - c1old )>>>17) + m old2

và modify tất cả các chaining variable khác một các tương tự.

Modify multiple message

Đây là kỹ thuật modify message để message sau khi được băm thỏa mãn tất cả các điều kiện của vòng 2 và tất nhiên các message cũng phải thỏa mãn vòng 1.

Chúng ta nhận xét rằng đó là có thể có một cách để làm thỏa mãn một phần điều kiện

của 32 bước đầu tiên, kỹ thuật này gọi là modify multiple message.

Ví dụ nếu a2,5 = 1 và theo điều kiện thì a2,5 = 0 (các điều kiện này chúng ta xem trong bảng 2) chúng ta có thể modify m1, m2, m3, m4, m5 để sự modify này phát sinh đụng

độ từ bước thứ 26, mà các điều kiện ở 16 vòng đầu tiên vẫn không bị phá vỡ. Chúng

ta có thể modify m5 như sau [4].

Bảng 3: Modify multiple message m5

Sau đó người ta sẽ dùng hai kỹ thuật modify message trên để xây dựng thuật toán tấn công MD5.

Kỹ thuật tấn công MD5. (adsbygoogle = window.adsbygoogle || []).push({});

1. Lặp lại các bước sau đây cho đến khi M0 được tìm thấy.

a) Lựa chọn ngẫu nhiên M0.

b) Modify M0 theo kỹ thuật single message modify.

c) M’0= M0+M0.

d) Kiểm tra lại xem tất cả các điều kiện bằng việc tính lại H0, H’0.

2. Lặp lại tất cả các bước sau cho đến khi đụng độ thì được tìm thấy.

a) Lựa chọn ngẫu nhiên M1.

c) M’1= M1+M1.

d) Kiểm tra nếu cặp message này dẫn đến đụng độ hay không (H=0 có nghĩa

là đã xảy ra đụng độ). Ví dụ về đụng độ MD5[4].

Message1 Khối1 02DD31D1 C4EEE6C5 069A3D69 5CF9AF98

87B5CA2F AB7E4612 3E580440 897FFBB8

0634AD55 02B3F409 8388E483 5A417125

E8255108 9FC9CDF7 F2BD1DD9 5B3C3780

Khối2 D11D0B96 9C7B41DC F497D8E4 D555655A

C79A7335 0CFDEBF0 66F12930 8FB109D1

797F2775 EB5CD530 BAADE822 5C15CC79

DDCB74ED 6DD3C55F D80A9BB1 E3A7CC35

Message2 Khối1 02DD31D1 C4EEE6C5 069A3D69 5CF9AF98

07B5CA2F AB7E4612 3E580440 897FFBB8

0634AD55 02B3F409 8388E483 5A41F125

E8255108 9FC9CDF7 72BD1DD9 5B3C3780

Khối2 D11D0B96 9C7B41DC F497D8E4 D555655A

479A7335 0CFDEBF0 66F12930 8FB109D1

797F2775 EB5CD530 BAADE822 5C154C79

DDCB74ED 6DD3C55F 580A9BB1 E3A7CC35

Kết quả: 8D5E7019 6324C015 715D6B58 61804E08 Bảng 4: Một sự đụng độ MD5

Danh mục các bảng lưu các thông tin cần kiểm tra trong quá trình tấn công MD5 [4]

Bảng 6: Mô tả các bước ở vòng 1-phần 2

Bảng 8: Mô tả các điều kiện ở vòng 1-phần 1 (adsbygoogle = window.adsbygoogle || []).push({});

Bảng 9: Mô tả các bước ở vòng 1-phần 2

Bảng 11: Mô tả các bước ở vòng 2-phần 1

Bảng 12: Mô tả các bước ở vòng 2-phần 2

Bảng 14: Mô tả điều kiện bước ở vòng 2-phần 1

Bảng 15: Mô tả điều kiện bước ở vòng 2-phần 2

Một phần của tài liệu Hàm băm an toàn và ứng dụng (Trang 25)