Hashing là hàm một chiều (one-way) — dễ tính H(M), khó khôi phục M từ H(M). Không dùng để "mã hóa" (encryption) vì không thể giải mã. Vai trò trong bảo mật: toàn vẹn, xác thực, dẫn xuất khóa, cam kết.
Ứng dụng bảo mật chính
1. Lưu trữ mật khẩu (Password Storage) — Quan trọng nhất
- Sai: Lưu plaintext, encrypt reversible, hash nhanh (SHA-256, MD5) — dễ brute-force/rainbow table.
- Đúng: Password Hashing KDF (Key Derivation Function) chậm + Salt duy nhất:
- Argon2id (mặc định 2024): memory-hard, time-hard, parallelism. Params: m=64MB, t=3, p=4.
- bcrypt: cost factor ≥ 12 (2024). Giới hạn 72 byte.
- scrypt: N=16384, r=8, p=1.
- PBKDF2-HMAC-SHA256: iterations ≥ 600,000 (chỉ khi bắt buộc FIPS).
- Lưu format MCF:
$algo$params$salt$hash. Verify constant-time. Upgrade on login.
2. Chữ ký số (Digital Signature)
- Ký: Sig = Sign(SK, H(M)) — ký hash thay vì ký message lớn.
- Verify: Verify(PK, M, Sig) → tính H(M), check sig.
- Thuật toán: RSA-PSS (SHA-256/384/512), ECDSA (SHA-256/384/512), EdDSA (Ed25519/Ed448 - internal hash), Dilithium (PQC, SHAKE256).
- Hash phải collision resistant (SHA-256+, SHA-3). MD5/SHA-1 cấm.
3. Xác thực toàn vẹn tệp (File Integrity)
- Tải xuống: So sánh SHA-256 hash của file với hash công bố (website, sig file).
- Git: Commit ID = SHA-1 (đang chuyển SHA-256). Merkle tree.
- Blockchain: Block hash = SHA-256d (Bitcoin), Keccak-256 (Ethereum).
- Binary transparency / Reproducible builds: Hash build artifact.
4. Message Authentication Code (MAC / HMAC)
- HMAC(K, M) = H((K⊕opad) || H((K⊕ipad) || M)) — RFC 2104.
- Dùng: TLS record (HMAC-SHA256), JWT (HS256/HS512), API auth, cookie signing.
- Keyed hash: Cần khóa K. An toàn nếu H collision-resistant hoặc HMAC security proof.
- Thay thế hiện đại: AEAD (AES-GCM, ChaCha20-Poly1305) — enc+auth cùng lúc.
5. Key Derivation Function (KDF)
- HKDF (RFC 5869): HKDF-Extract(salt, IKM) → PRK; HKDF-Expand(PRK, info, L) → OKM. Dùng SHA-256/512. TLS 1.3, Signal, MLS.
- SHAKE256 (XOF): Dẫn xuất khóa độ dài tùy ý, domain separation tự nhiên.
- Password-based KDF: Argon2id, bcrypt, scrypt, PBKDF2 (xem mục 1).
6. Commitment Scheme
- Commit: C = H(r || m) (r = random blinding).
- Reveal: (r, m) → verify H(r||m) == C.
- Ứng dụng: Coin flip, sealed-bid auction, ZKP, blockchain (UTXO commitment).
7. Pseudorandom Function (PRF) / Randomness Extraction
- HMAC / HKDF / SHAKE dùng làm PRF, KDF, randomness extractor (NIST SP 800-90B).
- Deterministic RNG (HMAC-DRBG, Hash-DRBG, CTR-DRBG).
Hashing KHÔNG phải Encryption
| Hashing | Encryption |
|---|---|
| Một chiều (không đảo ngược) | Hai chiều (có khóa giải mã) |
| Không khóa (hoặc keyed MAC) | Bắt buộc khóa |
| Mục đích: Integrity, Fingerprint, KDF | Mục đích: Confidentiality |
| Deterministic (cùng input = cùng output) | Probabilistic (IV/nonce → khác nhau mỗi lần) |
Lời khuyên: Hiểu rõ mục đích → chọn đúng công cụ. Password → Argon2id. File integrity → SHA-256/BLAKE3. MAC → HMAC-SHA256 hoặc AEAD. KDF → HKDF/SHAKE. Chữ ký → Hash + Sign. Không bao giờ dùng hashing thay cho encryption khi cần confidentiality.