MD5 về cơ bản hoạt động khác với CRC.
Tôi không quen thuộc với các thuật toán CRC, ngoại trừ việc biết rằng chúng cung cấp khả năng bảo vệ toàn vẹn thông lượng cao cơ bản.
MD5 (cùng với các hàm khác trong họ hàm băm mật mã Merkle-Daamgard như SHA-1, SHA-256, v.v.) có khoảng 4 lớp:
Cấu trúc Merkle-Daamgard: bao gồm
Đệm tin nhắn tương thích MD - để đảm bảo các tin nhắn có độ dài khác nhau dẫn đến các chuỗi khối tin nhắn khác nhau. Các thông báo khác nhau có cùng độ dài không phải là mối quan tâm chính đối với phần đệm trình biên dịch MD.
Một loạt các lần lặp lại chức năng nén $C(h,m)$, ở đâu $h$ là thông báo từ lần lặp trước của hàm nén (hoặc vectơ khởi tạo nếu đây là lần lặp đầu tiên); và $m$ là khối thông báo cho lần lặp hiện tại.
Việc xây dựng chức năng nén từ mã hóa khối.
Cấu trúc Davies-Meyers là cấu trúc được sử dụng trong họ MD5, SHA-1 và SHA-2. Nó mã hóa thông báo với khối thông báo làm khóa, sau đó thêm hoặc xors thông báo vào khối đầu ra mới để thực hiện chức năng nén một chiều.
Việc xây dựng mã hóa khối.
Có 2 mô hình chính - a) Mạng hoán vị thay thế (SPN), b) Mạng Feistel. Họ MD5, SHA-1 và SHA-2 sử dụng cái sau.
Mạng Feistal thay đổi lặp đi lặp lại một nửa của khối mật mã khối bằng một giá trị được tính toán bằng cách sử dụng hàm làm tròn từ nửa còn lại của khối - phép tính hàm làm tròn liên quan đến khóa con được lấy từ khóa chính, trong trường hợp hàm băm, là khóa khối tin nhắn hiện tại.
Xây dựng hàm tròn.
Mối quan tâm chính của Mạng Feistal là tăng sự nhầm lẫn và phổ biến bằng cách áp dụng lặp đi lặp lại chức năng vòng và chức năng vòng cần cung cấp một số ngẫu nhiên tối thiểu cần thiết.
- Mô hình ARX (phép cộng số học, phép quay/dịch chuyển và phép toán xor) là một lựa chọn phổ biến.
- Đa thức nhị phân là khác.