Hàm băm mật mã là "dao swiss army" của mật mã học — building block cho hàng chục ứng dụng bảo mật cốt lõi.
1. Chữ ký số (Digital Signature)
- Quy trình: Sig = Sign(SK, H(M)); Verify: Verify(PK, M, Sig).
- Tại sao hash trước khi ký? Hiệu quả (ký 256-bit thay vì MB/GB data), an toàn (collision resistance bảo vệ chống existential forgery).
- Thuật toán: RSA-PSS (SHA-256/384/512), ECDSA (SHA-256/384/512), EdDSA (Ed25519 - internal SHA-512), Dilithium (PQC, SHAKE256).
- Ứng dụng: TLS certificate, code signing, document signing, blockchain transaction, JWT (RS256/ES256).
2. Xác thực toàn vẹn tệp (File Integrity Verification)
- Checksum: SHA-256(file) so sánh với giá trị công bố (website, .sha256 file, sig).
- Package manager: npm (SHA-512), PyPI (SHA-256), Debian/APT (SHA-256), Rust/Cargo (SHA-256).
- Binary transparency / Reproducible builds: Hash build artifact chứng minh build từ source.
- Git: Commit ID = SHA-1 (đang migrate SHA-256). Merkle tree (tree object hash).
3. Băm mật khẩu (Password Hashing) — Quan trọng nhất
- Không dùng hash nhanh (SHA-256, MD5) trực tiếp! Dễ brute-force GPU (100+ GH/s SHA-256).
- Dùng KDF chậm (Password Hashing):
- Argon2id (PHC winner): memory-hard (m KB), time-hard (t passes), parallelism (p lanes). Default: m=64MB, t=3, p=4.
- bcrypt: cost factor (log₂ rounds) ≥ 12 (2024). 72-byte limit.
- scrypt: N, r, p params. Memory-hard gốc.
- PBKDF2-HMAC-SHA256: iterations ≥ 600,000. Chỉ time-hard. Chỉ khi bắt buộc FIPS.
- Lưu format MCF:
$algo$params$salt$hash. Salt duy nhất/user (16-32 byte random). Verify constant-time. Upgrade on login.
4. Dẫn xuất khóa (Key Derivation - KDF)
- HKDF (RFC 5869): Extract-then-Expand. HKDF-Extract(salt, IKM) → PRK; HKDF-Expand(PRK, info, L) → OKM. Dùng SHA-256/512. TLS 1.3, Signal, MLS, AWS KMS.
- SHAKE256 (XOF): Dẫn xuất output tùy ý độ dài, domain separation tự nhiên (customization string).
- KBKDF (NIST SP 800-108): Counter mode, feedback mode, double-pipeline iteration mode.
5. Dấu thời gian số tin cậy (Trusted Digital Timestamping)
- Mục đích: Chứng minh dữ liệu tồn tại tại thời điểm T (bằng chứng IP, log, audit).
- Quy trình: Client → Hash data → Gửi hash cho TSA (Time Stamping Authority) → TSA ký Sign(TSA_SK, hash || time || nonce) → Trả TimeStampToken.
- Verify: Check TSA cert chain + signature + time.
- Chuẩn: RFC 3161 (TSP), RFC 5816 (ESS). Dùng trong long-term validation (LTV), blockchain anchoring.
6. Phát hiện Rootkit (Rootkit Detection)
- Rootkit: Malware ẩn presence, hook kernel, hide file/process/network.
- Phát hiện dựa trên hash: Known-good hash database (system binary, kernel module, critical config).
- Công cụ: AIDE, Tripwire, Samhain, OSSEC/Wazuh, systemd-fsck-root. So sánh hash runtime với baseline.
- Kết hợp: Kernel module signature verification (Linux kernel lockdown, UEFI Secure Boot), eBPF monitoring, memory forensics (Volatility).
7. Các ứng dụng khác
| Ứng dụng | Cơ chế dùng Hash |
|---|---|
| Blockchain / Cryptocurrency | Block hash (PoW), Merkle root (tx integrity), Address (Hash160 = RIPEMD160(SHA256(pubkey))), Commitment (Pedersen hash) |
| TLS / HTTPS | Certificate fingerprint (SHA-256), PRF (HKDF-SHA256), Finished message (verify handshake transcript hash) |
| Message Authentication (HMAC) | HMAC(K, M) = H((K⊕opad)||H((K⊕ipad)||M)). JWT HS256, API auth, cookie signing |
| Key Derivation (E2EE) | Signal Double Ratchet: HKDF-SHA256 chain. MLS: HPKE KDF. |
| Proof-of-Work / Consensus | Bitcoin: SHA-256d (double SHA-256) < target. Ethereum: Keccak-256 (Ethash - deprecated post-Merge) |
| Deduplication / Content-addressable Storage | Git (SHA-1→SHA-256), IPFS (CID = multihash SHA-256/BLAKE3), BorgBackup, restic |
| Verifiable Random Function (VRF) | Algorand, Cardano, Dfinity: VRF = Hash(SK, input) + Proof. Hash = ECVRF / RSA-FDH-VRF |
Tóm tắt lựa chọn Hash cho ứng dụng (2024)
Application | Hash Algorithm
-------------------------|-------------------------
Digital Signature | SHA-256/384/512, SHA3-256, SHAKE256
File Integrity / Checksum| SHA-256 (crypto), BLAKE3/xxHash (speed)
Password Storage | Argon2id (KDF), bcrypt, scrypt
Key Derivation (HKDF) | HKDF-SHA256, SHAKE256
Blockchain (Bitcoin) | SHA-256d
Blockchain (Ethereum) | Keccak-256
Merkle Tree / CID | SHA-256, BLAKE3 (multihash)
HMAC / MAC | HMAC-SHA256, KMAC (SHA-3)
Timestamping (RFC 3161) | SHA-256/384/512
Rootkit Detection | SHA-256 (baseline db)
VRF | ECVRF (SHA-256), RSA-FDH-VRF
Nguyên tắc vàng: Mỗi ứng dụng chọn hash phù hợp đặc tính (collision resistance, speed, XOF, domain separation). Không dùng một hash cho mọi thứ nếu không cần thiết — domain separation là key.