MD5 (Message-Digest Algorithm 5) là một hàm băm mật mã học được sử dụng rộng rãi để xác thực thông điệp, kiểm tra tính toàn vẹn nội dung và chữ ký số. Được phát minh bởi Ron Rivest năm 1991, MD5 tạo ra giá trị băm 128-bit (16 byte) từ dữ liệu đầu vào có độ dài tùy ý.
Cách thức hoạt động của MD5
MD5 xử lý dữ liệu theo các khối 512-bit, chia thành 16 từ 32-bit mỗi từ. Quá trình băm diễn ra qua 5 bước chính:
- Padding (Đệm): Thêm bit 1 và các bit 0 để độ dài thông điệp đồng dư 448 modulo 512.
- Append Length (Thêm độ dài): Ghi thêm 64-bit biểu thị độ dài bản gốc.
- Chia khối: Chia đầu vào thành các khối 512-bit.
- Khởi tạo biến chuỗi: Thiết lập 4 biến 32-bit (A, B, C, D) với giá trị cố định.
- 4 vòng xử lý: Mỗi vòng có 16 phép toán sử dụng các hằng số khác nhau, kết hợp các hàm logic phi tuyến (F, G, H, I) với dịch chuyển xoay và cộng modulo 2³².
Kết quả là chuỗi băm 128-bit (4 khối 32-bit).
Điểm yếu bảo mật
Tuy từng là tiêu chuẩn, MD5 hiện không còn an toàn cho các ứng dụng mật mã do:
- Tấn công va chạm (Collision attack): Có thể tạo ra hai đầu vào khác nhau cho cùng giá trị băm. Năm 2004, Wang et al. công bố va chạm thực tế; 2008 chứng minh tấn công chosen-prefix collision.
- Tấn công preimage: Mặc dù khó hơn, nhưng độ phức tạp đã giảm dưới 2¹²⁸.
Do đó, MD5 đã bị loại khỏi TLS/SSL, chữ ký số, và các giao thức yêu cầu chống va chạm. NIST khuyến nghị chuyển sang SHA-256 hoặc SHA-3.
Ứng dụng hiện tại (phi mật mã)
- Kiểm tra toàn vẹn tệp (checksum) tải xuống.
- Index bảng băm, deduplication dữ liệu.
- Hệ thống phi bảo mật cần băm nhanh, xác suất va chạm thấp ngẫu nhiên.
Lời khuyên: Không dùng MD5 cho mật khẩu, chữ ký, hoặc bất kỳ ngữ cảnh bảo mật nào. Sử dụng Argon2, bcrypt, PBKDF2 cho mật khẩu; SHA-256/384/512 hoặc SHA-3 cho băm chung.