MD5 là gì?
MD5 (Message Digest Algorithm 5) là hàm băm mật mã (cryptographic hash function) nhận đầu vào độ dài tùy ý, tạo ra giá trị băm (hash/digest) 128-bit (32 ký tự hex). Được thiết kế bởi Ronald Rivest năm 1991 thay thế MD4.
Cách MD5 hoạt động (tóm tắt)
- Padding: Thêm bit để độ dài ≡ 448 (mod 512)
- Append Length: Thêm 64-bit biểu thị độ dài bản tin gốc
- Initialize MD Buffer: 4 thanh ghi 32-bit (A,B,C,D) với hằng số cố định
- Process 512-bit blocks: 4 vòng (round), mỗi vòng 16 bước, dùng hàm phi tuyến F,G,H,I
- Output: Nối 4 thanh ghi → 128-bit digest
Đặc điểm MD5
- Đầu ra cố định 128-bit (32 hex chars)
- Tính xác định (deterministic): Cùng input → cùng output
- Hiệu ứng tuyết (avalanche effect): Thay 1 bit → thay ~50% bit output
- Tốc độ nhanh (đây là nhược điểm cho mật khẩu)
- One-way: Khó đảo ngược (pre-image resistance) - nhưng đã bị phá vỡ
Ứng dụng MD5 (hiện tại)
- Kiểm tra toàn vẹn file (Checksum): So sánh MD5 file tải về với giá trị công bố
- Deduplication: Xác định file trùng lặp
- Indexing/Database: Key nhanh cho dữ liệu lớn
- Non-cryptographic purposes: Không yêu cầu chống va chạm
Tại sao MD5 KHÔNG AN TOÀN cho mật khẩu?
- Va chạm (Collision): Tìm 2 input khác nhau cho cùng hash (2004: Wang et al., 2008: Rogue CA cert)
- Tốc độ quá nhanh: GPU hiện đại tính ~300 tỷ MD5/giây → brute-force dễ dàng
- Rainbow table: Bảng tra cứu sẵn hash phổ biến
- Không có saltbuilt-in: Cần triển khai riêng (dễ sai)
- NIST deprecated: SP 800-131A cấm dùng MD5 cho mục đích mật mã
- Windows: `certutil -hashfile
MD5` hoặc PowerShell `Get-FileHash -Algorithm MD5` - Linux/macOS: `md5sum
` hoặc `md5 ` - PHP: `md5($string)` → 32 hex chars
So sánh MD5 vs SHA-1 vs SHA-256 vs bcrypt
| Thuật toán | Độ dài | Tốc độ | An toàn cho pass | Trạng thái |
|---|---|---|---|---|
| MD5 | 128-bit | Rất nhanh | ❌ Không | Deprecated |
| SHA-1 | 160-bit | Nhanh | ❌ Không | Deprecated |
| SHA-256 | 256-bit | Nhanh | ❌ Không (nếu dùng đơn lẻ) | OK cho non-pass |
| bcrypt | 184-bit | Chậm (config) | ✅ Có | Khuyến nghị |
| scrypt | 256-bit | Chậm, tốn RAM | ✅ Có | Khuyến nghị |
| Argon2 | Tuỳ chỉnh | Chậm, tốn RAM/CPU | ✅ Có (tốt nhất) | Khuyến nghị #1 |
| PBKDF2 | Tuỳ chỉnh | Chậm (config) | ✅ Có | Chấp nhận được |