CBC - Cipher Block Chaining (Chuỗi khối mật mã)
CBC là một chế độ hoạt động (mode of operation) của block cipher (như AES, DES), biến block cipher thành stream cipher để mã hóa dữ liệu dài bất kỳ.
Cơ chế hoạt động CBC
- Plaintext chia thành các block cố định (128-bit cho AES)
- Block đầu tiên: XOR với Initialization Vector (IV) ngẫu nhiên → mã hóa
- Block tiếp theo: XOR với ciphertext block trước đó → mã hóa
- Ciphertext = IV + các block đã mã hóa
Công thức: Ci = Ek(Pi ⊕ Ci-1), với C0 = IV
Tại sao CBC an toàn hơn ECB?
| Đặc điểm | ECB (Electronic Codebook) | CBC (Cipher Block Chaining) |
|---|---|---|
| Block giống nhau | Ra ciphertext giống nhau → lộ pattern | Ra ciphertext KHÁC nhau nhờ IV + chaining |
| IV | Không dùng IV | Bắt buộc IV ngẫu nhiên, duy nhất mỗi lần mã hóa |
| Parallel encryption | Có (độc lập) | Không (phụ thuộc block trước) |
| Parallel decryption | Có | CÓ (chỉ cần ciphertext trước) |
| Error propagation | 1 block lỗi → 1 block plaintext lỗi | 1 block lỗi → 2 block plaintext lỗi |
Yêu cầu bảo mật CBC
- IV phải ngẫu nhiên (random) hoặc unpredictable - không được dùng IV cố định hoặc counter
- IV không cần bí mật (có thể truyền công khai cùng ciphertext)
- Không reuse IV với cùng khóa (key) - dẫn đến vỡ bảo mật (two-time pad)
- Padding: PKCS#7 chuẩn, nhưng dễ bị Padding Oracle Attack (POODLE, Lucky Thirteen)
AES-CBC trong thực tế
- TLS 1.0/1.1/1.2 (cipher suite: TLS_AES_128_CBC_SHA, TLS_AES_256_CBC_SHA)
- IPsec ESP, SSH, OpenVPN, S/MIME, PGP
- File encryption: BitLocker (AES-CBC 128/256), FileVault 2, LUKS
Vấn đề bảo mật CBC & Giải pháp hiện đại
| Vấn đề | Mô tả | Giải pháp |
|---|---|---|
| Padding Oracle | Tấn công side-channel qua lỗi padding → giải mã ciphertext | Dùng AEAD (GCM, CCM), hoặc constant-time padding check |
| No Integrity | CBC chỉ cung cấp confidentiality, KHÔNG authenticity | Kết hợp HMAC (Encrypt-then-MAC) hoặc dùng AEAD |
| IV predictable | SSL/TLS 1.0 dùng IV = last ciphertext block → BEAST attack | TLS 1.1+ explicit IV, TLS 1.3 loại bỏ CBC |
| Bit-flipping | Sửa ciphertext → sửa plaintext dự đoán được (nếu biết format) | AEAD cung cấp integrity |