Hashing (Hàm băm) là hàm xác định ánh xạ dữ liệu đầu vào tùy ý độ dài thành chuỗi độ dài cố định (hash value / digest / fingerprint). Đặc tính cốt lõi: một chiều (one-way) — dễ tính hash, khó khôi phục input; deterministic — cùng input luôn cho cùng output.
Cấu trúc phổ biến
| Construction | Đại diện | Đặc điểm |
| Merkle-Damgård | MD5, SHA-1, SHA-2, RIPEMD, BLAKE2 | Compression function lặp, padding + length encoding. Dễ length extension attack (trừ BLAKE2, SHA-512/256). |
| Sponge (Keccak) | SHA-3, SHAKE, KangarooTwelve | Absorb (XOR rate) → Permutation → Squeeze. Chống length extension tự nhiên, XOF. |
| Tree / Parallel | BLAKE3, ParallelHash | Chia nhánh, song song hóa, SIMD. Cực nhanh trên đa nhân. |
| ARX-based | BLAKE2/3, SipHash, Chaskey | Chỉ ADD/ROTATE/XOR, constant-time tự nhiên, không table lookup. |
Đặc tính bảo mật (Security Properties)
- Preimage Resistance (Kháng nguyên ảnh): Cho h, không thể tìm M: H(M)=h. Độ khó ~2ⁿ (n = output bits).
- Second Preimage Resistance (Kháng nguyên ảnh thứ 2): Cho M, không thể tìm M'≠M: H(M')=H(M). Độ khó ~2ⁿ.
- Collision Resistance (Kháng va chạm): Không thể tìm M₁≠M₂: H(M₁)=H(M₂). Độ khó ~2ⁿ/² (Birthday bound).
- Avalanche Effect: Thay đổi 1 bit input → ~50% bit output thay đổi.
- Pseudorandomness: Output không thể phân biệt với random (dùng cho KDF, PRF).
Ứng dụng theo mục đích
| Mục đích | Thuật toán khuyên dùng | Lưu ý |
| Chữ ký số / Certificate / TLS | SHA-256, SHA-384, SHA-512, SHA3-256 | Collision resistance bắt buộc |
| MAC / HMAC | HMAC-SHA256, HMAC-SHA512, KMAC (SHA-3) | Keyed hash, cần khóa bí mật |
| Lưu trữ mật khẩu | Argon2id, bcrypt, scrypt, PBKDF2-HMAC-SHA256 | KHÔNG dùng SHA/MD5 trực tiếp — cần salt + cost factor |
| KDF (Key Derivation) | HKDF-SHA256, HKDF-SHA512, SHAKE256 | Extract-then-Expand pattern |
| Kiểm tra tệp (Checksum) | SHA-256, BLAKE3, xxHash (non-crypto) | Non-crypto: xxHash cho tốc độ |
| Blockchain / Merkle Tree | SHA-256d (Bitcoin), Keccak-256 (Ethereum), BLAKE3 | Collision resistance critical |
| Hash table / Bloom filter / Deduplication | xxHash, MurmurHash, SipHash (keyed), FNV | Non-crypto, tốc độ ưu tiên |
Thuật toán tiêu chuẩn 2024
- Mặc định chung: SHA-256 (phổ biến, hardware accel, an toàn).
- Hiệu năng cao / XOF / Domain separation: BLAKE3 (song song, SIMD, 1-2 cpb), SHAKE256 (NIST standard XOF).
- Password hashing: Argon2id (memory-hard, time-hard, parallelism).
- Chống HashDoS (hash table): SipHash (keyed, fast).
Cấm dùng cho bảo mật mới
- MD5 (collision broken 2004), SHA-1 (collision broken 2017).
- Hash nhanh (SHA-256, BLAKE3) trực tiếp cho password — phải dùng KDF chậm.
- CRC32, checksum non-crypto cho integrity bảo mật.