2. 密码学基础与工程约束

在 PKI 与 KMS 一体化架构中,密码学算法不是“可选项”,而是被密钥生命周期、合规基线和性能预算共同约束的工程组件。理解每种原语的能力边界,才能在设计密钥层级、接口和轮换策略时不至于把签名密钥当加密密钥用,或把哈希当完整性保护的全部。

四类原语的分工与工程定位

对称加密(如 AES-256-GCM、SM4-GCM)用同一密钥完成加解密,速度快、适合大数据量,但密钥分发是难点。在 KMS 中,对称密钥通常以“数据密钥”形式出现:KMS 生成明文数据密钥和密文数据密钥,明文只在内存中短暂存在,密文随数据一起落盘。非对称加密(如 RSA-OAEP、SM2)用公钥加密、私钥解密,解决密钥分发问题,但吞吐低,一般只用于封装对称密钥或小数据。哈希(如 SHA-256、SM3)把任意长度输入映射为固定长度摘要,用于完整性校验和指纹,但不提供机密性。数字签名(如 RSA-PSS、ECDSA、SM2 签名)用私钥签名、公钥验签,提供不可否认性,是证书和代码签名的核心。

这四类原语在 KMS 中并非孤立存在,而是通过“密钥派生”和“密钥封装”串联成一条密钥供应链。密钥派生函数(KDF,如 HKDF、PBKDF2、SM3-KDF)从一个高熵根密钥派生出多个用途隔离的子密钥;密钥封装(KEM 或 RSA-KEM)则用非对称公钥把对称密钥安全地传给对方。工程上必须坚持“一密钥一用途”:签名密钥不用于加密,加密密钥不用于派生,派生出的子密钥通过标签(label)和上下文(context)绑定用途,避免跨域复用。

KMS 密钥供应链:从根密钥到数据密钥的派生与封装 根密钥 / 主密钥 HSM 内生成,不可导出 KDF 密钥派生 HKDF / SM3-KDF + label 用途隔离的子密钥 加密子密钥 签名子密钥 MAC 子密钥 日志加密子密钥 数据密钥生成 GenerateDataKey 返回明文 DEK + 密文 DEK 信封加密 明文 DEK 加密业务数据 密文 DEK 随数据存储 持久化存储 密文数据 + 密文 DEK 明文 DEK 立即清零 工程约束三角:性能 · 合规 · 密钥生命周期 性能约束 AES-GCM 吞吐高,适合批量 RSA/ECC 仅用于封装与签名 HSM 调用有 QPS 上限 缓存公钥、避免频繁握手 合规约束 国密场景优先 SM2/SM3/SM4 FIPS 140-2/3 要求 HSM 边界 密钥不得明文出安全模块 审计日志留存周期有要求 生命周期约束 生成→激活→使用→轮换 →停用→归档→销毁 轮换需保留旧密钥解密历史 销毁需可证明、不可恢复

密钥派生与封装的工程细节

密钥派生不是简单地把根密钥做一次哈希。以 HKDF 为例,它分为 Extract 和 Expand 两步:Extract 用盐(salt)把输入密钥材料压缩成固定长度的伪随机密钥(PRK),Expand 再用 PRK、可选上下文(info)和长度参数派生出目标密钥。工程上必须把“用途标签”放进 info 参数,例如 info = "encryption-key-v1" 与 info = "signing-key-v1" 派生出的密钥完全不同,即使根密钥相同。这样即使某个子密钥泄露,也无法推导出其他用途的密钥。

密钥封装则解决“如何把对称密钥安全地交给对方”。RSA-KEM 的做法是:发送方生成随机对称密钥 K,用接收方公钥加密 K 得到密文 C,把 C 和用 K 加密的数据一起发送;接收方用私钥解出 K,再解密数据。相比直接 RSA 加密数据,KEM 只加密短密钥,性能更好,也避免了 RSA 填充模式选择不当带来的风险。在国密场景中,SM2 的密钥封装与 SM4 数据加密组合,构成完整的信封加密链路。

性能、合规与生命周期的三角约束

性能约束最直接的体现是算法选择与调用频率。AES-256-GCM 在现代 CPU 上有硬件加速,吞吐可达 GB/s 级;而 RSA-2048 私钥解密一次约几毫秒,HSM 中可能更慢。因此 KMS 设计上应把非对称操作限制在“密钥封装”和“签名”两类低频场景,大数据加密一律走对称密钥。同时,KMS 应缓存公钥和证书,避免每次验签都回源查询。

合规约束决定了算法套件和密钥存储边界。如果业务面向国内金融或政务,SM2/SM3/SM4 是优先选项;如果面向国际或需要 FIPS 认证,则 AES、SHA-2、RSA/ECDSA 是基线。无论哪种,密钥都不得以明文形式离开 HSM 或安全模块,KMS 对外只暴露“使用密钥”的接口,而不是“导出密钥”的接口。

密钥生命周期约束则要求 KMS 把“生成、激活、使用、轮换、停用、归档、销毁”作为一等状态机来管理。轮换时不能直接删除旧密钥,因为历史数据仍需要旧密钥解密;正确做法是保留旧密钥为“解密专用”状态,新数据用新密钥加密。销毁则必须可证明、不可恢复,通常通过 HSM 的密钥销毁指令完成,并记录审计日志。

工程实践中,建议把“一密钥一用途”作为硬性检查项:在 KMS 的密钥元数据中记录 key_usage 字段(如 ENCRYPT_DECRYPT、SIGN_VERIFY、DERIVE),任何跨用途调用直接拒绝。这比事后审计更有效。

一个可参考的密钥策略示例

以下是一份简化的密钥策略表,用于说明如何把算法、用途、生命周期和合规要求绑定在一起。示例参数为教学假设,实际部署需根据业务量和合规基线调整。

密钥类型 算法 用途 轮换周期 存储边界
根密钥 AES-256 / SM4 派生 不轮换(离线备份) HSM 内,不可导出
数据加密密钥 AES-256-GCM / SM4-GCM 加密解密 90 天或每 2^32 次调用 明文仅内存,密文落盘
签名密钥 ECDSA P-256 / SM2 签名验签 1 年 私钥 HSM 内,公钥可导出
日志加密密钥 AES-256-GCM 加密 180 天 HSM 内,审计可查

这张表的关键在于:轮换周期不是拍脑袋定的,而是由算法安全边界(如 GCM 的调用次数上限)和合规要求共同决定。数据加密密钥轮换后,旧密钥进入“仅解密”状态,保留至少一个数据保留周期;签名密钥轮换后,旧公钥仍需保留用于验证历史签名。只有把算法、用途、生命周期和存储边界四者对齐,PKI 与 KMS 的一体化架构才具备可审计、可轮换、可恢复的工程基础。