为什么密钥管理如此重要?
密码学的薄弱环节从来不是算法本身,而是密钥管理。
- 算法泄露 ≠ 安全失效
- 密钥泄露 = 安全失效
密钥生命周期
|
|
1. 密钥生成
密钥长度指南
| 算法类型 | 推荐长度 | 安全强度 |
|---|---|---|
| RSA | 2048-4096 位 | 112-128 位 |
| ECC | P-256/P-384 | 128-192 位 |
| AES | 128/256 位 | 128/256 位 |
| HMAC | 256 位 minimum | 256 位 |
使用 OpenSSL 生成密钥
|
|
确保随机性
- 使用操作系统提供的随机源:
/dev/urandom - 避免使用
rand()等伪随机函数 - 在资源受限设备上,确保硬件随机数生成器可用
2. 密钥存储
不安全的存储方式
❌明文文件存储
|
|
❌Git 仓库提交
|
|
安全存储策略
方案 1:操作系统密钥环
- macOS: Keychain
- Windows: Credential Manager
- Linux: GNOME Keyring / KDE Wallet
方案 2:环境变量(临时)
|
|
⚠️ 注意:环境变量在进程间共享,需谨慎使用。
方案 3:密钥管理服务(推荐)
| 服务 | 提供商 |
|---|---|
| AWS KMS | Amazon |
| Azure Key Vault | Microsoft |
| GCP KMS | |
| HashiCorp Vault | HashiCorp |
AWS KMS 示例:
|
|
方案 4:HSM(硬件安全模块)
用于高安全场景:
- 金融系统
- CA 私钥
- 根密钥
3. 密钥轮换
轮换策略
| 密钥类型 | 轮换周期 | 说明 |
|---|---|---|
| 对称加密密钥 | 90-365 天 | 根据数据敏感度 |
| 传输密钥 | 24-72 小时 | SSL/TLS 会话密钥 |
| HMAC 密钥 | 180 天 | 签名密钥 |
| RSA/ECC 私钥 | 1-2 年 | 公钥证书绑定 |
轮换流程
|
|
滚动加密示例
|
|
4. 密钥撤销
证书撤销(CRL/OCSP)
|
|
密钥泄露后的措施
- 立即停用:停止使用泄露密钥
- 撤销证书:如果涉及证书,提交撤销请求
- 重新生成:生成新密钥对
- 通知相关方:更新所有依赖系统
5. 密钥备份
备份策略
- 多地存储:不同物理位置
- 加密备份:使用主密钥加密备份
- 访问控制:限制备份访问权限
- 定期恢复测试:验证备份可用性
多人共享密钥( Shamir 分享)
|
|
6. 密钥销毁
安全删除
|
|
密钥管理自动化
配置示例(HashiCorp Vault)
|
|
最佳实践总结
✅ DO(做)
- 使用标准化算法和库
- 密钥长度符合当前安全标准
- 自动化密钥轮换
- 记录密钥访问日志
- 使用环境隔离(开发/测试/生产密钥分离)
❌ DON’T(不做)
- 硬编码密钥到源码
- 通过邮件/IM 传输密钥
- 在日志中记录密钥
- 多个系统共享同一密钥
- 使用过期的加密算法