Hash Function (Hàm băm) là gì?
Hàm toán học một chiều (one-way) chuyển đổi dữ liệu đầu vào kích thước bất kỳ → giá trị băm (hash value/digest) độ dài cố định (ví dụ: 256-bit cho SHA-256).
Đặc tính cốt lõi:
- Deterministic: Cùng input → luôn cùng output.
- Fast computation: Tính toán nhanh.
- Pre-image resistance (Kháng nguyên ảnh): Khó tìm input từ hash (mất 2ⁿ phép thử).
- Second pre-image resistance: Khó tìm input khác cho cùng hash.
- Collision resistance (Kháng va chạm): Khó tìm 2 input khác nhau cho cùng hash (Birthday attack: 2ⁿ/²).
- Avalanche Effect: Đổi 1 bit input → ~50% bit output đổi.
Phân loại & Thuật toán phổ biến
| Họ | Thuật toán | Độ dài Output | Trạng thái | Ứng dụng điển hình |
|---|---|---|---|---|
| MD (Message Digest) | MD5 (128-bit) | 128-bit | BROKEN (Collision dễ dàng) | Checksum file không quan trọng, legacy |
| SHA-1 | SHA-1 | 160-bit | DEPRECATED (Collision practical 2017) | Git (chuyển SHA-256), legacy cert |
| SHA-2 | SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/256 | 224-512 bit | AN TOÀN (Khuyến nghị NIST) | TLS, Bitcoin, Cert, PGP, KDF, Blockchain |
| SHA-3 (Keccak) | SHA3-224, SHA3-256, SHA3-384, SHA3-512, SHAKE128, SHAKE256 (XOF) | 224-512 bit | AN TOÀN (Tiêu chuẩn mới) | Post-quantum ready, Ethereum 2.0, New designs |
| BLAKE2/3 | BLAKE2b (512), BLAKE2s (256), BLAKE3 | 256-512 bit | RẤT NHANH, AN TOÀN | File integrity, Password hashing (BLAKE3), WireGuard |
| Password Hashing (Slow Hash) | Argon2id (Winner PHC), bcrypt, scrypt, PBKDF2 | Configurable | BẮT BUỘC cho mật khẩu | Lưu trữ password, Key derivation |
Hash vs Encryption (Mã hóa) – Khác biệt căn bản
| Đặc điểm | Hash (Băm) | Encryption (Mã hóa) |
|---|---|---|
| Chiều | Một chiều (Không thể giải mã) | Hai chiều (Encrypt ↔ Decrypt với Key) |
| Key | Không cần key (Public function) | Cần Key (Symmetric/Asymmetric) |
| Mục đích | Toàn vẹn (Integrity), Xác thực, Fingerprint | Bảo mật (Confidentiality) |
| Output length | Cố định | Tương ứng input (block cipher) hoặc ≥ input |
Vai trò Hash trong An ninh mạng
1. Toàn vẹn dữ liệu (Data Integrity)
- File download: So sánh SHA-256 checksum với giá trị nhà phát hành công bố.
- Git: Mỗi commit = SHA-1 (đang chuyển SHA-256) của tree + parent + metadata.
- Blockchain: Block hash liên kết chuỗi bất biến.
2. Lưu trữ mật khẩu an toàn (Password Storage)
- KHÔNG BAO GIỜ lưu plaintext hoặc hash nhanh (MD5, SHA-256).
- Dùng Argon2id (memory-hard, time-hard, parallelism-hard) hoặc bcrypt/scrypt/PBKDF2.
- Lưu:
$argon2id$v=19$m=65536,t=3,p=4$salt$hash.
3. Chữ ký số (Digital Signature)
Signature = Sign(Hash(message), PrivateKey). Hash trước (hiệu năng, bảo mật) → ký hash. Ví dụ: RSA-PSS, ECDSA, EdDSA (Ed25519).
4. HMAC (Hash-based Message Authentication Code)
HMAC(K, m) = Hash((K ⊕ opad) || Hash((K ⊕ ipad) || m)). Xác thực tính toàn vẹn & nguồn gốc tin nhắn. Dùng trong: JWT (HS256), API Auth, TLS, IPsec.
5. KDF (Key Derivation Function)
- HKDF (HMAC-based KDF): Từ master secret → derive nhiều key (Enc, Auth, IV).
- PBKDF2/Argon2: Từ password → encryption key.
6. Certificate & PKI
- Cert fingerprint: SHA-256 hash của DER-encoded cert.
- Certificate Transparency log: Merkle tree của cert hashes.
7. Threat Intel & Malware Analysis
- File hash (MD5/SHA-1/SHA-256) = IOC (Indicator of Compromise).
- YARA rule match hash sections.
- VT/HA query bằng hash.
Tấn công vào Hash & Phòng thủ
| Tấn công | Mô tả | Phòng thủ |
|---|---|---|
| Collision Attack | Tìm x ≠ y: H(x)=H(y) | Dùng SHA-256+/SHA-3/BLAKE2, output ≥256-bit |
| Pre-image Attack | Tìm x: H(x)=h | Output ≥256-bit, salt cho password hash |
| Length Extension | H(k||m) → H(k||m||pad||m') | Dùng HMAC, SHA-3, BLAKE2 (không bị) |
| Rainbow Table | Bảng tra hash phổ biến | Salt duy nhất/user, Slow hash (Argon2id) |
| Side-channel | Timing, Power, Cache | Constant-time impl, Masking, Blinding |
Best Practice triển khai
- Mục đích chung (Integrity, KDF, Signature): SHA-256 (SHA-2) hoặc SHA3-256 / BLAKE2b/3.
- Mật khẩu người dùng: Argon2id (m=64MB, t=3, p=4) → bcrypt (cost≥12) → scrypt → PBKDF2-HMAC-SHA256 (iter≥600k).
- API Auth (Stateless): HMAC-SHA256 hoặc JWT HS256/RS256/ES256.
- TLS 1.3: Bắt buộc AEAD (AES-GCM, ChaCha20-Poly1305) – hash bên trong HKDF.
- Không tự thiết kế crypto: Dùng thư viện đã audit: libsodium, OpenSSL, Bouncy Castle, Go crypto, Rust ring.