2. 密钥管理基础:密钥生命周期、密钥类型

做密码学的人都知道一句老话——「算法决定安全的上限,密钥管理决定安全的下限」。HSM 说白了就是一个专门管密钥的硬件黑盒。
今天咱们就把背面的基础打结实。我会先讲密钥的一生,再分类聊聊常见的密钥类型。

2.1 密钥生命周期

密钥从生到死大概经历七个阶段。每个阶段踩过的坑,我几乎都见过。

2.1.1 密钥生成

密钥必须在安全边界内生成。HSM 内部的真随机数发生器(TRNG)是首选。
我遇到过有人直接在应用服务器上用 OpenSSL 生成密钥,然后导入 HSM。这种做法非常危险——密钥在生成的一瞬间已经暴露在内存里。

建议: 密钥生成尽量在 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 密钥轮换

轮换不是简单地把旧密钥删掉、换个新的。
我建议的做法是:

  1. 生成新密钥,分配新 ID
  2. 用新密钥处理新数据,旧密钥只负责解密旧数据
  3. 过渡期结束后,再撤销旧密钥

这样就算旧密钥出问题,也不会影响所有历史数据。说白了,这是给系统留一条退路。

2.1.5 密钥归档与销毁

归档是为了应对合规审计。很多行业要求密钥销毁后仍保留签名记录的验证链。
销毁分逻辑销毁(删除属性)和物理销毁(拔掉密钥载体)。我曾在项目里要求客户销毁后把 HSM 里的密钥分区重新初始化——光删对象是不够的,攻击者有可能从存储介质恢复残留信息。

注意: 密钥销毁前务必确认所有依赖该密钥的加密数据已被解封或重新加密。否则数据永久丢失。

2.2 密钥类型

密钥按用途和结构可以分成几个大类。下面这张表我整理过好几次,算是比较实用的参考。

类型 常见算法 典型用途 是否可公开
对称密钥AES, SM4数据加密、通信保护否
非对称密钥对RSA, ECDSA, SM2数字签名、密钥协商公钥可公开
会话密钥AES, ChaCha20临时通信会话否(用完即销毁)
主密钥 / KEKAES加密其他密钥否(高度保护)
根证书密钥RSA-4096签发下级证书否(离线存储)
身份认证密钥ECDSA设备 / 用户身份认证公钥可公开

2.2.1 对称密钥 & 非对称密钥

对称密钥速度快,适合加解密大量数据。缺点是分发困难——你要先安全地把密钥送给对方。
非对称密钥解决分发问题,但速度慢,通常只用来签名或加密对称密钥。
实际项目中,我常用混合方案:用 ECDH 协商一个会话密钥,再用 AES 加密正文。这样既安全又高效。

2.2.2 会话密钥

会话密钥是临时性的,一次连接结束后立即销毁。
我建议 HSM 里专门划一个「临时密钥槽」,用完就清零。千万不要把会话密钥写进持久化存储,否则就失去了「临时」的意义。

2.2.3 主密钥与密钥加密密钥

主密钥是整个密钥体系的根。它通常只有一把,用来加密其他所有密钥。
主密钥的生成我建议在 HSM 初始化阶段、在物理安全环境中一次性完成,然后立刻提取指纹(指纹 = HASH(主密钥)),并打印出来放在保险柜里。
为什么要这样做?因为主密钥一旦丢失或损坏,整个系统的密钥全部作废。

2.3 密钥生命周期全景图

下面这张图把上面说的东西串到一起。你可以把它贴到工位前,做设计时对照着看。

密钥生命周期全景图 ① 密钥生成 ② 密钥分发 ③ 密钥使用 ④ 密钥轮换 ⑤ 密钥归档 ⑥ 密钥销毁 HSM 安全边界 (私钥永不离开) 说明: 每个阶段都需要记录审计日志,HSM 用签名密钥对日志做不可否认性签名。 销毁阶段必须包括逻辑删除和物理清零,否则可能留下侧信道风险。

2.4 几点实务提醒

第一,永远不要手工输入密钥。 我曾经见过有人为了省事,直接在键盘上敲了一串字符当密钥。这样做出来的密钥熵值极低,分分钟就被暴力破解。

第二,密钥的备份必须加密存储。 加密备份的 KEK 和备份数据必须分开放。如果都放在同一个保险柜里,那就等于自欺欺人。

第三,HSM 日志签名依赖的签名密钥本身也要管理。 它同样要遵循生命周期,同样需要轮换。我见过不少审计失败案例,就因为日志签名密钥用了十年没换过。

核心记忆点:
  • 密钥生成在 HSM 内部完成,私钥不离开安全边界
  • 密钥类型按用途选择,对称 + 非对称混合多用
  • 生命周期闭环:生成 → 分发 → 使用 → 轮换 → 归档 → 销毁
  • 每个阶段都要留下可审计的签名记录

密钥管理说到底就是「管好秘密的产生与消亡」。
接下来我们从密钥生命周期的起点——密钥生成,开始深入细节。