Giải mã (Decryption) là quá trình ngược của mã hóa: chuyển ciphertext (dữ liệu xáo trộn) về plaintext (dữ liệu gốc đọc được) bằng thuật toán giải mã và khóa phù hợp.
Cơ chế theo loại mật mã
| Loại | Khóa giải mã | Thuật toán |
|---|---|---|
| Đối xứng | Cùng khóa K dùng mã hóa | D(K, C) = P. Ví dụ: AES-GCM-Decrypt, ChaCha20-Poly1305-Decrypt |
| Bất đối xứng | Khóa riêng (Private key) SK | D(SK, C) = P. Ví dụ: RSA-OAEP-Decrypt, ECIES-Decrypt, Kyber-Decapsulate |
| Hybrid (KEM+DEM) | SK giải nạp K_sym, rồi K_sym giải mã dữ liệu | HPKE-Decrypt, TLS 1.3 record decryption |
Quy trình AEAD Decrypt (AES-GCM / ChaCha20-Poly1305)
Input: Key K, Nonce N, Ciphertext C, Tag T, AAD (optional)
Output: Plaintext P hoặc FAIL
1. Tính lại tag' = MAC(K, N, C, AAD)
2. So sánh tag' với T (constant-time comparison)
3. Nếu khớp: P = StreamDecrypt(K, N, C) → return P
4. Nếu khác: return FAIL (không tiết lộ plaintext)
Yêu cầu an toàn khi giải mã
- Constant-time: So sánh tag, branch không rò rỉ thông tin qua timing.
- Xác thực trước khi xử lý plaintext: Không bao giờ dùng plaintext trước khi verify tag (chống padding oracle, chosen-ciphertext attack).
- Nonce không lặp: Lặp nonce trong AEAD = phá vỡ bảo mật hoàn toàn (keystream reuse).
- Bảo vệ khóa trong bộ nhớ: Zeroize sau dùng, không log key/plaintext.
- Xử lý lỗi an toàn: Trả về lỗi chung (FAIL), không chi tiết (invalid tag vs invalid padding vs...).
Tấn công vào giải mã
- Padding Oracle (CBC mode): Kẻ thay đổi ciphertext, quan sát lỗi padding → giải mã byte-by-byte. Khắc phục: dùng AEAD, không CBC.
- Chosen-Ciphertext Attack (CCA): Kẻ có quyền giải mã ciphertext tùy chọn → suy ra khóa/plaintext. Khắc phục: CCA-secure schemes (OAEP, AEAD).
- Side-channel (timing, power, cache): Trên thiết bị giải mã. Khắc phục: constant-time, masking, HSM.
- Fault Injection: Gây lỗi khi giải mã → suy ra khóa. Khắc phục: duplicate computation, sensor.
Quản lý khóa giải mã
Khóa giải mã là mục tiêu giá trị cao nhất. Yêu cầu:
- Lưu trữ HSM/KMS (FIPS 140-2 Level 3+, Common Criteria EAL4+).
- Access control: RBAC, principle of least privilege, MFA.
- Audit log mọi thao tác decrypt/unwrap.
- Key rotation, revocation, destruction an toàn.
Tóm lại: Giải mã không chỉ "chạy ngược thuật toán" — là quá trình xác thực, kiểm soát, bảo vệ khóa, và chống side-channel. Triển khai sai giải mã là nguyên nhân hàng đầu rò rỉ dữ liệu trong các hệ thống "đã mã hóa".