密钥管理基础:对称密钥、非对称密钥、密钥生命周期管理概念
聊密钥审计接口之前,先得把密钥管理的基本功打牢。我见过不少团队,接口调得飞起,结果密钥生命周期一团乱,最后审计时被翻了个底朝天。所以这一章,咱们踏踏实实把对称密钥、非对称密钥、密钥生命周期这三个东西理清楚。
一、对称密钥:一把钥匙开一把锁
对称密钥,说白了就是加密和解密用同一个密钥。像咱们平时用 ZIP 加密压缩文件,输的密码就是对称密钥。
核心特征:
- 效率高:加解密速度比非对称快几个数量级。
- 密钥分发难:双方得事先商量好密钥,如果中间被截获,就等于裸奔。
- 典型算法:AES、SM4、DES(不建议再用 DES 了)。
我在项目中遇到过的坑:有一次做金融报文加密,团队直接用 AES-128 ECB 模式。审计一查,说同一个密钥下的相同明文产生相同密文,这是典型的选择明文攻击漏洞。后来全部改成 AES-256 GCM,带着随机 IV 和认证标签才过审。
实际落地时,对称密钥通常不单独裸用。我习惯配合密钥派生函数(KDF),比如从主密钥派生会话密钥,这样即使会话密钥泄露,主密钥还是安全的。
二、非对称密钥:公钥锁,私钥开
非对称密钥是一对儿:公钥公开,私钥自己藏着。公钥加密的东西,只有对应的私钥能解开;反过来,私钥签名的东西,公钥能验证。
核心特征:
- 安全分发:公钥随便给,私钥不出门。
- 效率低:比对称密钥慢几百倍,通常只用来加密少量数据或做数字签名。
- 典型算法:RSA(2048位以上)、ECC(P-256、SM2)。
实际项目中,个人强烈建议优先用 ECC 而不是 RSA。在相同安全强度下,ECC 的密钥长度更短,计算更快,审计日志里也更少被标记为“历史遗留风险”。目前合规体系基本都支持 SM2(国密)或 P-256。
非对称密钥的审计核心是:私钥必须硬件保护。如果用软件私钥文件,审计会直接给你挂红牌。我记得有一次给政务系统做审计,发现私钥放在配置文件的 base64 字段里……那场景,甲方技术经理脸都绿了。
三、密钥生命周期管理:从生到死都盯住
密钥生命周期,就是把密钥当成一个有身份证的公民,每一步操作都要记录、审计、可追溯。
通常分为六个阶段:
| 阶段 | 操作 | 审计要点 |
|---|---|---|
| 生成 | 使用合格随机数源,按算法规范生成 | 生成时间、生成者、随机数源类型 |
| 分发 | 通过安全通道传递给授权方 | 分发链路是否加密、接收方身份 |
| 存储 | 硬件安全模块(HSM)或安全容器 | 存储位置、是否加密存储、访问控制列表 |
| 使用 | 加密/解密/签名/验签 | 每次使用时间、调用方应用ID、操作类型 |
| 更新 | 定期轮换密钥 | 轮换策略是否执行、旧密钥是否安全销毁 |
| 销毁 | 彻底不可恢复 | 销毁方式(覆盖/物理粉碎)、见证人 |
我曾经踩过的雷:有一个项目,密钥销毁用了文件删除,没做覆盖。后来被取证恢复了出来。审计报告里直接定性为“重大数据泄露风险”。从那以后,我接手任何项目都会先检查密钥销毁流程——必须覆盖三次以上,或者由 HSM 提供安全销毁接口。
你看,密钥生命周期管理不只是技术问题,更是流程+审计问题。密钥生成时随机数质量不够、分发时忘了加密传输、销毁时留了备份——这些在审计接口的日志里全都会暴露出来。
为什么我要强调这些?因为后面我们讲审计接口的字段设计时,每个字段都跟这些阶段有关。比如“密钥用途”字段就对应使用阶段的审计点,“密钥版本”字段对应更新阶段。
四、对称 vs 非对称:何时用谁?
其实没有银弹。我一般这样分:
- 大量数据加密:对称密钥 + 非对称密钥交换(混合加密)。比如 HTTPS 就是先做 RSA/ECC 握手,交换会话对称密钥。
- 数字签名:用非对称,因为验证方只需要公钥。
- 内部系统加密:如果分发可控,单纯对称密钥就够,效率高。
你想想看,如果所有数据都用非对称加密,性能扛不住;如果所有场景都用对称密钥,分发环节又变成最大短板。混合用才是正道。
知识框架图
下面这张图把对称密钥、非对称密钥、生命周期管理的核心关系串在一起,方便你对照理解。
这张图左边是对称密钥、中间是非对称、右边是生命周期。虚线贯穿表示生命周期管理不管你用哪种类型都得做。最下面的说明框直接点出审计接口落地的核心要求,后面我们设计接口字段时会反复用到这张图里的逻辑。
小结几个关键点
- 对称非对称不是二选一,混用才是主流。
- 密钥生命周期管理是审计的基石,每个阶段都要有日志。
- 私钥必须硬件保护,这条在审计中几乎是一票否决项。
- 定期轮换密钥:我通常建议对称密钥每 90 天轮换,非对称密钥每 2 年轮换(具体看合规要求)。
工作中,你可以拿表格跟自己团队的现状比一下:生成阶段有没有记录随机数源?销毁阶段有没有覆盖流程?如果哪一项是空白,那就需要优先补上,不然审计接口接进来也是一堆缺字段的日志。