Giả sử rằng, có một thơng điệp là (b bit) và chúng ta ao ước là tìm được một giá trị băm (hay nén). Ở đây, b bit là số tùy ý nhưng khơng là số âm, có thể là số 0 và không cần thiết là bội số của 8, là số lớn tùy ý. Chúng ta hình dung rằng các bit
thông điệp được viết lại như sau: m0, m1, … m(b-1) .
Theo sau đây là 5 bước của q trình băm 1 thơng điệp :
Bƣớc 1 :
Thêm các bit đệm (Append Padding Bit)
Thông điệp được mở rộng với chiều dài là giá trị khi lấy 448 mod 512. Điều này, thông điệp được mở rộng là 64 bit. Bước này luôn được thự hiện dù là chiều dài có là giá trị của 448 mod 512 hay không. Trong tất cả các giá trị, ít nhất là một bit và nhiều nhất là 512 bit được thêm vào. Việc thêm vào được tiến hành như sau : đầu tiên 1 bit được thêm vào thông điệp và kế đó là các bit 0 để chiều dài sau cùng của thông điệp là 448 mod 512.
Bƣớc 2 :
Thêm vào chiều dài
b là chiều dài của thông điệp trước khi thêm vào các bit được lưu trữ trong
64 bit và không thể lớn hơn 264 bit. Với 64 lưu trữ, b được chia làm 2 từ 32 bit
được thêm vào thơng điệp theo một trình tự từ thấp vào trước, một thơng điệp sau khi qua bước 1 và thêm b vào sẽ có chiều dài chính xác là bội số của 512 bit.
Tương đương thông điệp này là bội số của 16 từ 32 bit. M[0,…N-1] ký hiệu cho các từ của thông điệp với N là bội số của 16 từ.
Bƣớc 3 :
Khởi tạo cùng đệm MD
Với một vùng đệm gồm 4 từ (A, B, C, D) được sử dụng để tính giá trị băm MD. Mỗi từ A, B, C, D là 4 thanh ghi 32 bit, các thanh ghi này được khởi tạo bởi các giá trị sau theo hệ số thập lục phân, các byte thứ tự thấp trước lớn sau.
MD5 Message-Digest Algorithm April 1992
word A: 01 23 45 67
word B: 89 ab cd ef
word C: fe dc ba 98
word D: 76 54 32 10
Bƣớc 4 :
Xử lý thông điệp theo khối 16 từ
Đầu tiên, chúng ta cần định nghĩa 4 hàm hỗ trợ mà giá trị vào là 3 từ 32 bit và sinh ra kết quả là từ 32 bit F(X, Y, Z) …
F(X,Y,Z) = XY v not(X) Z
G(X,Y,Z) = XZ v Y not(Z)
H(X,Y,Z) = X xor Y xor Z
I(X,Y,Z) = Y xor (X v not(Z))
Trong mỗi bit vị trí F đựơc thực thi như điều kiện đầu tiên nếu X kế đó là Y và sau là Z. Một hàm F có thể được định nghĩa việc dùng + thay thế cho v khi XY và not(X)Z và sẽ khơng bao giờ có 1 s. Nó được quan tâm và chú ý hơn nếu bit của X,Y,Z là độc lập và không tuân theo ai, mỗi bit của F(X, Y, Z) sẽ mang tính
độc lập và khơng tn theo gì cả. Cịn hàm G, H, I cũng như hàm F. Khi thực thi nhiều bit song song sẽ sản sinh ra giá trị từ bit của X, Y và Z. Trong cùng một cách thức nếu như bit X và Z thì độc lập và khơng phụ thuộc. Khi đó, mỗi bit của G(X, Y, Z), H(X, Y, Z) và Y(X, Y, Z) sẽ độc lập và không phụ thuộc, chú ý rằng H là bit ….. “ xor ” hay “party” hàm của giá trị vào.
Bước này sử dụng bảng gồm 64 phần tử T[0, …., 63] được khởi tạo từ hàm sin, T[i] ký hiệu cho phần tử thứ I của bảng và bằng abs’-------------------- ở đây i là hằng số radian.
/* Process each 16-word block. */
For i = 0 to N/16-1 do
/* Copy block i into X. */
For j = 0 to 15 do
Set X[j] to M[i*16+j].
end /* of loop on j */
/* Save A as AA, B as BB, C as CC, and D as DD. */
AA = A
BB = B
Bƣớc 5 :
Giá trị băm (kết quả)
Giá trị băm được lưu trong 4 thanh ghi A, B, C, D. Nghĩa là chúng ta bắt đầu với byte thấp nhất của A và kết thúc với byte cao nhất của D. Sự hồn tất này đã mơ tả được MD5.