Encryption Key (Khóa mã hóa) là chuỗi bit ngẫu nhiên, được dùng cùng thuật toán mật mã để biến đổi plaintext ↔ ciphertext. An toàn của hệ thống hoàn toàn phụ thuộc vào sự bí mật của khóa (Kerckhoffs's principle: thuật toán công khai, chỉ khóa bí mật).
Phân loại theo mô hình mật mã
| Loại | Khóa | Thuật toán điển hình | Độ dài khóa khuyến nghị (2024) |
|---|---|---|---|
| Symmetric (Đối xứng) | 1 khóa K (bí mật) cho enc & dec | AES, ChaCha20 | 128-bit (tối thiểu), 256-bit (khuyên dùng) |
| Asymmetric - Public Key (Khóa công khai) | PK (công khai) mã hóa / verify sig | RSA-OAEP, ECIES, Kyber (KEM) | RSA: 3072-bit; ECC: 256-bit (P-256/Curve25519); Kyber-768: 1184-byte |
| Asymmetric - Private Key (Khóa riêng) | SK (bí mật) giải mã / sign | RSA-PSS, ECDSA, EdDSA, Dilithium (PQC) | Cùng kích thước PK; bảo vệ tuyệt đối |
Phân loại theo chức năng (NIST SP 800-57)
- Master Key / KEK (Key Encryption Key): Mã hóa khóa khác (wrap/unwrap). Lưu trong HSM/KMS. Không bao giờ rời thiết bị bảo mật.
- Data Encryption Key (DEK): Mã hóa dữ liệu thực tế. Sinh ngẫu nhiên per-file/per-record, encrypt bằng KEK lưu trữ (envelope encryption).
- Key Signing Key (KSK) / Zone Signing Key (ZSK): DNSSEC.
- Root Key / CA Key: Ký certificate cấp dưới. Root offline, air-gapped.
- Ephemeral Key: Khóa phiên (session key), dùng một lần (ECDHE, TLS 1.3 traffic key). Forward secrecy.
- Password-Derived Key: KDF(password, salt) → key. Dùng Argon2id/bcrypt/scrypt/PBKDF2.
Yêu cầu an toàn cho khóa
- Ngẫu nhiên thực (True Randomness): Sinh từ CSPRNG / HSM TRNG (NIST SP 800-90A/B/C). Không bao giờ dùng seed yếu, timestamp, user input.
- Độ dài đủ: Symmetric ≥128-bit (AES-128), khuyên 256-bit. Asymmetric: RSA≥3072, ECC≥256 (Curve25519/P-256), PQC Kyber-768.
- Bí mật (Confidentiality): Chỉ bên được ủy quyền truy cập. HSM/KMS enforce.
- Toàn vẹn (Integrity): Phát hiện khóa bị sửa đổi (KMS/HSM verify).
- Duy nhất (Uniqueness): Không tái sử dụng khóa cho mục đích khác (key separation). Domain separation label.
- Vòng đời quản lý: Rotation, revocation, destruction (zeroize).
Bảo vệ khóa trong triển khai
- HSM (Hardware Security Module): FIPS 140-2 Level 3+, CC EAL4+. Key không bao giờ xuất plaintext. All crypto ops inside.
- KMS (Key Management Service): API encrypt/decrypt/sign/verify — app không thấy plaintext key. Access policy, audit log, auto-rotation.
- Software Vault: HashiCorp Vault, AWS Secrets Manager, Azure Key Vault — encryption at rest, lease, dynamic secrets.
- Memory Protection: Zeroize sau dùng, mlock (prevent swap), canary, constant-time.
- Key Ceremony: M-of-N split knowledge cho master key backup (Shamir Secret Sharing).
Rủi ro thường gặp
- Hardcode key trong code / config / container image.
- Dùng cùng khóa cho nhiều mục đích (enc + sign, prod + test).
- Không rotation khóa lâu năm.
- Backup key không mã hóa / lưu sai chỗ (Git, S3 public, shared drive).
- Nonce/IV lặp với cùng khóa (AES-GCM, ChaCha20) → keystream reuse = catastrophe.
- Side-channel leak key (timing, cache, power, EM).
Best Practice 2024: Sinh khóa trong HSM/KMS → chỉ dùng handle/ID → app gọi API encrypt/decrypt → zeroize local key material → audit log mọi thao tác → auto-rotation → PQC-ready (hybrid KEM).