Tấn công dựa trên lý thuyết ngày sinh

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 35 - 39)

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

3.2.1. Tấn công dựa trên lý thuyết ngày sinh

Nội dung của kiểu tấn công này được minh họa bằng ví dụ sau: trong một phòng họp có k người hãy tìm xác xuất để ít nhất có 2 người có cùng ngày sinh, bằng toán học người ta đã chứng minh được rằng nếu có 23 người trong một phòng thì xác xuất để 2 người có cùng ngày sinh là ≈ 0.5.

Một cách tổng quát, giả sử một hàm băm có n giá trị (tức n là chiều dài của chuỗi đầu ra) băm khác nhau, nếu chúng ta có k giá trị (input) băm từ k thông tin khác nhau được chọn ngẫu nhiên, thì xác suất để không xảy ra đụng độ là:

(1- n1 )(1- n2 )....(1- kn−1 ) = ∏−

= 1 −

1

) 1 (

k i

ni

Với ni <<1 thì ∏−

= 1 −

1

) 1 (

k

i ni ≈ ∏−

= 1 −

1 k i

ni

e =e n k k

2 ) 1 ( −

Do đó xác xuất để xảy ra đụng độ là ε=1-e

n k k

2 ) 1 ( −

− →

k2- k ≈ 2nlog

ε

− 1

1 , suy ra k ≈

−ε 1 log 1 2n

Do đó ta thấy với hàm băm có chiều dài đầu ra là 128 bít thì chúng ta cần k ≈ 2

128

2

* 2

ln ≈ln2*264 ≈1038 đầu vào để tìm được hai thông điệp khác nhau nhưng cho cùng giá trị băm (hash value) với xác xuất là 0.5. Có nghĩa là cho trước giá trị băm, chúng ta cần thử 1038giá trị M để hash value = H(M).

Để làm được điều này với máy tính có tốc độ sử lý 1 phép tính mất 1 microsecond mất 1024 năm.

Bằng sự suy luận chúng ta cũng thấy rằng với chiều dài giá trị băm là 128 bít chúng ta cần thử 1019 đầu vào M, M’ sao cho H(M) = H(M’). Để làm được điều này với máy tính có tốc độ sử lý 1 phép tính mất 1 microsecond mất 317000 năm [17].

Thống kê 1 số kiểu tấn công hàm băm.

Bảng 3.2. Kiểu tấn công các hàm băm

3.2.2. Tấn công mở rộng chiều dài trên MD5 (Length-Extension Attack) Tấn công mở rộng chiều dài là một loại tấn công khá phổ biến đối với cỏc hàm băm được xõy dựng trờn cấu trỳc lặp Merkle-Damgồrd như MD0- MD5 và SHA0-SHA2. Với phương pháp tấn công này, một người có thể dựa trên giá trị băm h(m) và chiều dài len(m) của thông điệp m để tính giá trị băm h(m||pad(m)||m') với bất kỳ thông điệp m' nào.

Trong cỏc hàm băm được xõy dựng trờn cấu trục lặp Merkle-Damgồrd, thông điệp đầu vào được chia ra thành một chuỗi các khối (block) có kích thước bằng nhau và được xử lý theo thứ tự bằng một hàm nén một chiều (one- way compression function). Trong thuật toán MD5, hàm nén nhận vào 2 giá trị - một giá trị móc nối (chaining value) có kích thước 128-bit và một khối (block) thông điệp có kích thước 512-bit - và tạo ra một giá trị móc nối 128- bit khác được sử dụng làm đầu vào cho bước lặp tiếp theo. Thông điệp ban đầu được đệm (padded) để có kích thước là một bội số của 512-bit và được

chia thành một chuỗi các khối có kích thước 512-bit. Hàm nén được tính một cách lặp lại với một giá trị móc nối ban đầu và khối thông điệp đầu tiên. Sau khi khối thông điệp cuối cùng được xử lý, giá trị móc nối cuối cùng là kết quả hàm băm của thông điệp ban đầu.

Hỡnh 3.3. Cấu trỳc lặp Merkle-Damgồrd (sao chộp từ Wikipedia) Do cấu trúc lặp của thuật toán, một người có thể chỉ dựa vào giá trị băm và chiều dài của một thông điệp để tính giá trị băm của một thông điệp dài hơn được bắt đầu bằng thông điệp ban đầu, bao gồm cả giá trị đệm đã được thêm vào để cho thông điệp ban đầu có kích thước là một bội số của 512-bit (hình 3).

Hình 3. 4. Tấn công mở rộng chiều dài

Đối với cơ chế tạo chữ ký như đã được mô tả trong phần 2, chúng ta có thể sử dụng phương pháp tấn công mở rộng chiều dài để tính chữ ký của bất kỳ thông điệp m' nào với m' bắt đầu bằng m||p, với p là giá trị được đệm vào SECRET||p trong cấu trỳc lặp Merkle-Damgồrd.

signature1 = MD5(SECRET||m) signature2 = MD5(SECRET||m||p||x)

Ví dụ, dựa trên thông điệp yêu cầu chuyển hướng được gởi từ website bán hàng về cho khách hàng (như trong bước 2 của hình 1), một người có thể làm giả một thông điệp xác nhận thanh toán thành công được gởi về từ cổng thanh toán (như trong bước 4 của hình 1), và gởi thông điệp này đến website bán hàng để hoàn tất việc mua hàng.

response1 =

“amount=100000&merchant_id=1230&order_id=567&signature=[sig1]”

m1=“1000001230567"

sig1=MD5(SECRET||m1) x=10000056701156 m2=m1||p1||x

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 35 - 39)

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

(64 trang)
w