2. 密钥管理基础:密钥生命周期、密钥类型
做密码学的人都知道一句老话——「算法决定安全的上限,密钥管理决定安全的下限」。HSM 说白了就是一个专门管密钥的硬件黑盒。
今天咱们就把背面的基础打结实。我会先讲密钥的一生,再分类聊聊常见的密钥类型。
2.1 密钥生命周期
密钥从生到死大概经历七个阶段。每个阶段踩过的坑,我几乎都见过。
2.1.1 密钥生成
密钥必须在安全边界内生成。HSM 内部的真随机数发生器(TRNG)是首选。
我遇到过有人直接在应用服务器上用 OpenSSL 生成密钥,然后导入 HSM。这种做法非常危险——密钥在生成的一瞬间已经暴露在内存里。
generateKey() 或类似的 API。生成后私钥永远不出 HSM 边界。
2.1.2 密钥分发与存储
密钥分发常见两种方式:
- 明文分发(不推荐,除非通过安全信道)
- 用密钥加密密钥(KEK)加密后分发
存储时,HSM 会把密钥封装成内部对象,加上属性标签(比如是否可导出)。
我记得有一次审计,发现客户把备份密钥存在 FTP 服务器上,连个加密都没有……这种「保险柜钥匙放门口」的操作可千万别学。
2.1.3 密钥使用
使用阶段主要关注两点:访问控制和用途隔离。
| 属性 | 说明 |
|---|---|
| CKA_DECRYPT | 允许解密 |
| CKA_SIGN | 允许签名 |
| CKA_UNWRAP | 允许导入其他密钥 |
| CKA_EXTRACTABLE | 允许导出(建议设为 false) |
你想想看,如果一个密钥既能签名又能加密,攻击者拿到它就能同时伪造签名和解密数据。所以 最小权限原则 在任何密钥体系里都必须严格执行。
2.1.4 密钥轮换
轮换不是简单地把旧密钥删掉、换个新的。
我建议的做法是:
- 生成新密钥,分配新 ID
- 用新密钥处理新数据,旧密钥只负责解密旧数据
- 过渡期结束后,再撤销旧密钥
这样就算旧密钥出问题,也不会影响所有历史数据。说白了,这是给系统留一条退路。
2.1.5 密钥归档与销毁
归档是为了应对合规审计。很多行业要求密钥销毁后仍保留签名记录的验证链。
销毁分逻辑销毁(删除属性)和物理销毁(拔掉密钥载体)。我曾在项目里要求客户销毁后把 HSM 里的密钥分区重新初始化——光删对象是不够的,攻击者有可能从存储介质恢复残留信息。
2.2 密钥类型
密钥按用途和结构可以分成几个大类。下面这张表我整理过好几次,算是比较实用的参考。
| 类型 | 常见算法 | 典型用途 | 是否可公开 |
|---|---|---|---|
| 对称密钥 | AES, SM4 | 数据加密、通信保护 | 否 |
| 非对称密钥对 | RSA, ECDSA, SM2 | 数字签名、密钥协商 | 公钥可公开 |
| 会话密钥 | AES, ChaCha20 | 临时通信会话 | 否(用完即销毁) |
| 主密钥 / KEK | AES | 加密其他密钥 | 否(高度保护) |
| 根证书密钥 | RSA-4096 | 签发下级证书 | 否(离线存储) |
| 身份认证密钥 | ECDSA | 设备 / 用户身份认证 | 公钥可公开 |
2.2.1 对称密钥 & 非对称密钥
对称密钥速度快,适合加解密大量数据。缺点是分发困难——你要先安全地把密钥送给对方。
非对称密钥解决分发问题,但速度慢,通常只用来签名或加密对称密钥。
实际项目中,我常用混合方案:用 ECDH 协商一个会话密钥,再用 AES 加密正文。这样既安全又高效。
2.2.2 会话密钥
会话密钥是临时性的,一次连接结束后立即销毁。
我建议 HSM 里专门划一个「临时密钥槽」,用完就清零。千万不要把会话密钥写进持久化存储,否则就失去了「临时」的意义。
2.2.3 主密钥与密钥加密密钥
主密钥是整个密钥体系的根。它通常只有一把,用来加密其他所有密钥。
主密钥的生成我建议在 HSM 初始化阶段、在物理安全环境中一次性完成,然后立刻提取指纹(指纹 = HASH(主密钥)),并打印出来放在保险柜里。
为什么要这样做?因为主密钥一旦丢失或损坏,整个系统的密钥全部作废。
2.3 密钥生命周期全景图
下面这张图把上面说的东西串到一起。你可以把它贴到工位前,做设计时对照着看。
2.4 几点实务提醒
第一,永远不要手工输入密钥。 我曾经见过有人为了省事,直接在键盘上敲了一串字符当密钥。这样做出来的密钥熵值极低,分分钟就被暴力破解。
第二,密钥的备份必须加密存储。 加密备份的 KEK 和备份数据必须分开放。如果都放在同一个保险柜里,那就等于自欺欺人。
第三,HSM 日志签名依赖的签名密钥本身也要管理。 它同样要遵循生命周期,同样需要轮换。我见过不少审计失败案例,就因为日志签名密钥用了十年没换过。
- 密钥生成在 HSM 内部完成,私钥不离开安全边界
- 密钥类型按用途选择,对称 + 非对称混合多用
- 生命周期闭环:生成 → 分发 → 使用 → 轮换 → 归档 → 销毁
- 每个阶段都要留下可审计的签名记录
密钥管理说到底就是「管好秘密的产生与消亡」。
接下来我们从密钥生命周期的起点——密钥生成,开始深入细节。