
A = A + AA;
B = B + BB;
C = C + CC;
D = D + DD;
end; /* of loop on i */
Bước 5: Kết quả đầu ra (output)
Bản tóm lược thông điệp (message digest) là nội dung các thanh ghi A, B, C, D
theo thứ tự từ byte thấp của A đến byte cao của D.
2. Mã nguồn của MD4
Chúng tôi đã download mã nguồn của thuật toán mã hoá MD4 trên Internet.
Chương trình khá nhỏ gọn, gồm 3 file là global.h, md4.h (2 file header khai báo
các PROTOTYPE, hằng) và md4c.c - mã nguồn của MD4. Chúng tôi đã đọc hiểu
mã nguồn của MD4 và thử nghiệm nhỏ như sau: thực hiện băm một xâu có độ dài
nhỏ hơn 448 bit 1000000 lần trên máy Dell 350MHz. Thời gian tính toán này là
I
II
I.
.
T
TH
HU
UẬ
ẬT
T
T
TO
OÁ
ÁN
N
T
TH
HÁ
ÁM
M
M
MD
D4
4
Tác giả của thuật toán thám MD4 là Hans Dobbertin với bài “Cryptanalysis of
MD4” - năm 1997. Thuật toán MD4 được Rivest đề nghị năm 1990 và 2 năm sau
là RIPEMD được thiết kế mạnh hơn MD4. Năm 1995, tác giả đã tìm ra một tấn
công chống lại 2 vòng của RIPEMD. Phương pháp này được bổ sung và có thể sử
dụng cho tấn công đủ 3 vòng của MD4.
Theo tác giả thì thuật toán này có thể tìm ra “va chạm” (collision) cho MD4 chỉ
trong một vài giây trên một máy PC. Đặc biệt tác giả đã đưa ra một ví dụ rất cụ thể
có tính thực hành và thuyết phục cao bằng việc tìm ra va chạm của thông điệp có ý
nghĩa. Kết quả chính của bài báo này là khẳng định “MD4 là không phải hàm hash
không va chạm”.
Thuật toán này là kiểu tấn công tìm collision: tức là biết giá trị khởi đầu IVo, tìm
các thông điệp X và X’ sao cho hash(IVo, X) = hash(IVo, X’).
1. Tóm tắt thuật toán do Dobbertin trình bày.
1.1 Ký hiệu và qui ước sử dụng cho thuật toán
Tất cả các biến và hằng số được sử dụng đều là các số 32 bit. Các số hạng được
biểu diễn theo modulo 232. Các ký hiệu ^, v, ⊕ và ¬ lần lượt là các phép toán
AND, OR, XOR và lấy phần bù theo bit. Với một từ W - 32 bit, W<<32 ký hiệu của
phép dịch vòng trái W đi s vị trí (với 0 ≤ s ≤ 32). Và -W<<s viết tắt cho -(W<<s).
Ký hiệu X=(Xi), i<16 là toàn bộ 16 words (512 bits) và được thiết lập
như sau:
16
~~ )( <
=ii
XX
3