SHA (Secure Hash Algorithm) là họ tiêu chuẩn hàm băm mật mã do NIST/NSA thiết kế, chuẩn hóa qua FIPS. Phân hệ chính: SHA-1 (legacy, broken), SHA-2 (tiêu chuẩn hiện tại), SHA-3 (dự phòng, thiết kế khác).
Họ SHA-2 (FIPS 180-4) — Tiêu chuẩn vàng hiện tại
| Thuật toán | Output | Block | Word | Rounds | Dùng cho |
| SHA-224 | 224-bit | 512-bit | 32-bit | 64 | Truncated SHA-256, compatibility |
| SHA-256 | 256-bit | 512-bit | 32-bit | 64 | Mặc định chung (TLS, Bitcoin, Git, JWT, cert) |
| SHA-384 | 384-bit | 1024-bit | 64-bit | 80 | Truncated SHA-512, 192-bit security |
| SHA-512 | 512-bit | 1024-bit | 64-bit | 80 | Nhanh trên 64-bit, high security |
| SHA-512/224 | 224-bit | 1024-bit | 64-bit | 80 | Chống length extension, 112-bit security |
| SHA-512/256 | 256-bit | 1024-bit | 64-bit | 80 | Chống length extension, 128-bit security |
SHA-3 Family (FIPS 202) — Keccak Sponge Construction
- NIST SHA-3 Competition winner (2012) — Keccak team (Bertoni, Daemen, Peeters, Van Assche).
- Khác Merkle-Damgård: Sponge construction — State = rate (r) + capacity (c) = 1600-bit.
- Permutation Keccak-f[1600] (24 vòng) — ARX-like (AND, XOR, ROT, NOT).
- Absorb: XOR r-bit block → permute.
- Squeeze: Output r-bit → permute nếu cần thêm.
- Tự nhiên chống length extension attack. Hỗ trợ XOF (SHAKE128/256) — output tùy ý độ dài.
| Thuật toán | Output | Rate (r) | Capacity (c) | Security |
| SHA3-224 | 224-bit | 1152 | 448 | 112-bit |
| SHA3-256 | 256-bit | 1088 | 512 | 128-bit |
| SHA3-384 | 384-bit | 832 | 768 | 192-bit |
| SHA3-512 | 512-bit | 576 | 1024 | 256-bit |
| SHAKE128 | Tuỳ ý (XOF) | 1344 | 256 | 128-bit |
| SHAKE256 | Tuỳ ý (XOF) | 1088 | 512 | 256-bit |
SHA-1 (FIPS 180-1, 1995) — ĐÃ PHÁ VỠ
- 160-bit output, 512-bit block, 80 rounds, Merkle-Damgård.
- Collision attack: SHAttered (Google/CWI, 2017) — 2⁶³.¹ operations, 110 GPU-year. Thực tế.
- Chosen-prefix collision: 2019 (Gaëtan Leurent, Thomas Peyrin).
- Cấm: TLS certificate (2017), Git (migrate SHA-256), code signing, blockchain mới.
- HMAC-SHA1: Vẫn chấp nhận được (HMAC proof không yêu cầu collision resistance) nhưng deprecated, nên chuyển HMAC-SHA256.
Ứng dụng quan trọng: TLS Certificate & PKI
- X.509 Certificate: Signature = Sign(CA_SK, TBSCertificate) — TBSCertificate hash bằng SHA-256 (bắt buộc từ 2016).
- Certificate Transparency (CT): Log entry = Merkle tree leaf = SHA-256(certificate).
- TLS 1.3: HKDF-SHA256 cho key derivation, Finished message = HMAC-SHA256(handshake_hash).
So sánh SHA-2 vs SHA-3 vs BLAKE3 (2024)
| Tiêu chí | SHA-256 | SHA3-256 | BLAKE3 |
| Construction | Merkle-Damgård | Sponge | Tree (BLAKE2-based) |
| Speed (SW, 1 core) | ~0.5 cpb (HW accel: 0.06) | ~1.5-2 cpb | ~1-2 cpb (SIMD, parallel) |
| Length extension | Có (trừ truncated) | Không | Không |
| XOF / Variable output | Không (cần SHAKE) | SHAKE256 (XOF) | Có (native XOF) |
| Domain separation | Manual (prefix) | SHAKE customization | Built-in (key, context) |
| Standardization | FIPS 180-4 (ubiquitous) | FIPS 202 | IETF RFC (draft), không FIPS |
| PQC readiness | Tốt (SHA-256 trong Dilithium) | Tốt (SHAKE256 trong Dilithium/Kyber) | Chưa chuẩn PQC |
Khuyến nghị lựa chọn (2024)
- Mặc định mọi thứ: SHA-256 (hoặc SHA-512 trên 64-bit). Phổ biến, hardware accel, an toàn, FIPS.
- Cần XOF / Domain separation dễ dàng / Chống length extension: SHAKE256 (NIST standard) hoặc BLAKE3 (performance).
- Cryptographic agility (đa dạng hóa): Hỗ trợ cả SHA-256 và SHA3-256/SHAKE256 trong code.
- Password hashing: KHÔNG dùng SHA-256 trực tiếp. Dùng Argon2id, bcrypt, scrypt, PBKDF2-HMAC-SHA256.
- Checksum non-crypto (speed): xxHash (XXH3), BLAKE3, CRC32C (HW accel).
Lưu ý: SHA không phải encryption. Không "giải mã SHA". Dùng đúng chỗ: Integrity, Authentication (HMAC), KDF, Signature, Commitment, Blockchain. Không dùng cho Confidentiality.