第3章 密钥生命周期概述:生成、分发、存储、使用、备份、销毁
聊密钥管理,咱们得先搭个框架。
你想想看,一把密钥从生到死,要经历哪些环节?
我在项目里见过不少团队,密钥生成得很漂亮,结果分发阶段就泄密了。或者备份做得很勤,销毁时却留了尾巴。
这一章,咱们就把密钥的整个生命周期拆开来看。六个阶段:生成、分发、存储、使用、备份、销毁。每一个阶段,审计都要盯紧。
3.1 密钥生成——种子对了,果子才安全
密钥生成是第一步,也是最基础的一步。
说白了,你的密钥强度够不够,从根上取决于两件事:
- 随机数质量——是不是真随机?伪随机风险很大
- 算法强度——用的是什么算法?密钥长度够吗?
我这些年审核过不少公司,发现一个普遍问题:很多团队直接用 rand() 库函数生成密钥。嗯,这在密码学里几乎是自杀行为。
我个人习惯,无论项目多紧,生成环节必须用硬件随机数发生器,或者经过认证的密码学安全伪随机数生成器。
| 生成方式 | 随机性 | 适用场景 | 审计要点 |
|---|---|---|---|
| 硬件真随机(HRNG) | 极高 | 核心根密钥、CA密钥 | 确认HRNG有FIPS 140-2/3认证 |
| 密码学安全伪随机(CSPRNG) | 高 | 会话密钥、临时密钥 | 检查种子熵源是否充足 |
| 库函数rand() | 极低 | 不允许用于密钥生成 | 审计时直接报不合规 |
审计小技巧:我通常会要求查看随机数熵源的抽样报告。如果对方答不上来熵源是什么,这基本就是红牌了。
3.2 密钥分发——最容易出岔子的环节
密钥生成好了,怎么安全地送到使用者手里?
这里我踩过坑。有一次,客户把密钥压缩成zip包,然后通过邮件发出去。密码就用另一个邮件发……你想想看,这跟把钥匙放在门口垫子下有什么区别?
安全分发渠道只有几种,我列一下审计时重点关注的点:
- 带外传输——密钥走一条线路,密码走另一条。物理或网络通道必须隔离
- 公钥加密传输——用接收方的公钥加密对称密钥,再传输
- 密钥协商协议——比如 Diffie-Hellman,双方在线协商,不直接传输密钥本
- 面对面交接——最原始,但有时候最可靠,尤其对于根密钥
避坑指南:我曾经审计过一家金融机构,他们用USB盘传递密钥,但USB盘没加密。这属于典型的物理安全与逻辑安全脱节。记住:载体和内容,至少有一层必须加密。
3.3 密钥存储——别把金子放纸箱里
密钥存储分两个层面:存储位置和存储形式。
存储位置,我建议优先考虑硬件安全模块。说白了吧,用软件存储密钥,不管你怎么加密,终究绕不开内存泄露的风险。
存储形式也有讲究:
- 明文存储——不要。审计时发现必打回
- 加密存储——用密钥加密密钥(KEK)包裹。这是最低要求
- 分片存储——把密钥切成几片,分开放。Shamir密钥分享算法够经典
注意:我曾经遇到一个项目,团队把密钥分片存在同一个数据库的不同表里。这叫什么分片?同一台机器上的一张表跟另一张表,物理上没任何隔离。审计时我直接给了个严重不符合项。
3.4 密钥使用——权限要收得住
密钥被调用了,谁在用?用了几次?用在哪里?
这些都得清清楚楚。
审计密钥使用环节,我一般盯这三个点:
- 最小权限原则——应用只能调它需要的密钥,不能一把密钥通吃所有服务
- 使用审计日志——每次密钥调用都要记录:时间、调用方、操作类型
- 使用配额限制——比如某个密钥一小时内最多被调用1000次,防止滥用
记得有一次,我在客户的生产日志里发现一个密钥被调用了300万次。查下来才发现是某个服务配置出错了,循环调用。嗯,这就是典型的“审计日志救了命”案例。
3.5 密钥备份——为了恢复,但也为了安全
密钥丢了,数据就没了。所以必须备份。
但备份这件事本身又有风险——你备份了密钥,等于又多了一个泄密点。
| 备份方式 | 安全性 | 可恢复性 | 推荐指数 |
|---|---|---|---|
| HSM内备份 | 极高 | 高 | ⭐⭐⭐⭐⭐ |
| 加密后存文件 | 中 | 中 | ⭐⭐⭐ |
| 纸质打印+保险柜 | 高(物理) | 低 | ⭐⭐(仅限根密钥) |
我的个人习惯:备份密钥时,必须同时备份密钥的元数据——算法、生成时间、用途、版本号。否则你备份了一堆比特串,几年后没人知道它是干什么的。
3.6 密钥销毁——善始要善终
密钥到期了,或者被轮换了,旧密钥必须彻底销毁。
销毁不彻底,等于给攻击者留了后门。我见过不少“销毁”是直接把文件删了,但数据还在磁盘上。恢复工具一跑,密钥就回来了。
审计销毁环节,请记住这几点:
- 软件密钥——覆盖写7次(比如DoD 5220.22-M标准)或者直接用安全擦除工具
- 硬件密钥——送入物理粉碎机,或者用电/磁方式烧毁芯片
- 证书废止——如果是公钥基础设施,记得发布CRL或通过OCSP作废
- 销毁证明——这一点容易被忽略。审计时需要看到销毁记录、见证人签名
重点提醒:密钥销毁后,还要检查缓存、日志、dump文件里有没有残留。我曾经在一次灾备演练的磁带备份里找到了三年前就该销毁的密钥。你说这讽刺不讽刺?
3.7 各阶段审计要点速查表
| 阶段 | 核心风险 | 审计检查项 | 常见失误 |
|---|---|---|---|
| 生成 | 随机性不足 | 熵源认证、算法强度 | 用伪随机数而非真随机 |
| 分发 | 传输泄露 | 传输通道加密、带外验证 | 邮件发密钥、密码混传 |
| 存储 | 非授权访问 | HSM/加密存储、访问控制 | 明文存配置文件 |
| 使用 | 滥用、越权 | 访问日志、配额限制 | 无日志、权限过大 |
| 备份 | 备份本身泄露 | 备份加密、元数据记录 | 只备份密钥不备份说明信息 |
| 销毁 | 残留数据恢复 | 覆盖标准、销毁证明 | 只删除文件 |
好了,六个阶段都讲了一遍。每个阶段都有坑,但最关键的其实就两点:
- 不要相信默认配置
- 审计日志要从生跟到死
做到这两点,你的密钥生命周期管理至少及格了。