Định nghĩa hàm băm Hàm băm H nhận đầu vào là chuỗi dữ liệu M có chiều dài bất kỳ vào tạo ra chuỗi đầu ra hay còn gọi là message degits, hash value có chiều dài cố định theo công thức sa
Trang 1ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
NGUYỄN THANH HƯNG
HÀM BĂM AN TOÀN VÀ ỨNG DỤNG
LUẬN VĂN THẠC SĨ
Hà Nội-2011
Trang 2ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
NGUYỄN THANH HƯNG
Trang 3THUẬT NGỮ VIẾT TẮT
Trang 5MỤC LỤC
1 Đặt vấn đề bài toán 11
2 Tổng quan về hàm băm 12
2.1 Định nghĩa hàm băm 12
2.2 Xung đột băm 13
2.2.1 Tấn công theo nguyên lý vét cạn 13
2.2.2 Tấn công dựa trên lý thuyết ngày sinh 13
2.3 Một số hàm băm phổ biến 14
2.3.1 Hàm băm MD5 15
2.3.2 Hàm băm SHA-1 21
2.3.3 Hàm băm SHA-256 22
2.3.4 Hàm băm SHA-384, SHA-512 24
3 Tấn công hàm băm 26
3.1 Tấn công hàm băm 26
3.1.1 Tấn công MD5 27
3.1.2 Tấn công SHA-1 36
3.2 Tìm hiểu một số hàm băm mới nhất 36
3.2.1 Hàm băm NESHA-256 36
3.2.2 Hàm băm SHA-3 39
4 Ứng dụng của hàm băm an toàn trong giao dịch điện tử 53
4.1 Chữ ký điện tử 53
4.2 MAC 64
4.3 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỀN 70
4.4 TÀI LIỆU THAM KHẢO 71
Trang 6DANH MỤC HÌNH VẼ
Hình 1: Minh họa về hàm băm 12
Hình 2: Cấu trúc lặp của hàm băm MD 15
Hình 3: Thuật toán mô tả MD5/SHA-1 18
Hình 4: Thuật toán NESHA-256 37
Hình 5: Các bước làm việc của NESHA-256 38
Hình 6: Sự làm việc của hàm nén BLAKE 40
Hình 7: Update cột 1 và cột 2 của ma trận v i 43
Hình 8: Update cột 3 và cột 4 của ma trận v i 43
Hình 9: Update tất cả các cột của ma trận v i 43
Hình 10: Update tất cả các đường chéo của ma trận v i 43
Hình 11: Các bước làm việc của BLAKE-256 44
Hình 12: Kết quả chạy chương trình- phần 1 48
Hình 13: Kết quả chạy chương trình- phần 2 49
Hình 14: Kết quả chạy chương trình- phần 3 50
Hình 15: Kết quả chạy chương trình- phần 4 51
Hình 16: Ký tài liệu với BLAKE-256 52
Hình 17: Việc sử dụng chữ ký trong thực tế 53
Hình 18: Bên gửi ký vào tài liệu cần gửi 54
Hình 19: Bên nhận xác minh tài liệu 54
Hình 20: Cấu trúc X.509 cerfiticate 56
Hình 21: Việc quản lý X.509 cerfiticate trong windows 58
Hình 22: Màn hình thông báo sau khi tạo private key 59
Hình 23: Thông tin Cerfiticate 59
Hình 24: Màn hình giao diện command toolsign 59
Hình 25: Màn hình Digital Signature Wizard 60
Hình 26: Chọn tên file cần ký 60
Hình 27: Lựa chọn Cerfiticate nguồn 61
Hình 28: Lựa chọn public key 61
Hình 29: Lựa chọn private key file 62
Hình 30: Lựa chọn thuật toán dùng cho chữ ký 62
Hình 31: Digital Signature Wizard 63
Hình 32: Digital Signature Wizard-1 63
Hình 33: Verify a file-1 64
Hình 34: MAC 65
Hình 35: MAC dùng để xác thực thông điệp 67
Hình 36: MAC dùng để xác thực và bảo đảm tính bí mật của thông điệp 67
Trang 7Hình 37: Thuật toán tính HMAC 68 Hình 38: Sử dụng HMAC trong IPSec 69
Trang 8DANH MỤC HÌNH VẼ
Bảng 1: Kiểu tấn công các hàm băm 14
Bảng 2: Bảng so sánh các loại hàm băm MD 26
Bảng 3: Modify multiple message m5 30
Bảng 4: Một sự đụng độ MD5 31
Bảng 5: Mô tả các bước ở vòng 1-phần 1 31
Bảng 6: Mô tả các bước ở vòng 1-phần 2 32
Bảng 7: Mô tả các bước ở vòng 1-phần 3 32
Bảng 8: Mô tả các điều kiện ở vòng 1-phần 1 33
Bảng 9: Mô tả các bước ở vòng 1-phần 2 33
Bảng 10: Mô tả các bước ở vòng 1-phần 3 33
Bảng 11: Mô tả các bước ở vòng 2-phần 1 34
Bảng 12: Mô tả các bước ở vòng 2-phần 2 34
Bảng 13: Mô tả các bước ở vòng 2-phần 3 34
Bảng 14: Mô tả điều kiện bước ở vòng 2-phần 1 35
Bảng 15: Mô tả điều kiện bước ở vòng 2-phần 2 35
Bảng 16: Mô tả điều kiện bước ở vòng 2-phần 3 35
Bảng 17: Các hoán vị của hàm băm NESHA-256 37
Bảng 18: 16 hằng số của phép cộng của hàm băm NESHA-256 39
Bảng 19: Các nhánh sử dụng các giá trị hoán vị của hàm băm NESHA-256 39
Bảng 20: Các thuật toán BLAKE 40
Bảng 21: Các hoán vị của hàm băm BLAKE 41
Trang 91 Đặt vấn đề bài toán
Trong thời đại ngày nay các giao dịch thương mại qua mạng internet trở nên rất phổ biến, và do đó cần có biện pháp để đảm bảo an toàn cho các giao dịch thương mại qua mạng và khi các giao dịch thương mại qua mạng được đảm bảo an toàn thì đồng nghĩa với việc số lượng giao dịch ngày càng tăng và do đó hạn chế được các giao dịch thương mại truyền thống và do đó tiết kiệm được chi phí, thúc đẩy sự giao thương rộng rãi hơn Trong việc đảm bảo an toàn cho các giao dịch qua mạng internet thì hàm băm đóng vai trò rất quan trọng, nó không những đảm bảo được sự toàn vẹn của các giao dịch mà còn có thể đảm bảo sự bí mật về dữ liệu của các bên giao dịch, điều này
là rất quan trọng
Trang 102 Tổng quan về hàm băm
2.1 Định nghĩa hàm băm
Hàm băm H nhận đầu vào là chuỗi dữ liệu M có chiều dài bất kỳ vào tạo ra chuỗi đầu
ra (hay còn gọi là message degits, hash value) có chiều dài cố định theo công thức sau
h = H (M)
Ví dụ minh họa về hàm băm
Hình 1: Minh họa về hàm băm
- h được gọi là giá trị đầu ra của hàm băm, có chiều dài cố định( h còn gọi là message digest hoặc hash value)
- M là bức thông điệp có chiều dài bất kỳ hữu hạn (chiều dài của M không vượt quá 64
2 bít, nếu chiều dài của M vượt quá 264 bít thì chỉ có 264 bít đầu được sử
lý, còn tất cả các bít được bỏ qua trong quá trình tính toán của hàm băm)
- H là hàm băm
- Hàm băm được sử dụng trong việc mã hóa password, giao dịch điện tử, kiểm tra sự toàn vẹn của một file Hàm băm được sử dụng phổ biến là hàm băm một chiều (one-way) MD5
Trang 112.2 Xung đột băm
Có nghĩa là hai thông điệp khác nhau khi băm thì chúng tạo ra cùng giá trị băm Gọi
M, M’ là hai thông điệp sao cho MM’, H là hàm băm, xung đột băm xảy ra khi H(M)=H(M’)
Về mặt lý thuyết thì hoàn toàn ta có thể tìm được hai thông điệp khác nhau nhưng chúng cho ra cùng một giá trị băm, nhưng thực tế việc này làm rất khó khăn, và ngay
cả khi chúng ta tạo được hai thông điệp với nội dung khác nhau nhưng chúng cùng tạo
ra giá trị băm, nhưng nội dung đó không có ý nghĩa với con người có nghĩa là nếu cho trước một thông điệp ta hoàn toàn có thể tìm được thông điệp thứ hai khác tạo ra cùng giá trị băm nhưng chúng ta không thể điều khiển được nội dung thông điệp thứ này sao cho nó có ý nghĩa với con người, do vậy có thể kết luận các hàm băm hiện tại vẫn đủ
an toàn
2.2.1 Tấn công theo nguyên lý vét cạn
Trong khoa học máy tính tấn công vét cạn là một cách rất tổng quát, nội dung chính của kiểu tấn công này trong việc tấn công hàm băm là kiểm tra tất cả đầu vào sau đó băm giá trị này bằng một hàm băm, sau đó kiểm tra giá trị này với giá trị băm cho trước, nếu chúng bằng nhau có nghĩa là attacker đã tấn công thành công, còn nếu không thì attacker tìm một bức thông điệp khác và băm chúng bằng hàm băm cho đến khi nào chúng tạo ra giá trị băm mong muốn Ta thấy kiểu tấn công này không phụ thuộc vào cấu trúc của hàm băm mà nó chỉ phụ thuộc vào chiều dài đầu ra của hàm băm, do đó để nâng cao tính bảo mật chúng ta cần cho đầu ra càng càng dài thì tính bảo mật càng cao Tuy nhiên cách tấn công này không hiệu quả vì không gian đầu vào quá lớn, trong trường hợp xấu nhất thuật toán duyệt qua tất cả các đầu vào có thể để tìm được nghiệm, điều này là không thể
Yêu cầu tài nguyên cho việc tấn công này bùng nổ tổ hợp với chiều dài đầu ra của hàm băm, như vậy có nghĩa là nếu ta tăng chiều dài đầu ra càng lớn thì khả năng để tấn công thành công càng thấp, gọi chiều dài đầu ra là n chúng ta cần thử 2n lần để tìm được một tấn công thành công
2.2.2 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- k 1 n ) =
1
1
) 1 (
k
i
n i
Trang 12i
n i
1
2 ) 1 (
Do đó xác xuất để xảy ra đụng độ là =1-e
n
k k
2
) 1 (
1, suy ra k
1
1log
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
1282
*2ln
ln2* 64
2 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ử 38
10 giá trị M để hash value = H(M) Để làm được điều này với máy tính có tốc độ
Thống kê 1 số kiểu tấn công hàm băm
Bảng 1: Kiểu tấn công các hàm băm Ngày nay người ta đã tìm được cách tấn công các hàm băm hiệu quả hơn nhiều, chủ
yếu bằng phương pháp different attack (sẽ trình bày ở phần tấn công hàm băm),
người ta có thể tấn công hàm băm MD5 trong khoảng 1 phút bằng máy tính để bàn
2.3 Một số hàm băm phổ biến
Các hàm băm chúng ta xem xét dưới đây có hai thành phần chính Thành phần đầu tiên là hàm nén nhận đầu vào là một chuỗi có chiểu dài bất kì và giá trị chaining variable (giá trị khởi tạo) và cho đầu ra là chuỗi có chiều dài cố định Thành phần thứ
2 là hàm chuẩn chuỗi đầu vào, hàm này có nhiệm vụ biến chuỗi đầu vào có chiều dài
Trang 13bất kì thành chuỗi các bít, mà chuỗi này là có chiều dài là bội số của các khối message block(có chiều dài là 512 hoặc 1024 bit) Ở thời điểm bắt đầu các chaining variable có giá trị khởi tạo (giá trị khởi tạo này là tùy thuộc vào hàm băm), và giá trị cuối cùng của các chaining variable chính là giá trị của hàm băm
Thuật toán chung cho các hàm băm này như sau
Thuật toán trên hàm băm C được lặp nhiều lần, đầu vào của lần lặp sau là khối block message có chiều dài là 512 hoặc 1024 bít (chiều dài các block message là 512 hay
1024 bít là tùy thuộc vào thuật toán) và giá trị của chainging variable của vòng trước,
ta có thể mô hình như sau:
Hình 2: Cấu trúc lặp của hàm băm MD
Trang 14chiều dài thông điệp điều đó có nghĩa là chiều dài của bức thông điệp không vượt quá
264
bít) Việc đệm được thực hiện như sau, đầu tiên thêm bit 1, tiếp theo là dãy các bit
0 được thêm vào sao cho thỏa mãn điều kiện l+k+64=n*512
Giải thuật MD5 thực hiện như sau:
i Thực hiện việc đệm vào thông điệp (việc đệm này luôn được thực hiện, ngay cả khi chiều dài bức thông điệp đã là bội số của 512bit)
ii Đầu vào là các khối 512 bit, các khối 512 bit này được chia thành 16 khối 32 bit
iii Khởi tạo 4 biến A, B, C, D(người ta thường gọi các biến A, B, C, D là các chaining variable)có giá trị như sau:
v Thực hiện các bước tính toán như sau:
Trước tiên chúng ta xây dựng mảng hằng số sau:
ti = int ( 32
2 * abs (sin (i))) 1 i 64
Vòng 1: Ký hiệu [abcd k s t] là bước thực hiện của phép toán a = b + ((a + F(b, c, d) +
X[k] + T[t]) <<< s) chi tiết như sau:
[ABCD 0 7 1] [DABC 1 12 2] [CDAB 2 17 3] [BCDA 3 22 4]
[ABCD 4 7 5] [DABC 5 12 6] [CDAB 6 17 7] [BCDA 7 2 8]
[ABCD 8 7 9] [DABC 9 12 10] [CDAB 10 17 11][BCDA 11 22 12]
[ABCD 12 7 13] [DABC 13 12 14][CDAB 14 17 15][BCDA 15 22 16]
Nhận xét về vòng 1: Vòng 1 dùng hàm F, Với giá trị t từ 116 và k từ 115
Vòng 2: Tương tự, ký hiệu [abcd k s t] là của biểu thức: a = b + ((a + G (b, c, d) +
X[k] + T[t]) <<< s) Quá trình thực hiện 16 bước:
[ABCD 1 5 17] [DABC 6 9 18] [CDAB 11 14 19] [BCDA 0 20 20]
[ABCD 5 5 21] [DABC 10 9 22] [CDAB 15 14 23] [BCDA 4 20 24]
[ABCD 9 5 25] [DABC 14 9 26] [CDAB 3 14 27] [BCDA 8 20 28]
[ABCD 13 5 29][DABC 2 9 30] [CDAB 7 14 31] [BCDA 12 20 32]
Trang 15Nhận xét vòng 2: dùng hàm G, với t từ 1732 và k = (1 + 5k) mod 16
Vòng 3: Tương tự, ký hiệu [abcd k s t] là của biểu thức: a = b + ((a + H (b, c, d) +
X[k] + T[t]) <<< s)
Quá trình thực hiện 16 bước:
[ABCD 5 4 33] [DABC 8 11 34] [CDAB 1 16 35] [BCDA 14 23 36]
[ABCD 1 4 37] [DABC 4 11 38] [CDAB 7 16 39] [BCDA 10 23 40]
[ABCD 13 4 41] [DABC 0 11 42] [CDAB 3 16 43] [BCDA 6 23 44]
[ABCD 9 4 45] [DABC 12 11 46] [CDAB 5 16 47] [BCDA 2 23 48]
Nhận xét vòng 3: dùng hàm H, với t từ 3348 và k = (5 + 3k) mod 16
Vòng 4: Tương tự, ký hiệu [abcd k s t] là của biểu thức:
a = b + ((a + I (b, c, d) + X[k] + T[t]) <<< s)
Quá trình thực hiện 16 bước:
[ABCD 0 6 49] [DABC 7 10 50] [CDAB 14 15 51] [BCDA 5 21 52]
[ABCD 12 6 53] [DABC 3 10 54] [CDAB 10 15 55] [BCDA 1 21 56]
[ABCD 8 6 57] [DABC 15 10 58] [CDAB 6 15 59] [BCDA 13 21 60]
[ABCDb 4 6 61] [DABC 11 10 62] [CDAB 2 15 63] [BCDA 9 21 64]
*|sin(t+1)|(1t64), x[k] là các khối dữ liệu 32 bít
Ta có thể tóm tắt quá trình làm việc của MD5 như hình sau [6]:
Trang 16Hình 3: Thuật toán mô tả MD5/SHA-1 Một số ví dụ về việc thực hiện hàm MD5
MD5 (“”) = d41d8cd98f00b204e9800998ecf8427e
MD5(“ ”) = 7215ee9c7d9dc229d2921a40e899ec5f
MD5 (“Md5”) = 8d6c0760e7dae464f181d5fb9f6d3cb0
Để minh họa quá trình làm việc của thuật toán, chúng ta xem xét ví dụ
M=”” (chuỗi rỗng, có chiều dài l=0)
Trước tiên chúng ta thực hiện việc đệm vào bức thông điệp để thỏa mãn điều kiện l+k+64=n*512, do l=0 do đó chúng ta có k+64=n*512, chúng ta chọn n là số nguyên nhỏ nhất thảo mãn điều kiện trên tức k+64=512, điều này có nghĩa là chúng ta cần đệm
448 bit vào bức thông điệp Việc đệm được thực hiện như sau, trước tiên chúng ta thêm một bit 1 vào message, sau đó chúng ta thực hiện thêm 448-1=447 bit 0 vào bức thông điệp, như vậy việc đệm đã được thực hiện xong Tiếp theo chúng ta thêm 64 bit diễn tả chiều dài bức thông điệp vào thông điệp trên Do đó bức thông điệp được sử lý
Trang 17X [14] = 0x00000000(message block mô tả chiều dài của thông điệp),
X [15] = 0x00000000(message block mô tả chiều dài của thông điệp)
Sau đó chúng ta thực hiện thao tác đầu tiên cho vòng 1 như sau:
A = 0xefcdab89 + ((0x67452301 + 0x98badcfe + 0x00000080 + 0xd76aa478) <<< 7)
= 0xefcdab89 + (0xd76aa4f7 <<< 7) = 0xefcdab89 + 0xb5527beb = 0xa5202774 Sau bước đầu tiên thì các giá trị của chaining variable như sau
A B C D = a5202774 efcdab89 98badcfe 10325476
Tương tự cho các bước của vòng 1, 2, 3, 4 chúng ta có kết quả sau:
a5202774 efcdab89 98badcfe 10325476
a5202774 efcdab89 98badcfe f59592dd
a5202774 efcdab89 e7f06b23 f59592dd
3893b991 9bc13ce9 e1ef0576 fce4a312
3893b991 70768a29 e1ef0576 fce4a312
f56c7cf1 70768a29 e1ef0576 fce4a312
f56c7cf1 70768a29 e1ef0576 374943a7
Trang 18f56c7cf1 70768a29 5aa53f75 374943a7 f56c7cf1 d6819c6a 5aa53f75 374943a7 1c7d7513 d6819c6a 5aa53f75 374943a7 1c7d7513 d6819c6a 5aa53f75 7bd57a3a 1c7d7513 d6819c6a c095f13a 7bd57a3a 1c7d7513 bd782e17 c095f13a 7bd57a3a 3d1e3e6c bd782e17 c095f13a 7bd57a3a 3d1e3e6c bd782e17 c095f13a 68b7b3e3 3d1e3e6c bd782e17 eb41643e 68b7b3e3 3d1e3e6c e422531a eb41643e 68b7b3e3 306ec122 e422531a eb41643e 68b7b3e3 306ec122 e422531a eb41643e d28c77c2 306ec122 e422531a a3c663da d28c77c2 306ec122 a0572807 a3c663da d28c77c2
13707036 a0572807 a3c663da d28c77c2
13707036 a0572807 a3c663da ae7813db
13707036 a0572807 1c31c384 ae7813db
13707036 a2205f1f 1c31c384 ae7813db df63eaa1 a2205f1f 1c31c384 ae7813db df63eaa1 a2205f1f 1c31c384 c3689f5b df63eaa1 a2205f1f 12f3e755 c3689f5b df63eaa1 004b6669 12f3e755 c3689f5b 5f7a9b2e 004b6669 12f3e755 c3689f5b 5f7a9b2e 004b6669 12f3e755 abc34e16 5f7a9b2e 004b6669 91ca4cb7 abc34e16 5f7a9b2e c5dc8c15 91ca4cb7 abc34e16 4497169d c5dc8c15 91ca4cb7 abc34e16 4497169d c5dc8c15 91ca4cb7 76fd93d4 4497169d c5dc8c15 fd95f243 76fd93d4 4497169d 0fe32453 fd95f243 76fd93d4 3f55edfd 0fe32453 d95f243 76fd93d4 3f55edfd 0fe32453 fd95f243 22a31f54 3f55edfd 0fe32453 68d84ea2 22a31f54 3f55edfd ca7d2dbd 68d84ea2 22a31f54
Trang 1993aa2577 ca7d2dbd 68d84ea2 22a31f54
93aa2577 ca7d2dbd 68d84ea2 1688dc85
93aa2577 ca7d2dbd cd85b8cb 1688dc85
93aa2577 561e0689 cd85b8cb 1688dc85
5625a114 561e0689 cd85b8cb 1688dc85
5625a114 561e0689 cd85b8cb 3450f42b
5625a114 561e0689 392ad0d0 3450f42b
5625a114 1e77fa61 392ad0d0 3450f42b
474a9c8c 1e77fa61 392ad0d0 3450f42b
474a9c8c 1e77fa61 392ad0d0 dfce00bc
474a9c8c 1e77fa61 36594b14 dfce00bc
474a9c8c 30130182 36594b14 dfce00bc
7246fad3 30130182 36594b14 dfce00bc
7246fad3 30130182 36594b14 6e10a476
7246fad3 30130182 ff4ea3eb 6e10a476
7246fad3 14e45506 ff4ea3eb 6e10a476
- Chia bức thông điệp thành các khối 512 bit
- Thực hiện việc khởi tạo cho các biến chaining variable như sau:
Trang 20Thuật toán này nhận chiều vào là bức thông điệp có chiều dài bất kì hữu hạn cho đầu
ra là chuỗi có chiều dài cố định là 256 bít
- Việc đệm được thực hiện tương tự việc đệm trong thuật toán cho hàm băm MD5
- Chia bức thông điệp thành các khối 512 bit
Trang 21- Thực hiện việc khởi tạo cho các biến chaining variable như sau:
- Thực hiện việc biến đổi như sau
For (i=0; i<=63; i++)
{
T1= h+ {256}
1)
(e + Ch (e, f, g) +K{ 256 }
t +Wt
T2= {256}
0)
Trang 222.3.4 Hàm băm SHA-384, SHA-512
Các thuật toán này nhận chiều vào là bức thông điệp có chiều dài bất kỳ hữu hạn cho đầu ra (message digest) là chuỗi có chiều dài cố định (SHA-384, SHA-512 là 1024 bit)
- Việc đệm được thực hiện tương tự việc đệm trong thuật toán cho hàm băm MD5
- Chia bức thông điệp thành các khối 1024 bit
- Thực hiện việc khởi tạo cho các biến chaining variable như sau
Với hàm băm SHA-384 các giá trị chaining variable được khởi tạo như sau:
Trang 23i
b = H( 1 ) 1
i
c = H( 1 ) 2
i
d = H( 1 ) 3
i
e = H( 1 ) 4
i
f = H( 1 ) 5
i
g = H( 1 ) 6
i
h = H( 1 ) 7
(e + Ch (e, f, g) +K{t512}+Wt
T2= {512}
0)
Trang 25- Phá vỡ tính đụng độ yếu có nghĩa là người ta sẽ cố gắng tìm được hai message
M và M’ sao cho M’M nhưng H(M)=H(M’)
- Cho trước giá trị băm h người ta sẽ tìm được message M sao cho H(M)=h
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
- x,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
- x i[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
Trang 26Chú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
Tại bước thứ 8 b2và b’2 được tính theo công thức sau
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
Trang 27- Đ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
Điều kiện cho những bít bằng không trongb2
- Đ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
- Điều kiện d2i= a2i đả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 c2i= 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
2 , và d2 là không thay đổi trong b2
- Điều kiện d2i=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
Trang 28Ví 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ứ 26, 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 m5Sau đó 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
Trang 29c) 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]
0634AD55 02B3F409 8388E483 5A417125 E8255108 9FC9CDF7 F2BD1DD9 5B3C3780
797F2775 EB5CD530 BAADE822 5C15CC79 DDCB74ED 6DD3C55F D80A9BB1 E3A7CC35
0634AD55 02B3F409 8388E483 5A41F125 E8255108 9FC9CDF7 72BD1DD9 5B3C3780
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 5: Mô tả các bước ở vòng 1-phần 1
Trang 30Bảng 6: Mô tả các bước ở vòng 1-phần 2
Bảng 7: Mô tả các bước ở vòng 1-phần 3
Trang 31Bảng 8: Mô tả các điều kiện ở vòng 1-phần 1
Bảng 9: Mô tả các bước ở vòng 1-phần 2
Bảng 10: Mô tả các bước ở vòng 1-phần 3
Trang 32Bả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 13: Mô tả các bước ở vòng 2-phần 3
Trang 33Bả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
Bảng 16: Mô tả điều kiện bước ở vòng 2-phần 3
Trang 343B2AB4E1 AAD112EF 669C9BAE 5DEA4D14 1DBE220E AB46A5E0 96E2D937 F3E58B63 BE594F1C BD63F044 50C42AA5 8B793546 A9B24128 816FD53A D1B663DC B615DD01
3B2AB4E2 EAD112BD 269C9BEE BDEA4D46 BDBE220E 2B46A5A0 B6E2D936 D3E58B03 3E594F1D FD63F006 90C42AE6 CB793564 A9B2412B C16FD578 11B6639F 7615DD23 Kết quả băm của hai message trên là:
- Thực hiện việc đệm bức thông điệp như việc đệm trong thuật toán hàm băm MD5
- Chia thông điệp thành các khối có chiều dài 512 bit