引言
AES的安全性很大程度上依赖于密钥的保密性和随机性。良好的密钥管理是保障数据安全的基础。本文介绍密钥生成、存储、分发和销毁的最佳实践。
1. 密钥生成
密钥必须由密码学安全的随机数生成器生成,如PHP的random_bytes()、OpenSSL的RAND_bytes。切勿使用固定字符串或简单哈希作为密钥。
2. 密钥长度选择
AES-128提供128位安全强度,足以抵御暴力破解;AES-256提供256位,适合长期数据保护。建议至少使用AES-256。
3. 密钥存储
密钥不能硬编码在代码中。推荐方案:
- 使用环境变量或配置文件(需严格控制权限)。
- 使用密钥管理服务(KMS),如AWS KMS、Azure Key Vault。
- 使用HSM(硬件安全模块)保护高价值密钥。
4. 密钥派生
如果使用用户密码作为加密密钥,必须通过慢哈希函数(如PBKDF2、bcrypt)进行密钥派生,并加入盐和迭代。
5. 密钥轮换
定期更换密钥,减少密钥泄露影响范围。对于长期存储的数据,可采用信封加密(数据加密密钥定期轮换,主密钥极少更换)。
6. 密钥销毁
当密钥不再需要时,应从内存和存储中彻底清除。对于HSM或云KMS,可禁用或删除密钥。
常见错误
- 使用用户密码直接作为AES密钥(密码强度不足,且未加盐迭代)。
- 密钥硬编码在代码中,泄露风险高。
- 使用固定IV,破坏CBC安全性。
- 密钥备份未妥善保护。
总结
密钥管理是加密系统的核心,应遵循最小权限、安全存储、定期轮换等原则。正确使用密钥派生和安全的随机数生成器,才能发挥AES的最大效能。