Block Cipher là họ mật mã đối xứng mã hóa dữ liệu theo các khối kích thước cố định (block size), ví dụ 64-bit (DES, 3DES) hoặc 128-bit (AES, Twofish). Mỗi khối plaintext được biến đổi thành khối ciphertext cùng kích thước bằng khóa đối xứng K.
Đặc điểm cốt lõi
- Deterministic: Cùng (K, P) luôn cho cùng C.
- Permutation giả ngẫu nhiên (PRP): Với khóa cố định, khối mã hóa là hoán vị trên không gian {0,1}ⁿ không thể phân biệt với hoán vị ngẫu nhiên thực.
- Có nghịch đảo: Giải mã D(K, C) = P duy nhất (non-singular).
Padding (Đệm)
Plaintext không chia hết block size phải được đệm. Chuẩn phổ biến: PKCS#7 (thêm byte giá trị = số byte đệm). Ví dụ: block 128-bit, plaintext 160-bit → 2 khối: 1 khối đầy, 1 khối 32-bit dữ liệu + 96-bit padding.
Chế độ vận hành (Modes of Operation)
Block cipher gốc (ECB) mã hóa từng khối độc lập → không an toàn (cùng plaintext → cùng ciphertext, lộ pattern). Cần chế độ thêm IV (Initialization Vector) và chaining:
| Chế độ | IV | Song song hóa | Đặc điểm |
|---|---|---|---|
| CBC | Ngẫu nhiên | Mã hóa: không; Giải mã: có | Cᵢ = E(K, Pᵢ ⊕ Cᵢ₋₁). Phổ biến cũ. |
| CTR | Nonce + Counter | Cả hai | Biến block cipher thành stream cipher. Hiện đại, nhanh. |
| GCM / CCM | Nonce | Cả hai | AEAD: mã hóa + xác thực (integrity) cùng lúc. Khuyên dùng. |
| OFB / CFB | Ngẫu nhiên | Mã hóa: không | Chuyển thành stream cipher. Ít dùng hiện nay. |
| ECB | Không | Cả hai | Không bao giờ dùng cho dữ liệu > 1 khối. |
Block Cipher phổ biến
- AES-128/192/256 (FIPS 197): Tiêu chuẩn vàng, 10/12/14 vòng, phần cứng hỗ trợ (AES-NI).
- ChaCha20 (stream cipher nhưng thường nhóm với block cipher): Nhanh phần mềm, chống side-channel tốt.
- Twofish, Serpent, Camellia: Lựa chọn thay thế, an toàn.
- 3DES (Triple DES): 112-bit security, chậm, đã deprecated (NIST SP 800-131A).
Yêu cầu an toàn khi dùng
- Không bao giờ dùng ECB.
- IV/Nonce duy nhất cho mỗi khóa (key, nonce) pair — lặp lại = thảm họa (CTR/GCM).
- Dùng AEAD (GCM, CCM, ChaCha20-Poly1305) thay vì CBC+HMAC.
- Bảo vệ khóa: HSM, KMS, key rotation.