密钥管理基础
密钥管理,说白了就是管好密钥的“生老病死”。我刚开始接触国密项目时,觉得算法选对就万事大吉。结果呢?密钥保管不当,整个系统跟纸糊的一样。所以这一章,我们专门聊密钥的生命周期、类型和安全等级。这些都是硬功夫,绕不过去。
密钥生命周期
一把密钥从产生到销毁,经历几个固定阶段。我个人习惯把这六个阶段画在桌上,每天看一眼——真的管用。
- 生成:使用硬件随机数发生器或符合国密标准的真随机源。我见过有人用
rand()生成SM4密钥,嗯,那玩意儿随机性差得离谱。 - 分发:通过安全通道(如TLS加密传输、物理U盘)把密钥交给合法实体。注意分发过程中的保密性和完整性。
- 使用:在内存中临时加载,用完立刻清零。不能把密钥写进日志、或者存到磁盘上。
- 存储:加密存储。比如用主密钥加密会话密钥后保存,或直接放进HSM。
- 备份与归档:备份要跟主密钥分开存放;归档用于审计,但必须加密且严格控制访问。
- 销毁:彻底擦除密钥材料。我曾经发现某个系统只是删了文件表项,密钥实际还在磁盘上——这就是给自己挖坑。
核心原则:每个阶段都要有可审计的操作记录,且密钥只在必要的最小范围内暴露。
下面这张流程图把生命周期串起来了,你跟着箭头走一遍就清楚。
密钥类型
按用途和算法分成两大类,但实际工作中交叉使用。我简单梳理一下:
| 类型 | 特点 | 常见算法 | 典型用途 |
|---|---|---|---|
| 对称密钥 | 加密和解密用同一把密钥 | SM4 | 大量数据加密 |
| 非对称密钥 | 公钥加密、私钥解密 | SM2 | 密钥交换、数字签名 |
| 主密钥 | 用于加密其他密钥(KEK) | SM4 | 保护会话密钥、存储密钥 |
| 会话密钥 | 一次通信会话临时生成 | SM4/SM2混合 | 实时通信加密 |
我记得有一次做国密适配,团队把主密钥和会话密钥混放在一个配置里。结果一个漏洞导致会话密钥泄露,连带着主密钥也被分析出来。从那以后我规定:不同类型的密钥必须物理或逻辑隔离,且使用不同访问策略。
实用建议:非对称密钥(SM2)适合做数字信封:用SM2公钥加密SM4会话密钥,再用SM4加密实际数据。既安全又高效。
密钥安全等级
国密标准(GM/T 0054-2018)把密钥安全划分成四个等级。等级越高,保护要求越严。我把它整理成一张速查表:
| 等级 | 保护要求 | 典型场景 |
|---|---|---|
| 一级 | 纯软件保护,密钥存储在加密容器或内存中 | 开发测试、低敏感度系统 |
| 二级 | 使用硬件加密模块(如PCI-E密码卡)存储和使用密钥 | 一般业务系统、内部传输 |
| 三级 | 硬件模块具备物理防篡改、密钥生命周期自动管理 | 金融交易、政务数据 |
| 四级 | 最高级,具备抗物理攻击(如侧信道、故障注入)能力 | 国家机密、战略关键系统 |
避坑指南:我曾经见过一个项目声称达到三级安全,实际却用了USB Key来当硬件模块。USB Key通常只支持一级或二级防护,根本扛不住定向攻击。所以选型时要看硬件模块的EAL认证(国际标准)或国密资质,别只看宣传。
再啰嗦一句——密钥的备份和销毁其实是最容易被忽略的。我在一次合规检查中,发现某个老旧系统的演示密钥还躺在服务器的回收站里。别人只要点个“还原”就拿到了。那一刻我意识到:销毁必须用物理销毁或者多遍覆写,光删除文件不靠谱。
好了,这一节的内容就是这些。接下来你可以动手画一张你自己的密钥生命周期流程图,然后把项目中用到的密钥都标上类型和安全等级。相信我,出问题的时候,这些基础能救你。