Tấn công thuật toán

Một phần của tài liệu Nghiên cứu độ an toàn của hàm băm MD55 (Trang 39 - 46)

3.2. Các phương pháp tấn công hàm băm phổ biến

3.2.3. Tấn công thuật toán

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= (m0, 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.

H0

∆ (M0,M'0)→ ∆H1 (M1,M'1)→ ∆H= 0 Với điều kiện.

M0

∇ = M’0- M0 = (0, 0, 0, 0, 231, 0, 0, 0, 0, 0, 0, 215, 0, 0, 231, 0)

M1

∇ = M’1- M1 = (0, 0, 0, 0, 231, 0, 0, 0, 0, 0, 0, -215, 0, 0, 231, 0)

H1

= (231, 231+225, 231+225, 231+225)

H1

∆ = (∆ 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.

Đ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 độ xả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].

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=∆c2NF+ (∆φ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 [5].

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

- Đ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 b

2.

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ì ∆C2NF,1 =0 do đó ∆b2,1=∆C2NF,1 +∆φ7,11=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.

C2NF

∆ [−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’NF2 , 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ừ∆C2NF[−24,−25,−26, 27]+(φ7[3]<<<22)=2

23-224 =-223.

- Điều kiện d2,i= a2,i đảm bảo những bít thay đổi trong c2NF 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 c2F là không thay đổi trong b2.

- Điều kiện a2,32 đảm bảo sự thay đổi bít thứ 32 trong c2F, 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 cF2 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à c2F là không thay đổi trong b2.

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

- Sự thay đổi trong bít thứ 7 của cF2 , 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 [7].

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 messages

Đâ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 messages.

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 [7].

Bảng 3. 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.

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.

b) Modify M1 theo kỹ thuật modify multiple message.

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 độ).

Một phần của tài liệu Nghiên cứu độ an toàn của hàm băm MD55 (Trang 39 - 46)

Tải bản đầy đủ (DOC)

(64 trang)
w