1.3 公钥密码:密钥协商、签名与后量子迁移
公钥密码不是“更强但更慢的对称加密”。它主要解决三类问题:在开放网络上建立共享秘密、验证签名,以及让不知道共享密钥的发送方为接收方封装密钥。
三种用途必须分开
Key agreement:双方输入各自秘密与对方公开材料 → 建立共享秘密
Signature:私钥签名,公钥验证 → 认证来源与完整性
KEM/Encryption:使用接收方公钥封装秘密 → 私钥解封“用私钥加密、公钥解密就是签名”是危险类比。真实签名协议会对消息做域分离、编码和哈希,并满足专门的不可伪造安全定义。应调用 Ed25519、ECDSA、RSA-PSS 或标准协议的签名 API,而不是直接执行底层 RSA 运算。
同一密钥也不应同时用于签名和解密。用途隔离可以缩小暴露面,避免跨协议攻击,并让证书 keyUsage、密钥权限和轮换策略保持清晰。
密钥协商还需要身份认证
裸 Diffie–Hellman/ECDH 可以抵抗被动窃听,却不能自动阻止中间人分别与两端协商两个密钥。TLS 会把临时密钥交换、证书身份和握手 transcript 绑定起来。
使用 ephemeral key agreement 还能获得 forward secrecy:长期证书私钥将来泄露,不应让攻击者解密此前录下的会话。前向保密不是永久安全;端点内存、会话 ticket key 和应用明文本身仍可能泄露。
大数据通常使用混合加密
公钥操作不适合直接加密任意长度文件。现代方案先通过 KEM 或密钥协商得到共享秘密,再经 KDF 派生对称密钥,最后用 AEAD 加密数据:
recipient public key
│ KEM encapsulation
▼
shared secret → KDF → AEAD key → encrypt plaintext
│
└── encapsulated key 与 ciphertext 一起发送HPKE(RFC 9180)给出了 KEM、KDF 与 AEAD 的标准组合和上下文绑定。它仍需要正确选择模式、身份认证和消息序列;base mode 只保护给接收方的机密性,不自动证明发送方是谁。
签名验证的是字节与上下文
签名前必须定义规范化表示,否则两个系统可能对“同一业务对象”得到不同字节。安全协议还应绑定:协议名、版本、消息类型、租户/环境和有效期,防止签名被搬到另一个用途。
验证流程不能只调用 verify(signature, payload):还要确认公钥来自哪个信任关系、算法是否允许、key ID 是否仍有效、消息是否过期、nonce 是否已使用,以及授权决策是否允许该主体执行动作。
签名私钥的保护等级取决于故障半径。软件发布根密钥、证书 CA 和高价值交易密钥通常应使用 HSM、离线层级、双人控制或阈值方案;短期服务签名密钥可以在线,但应最小权限、快速轮换并保留审计。
后量子密码已经进入迁移阶段
大规模容错量子计算机何时出现并不确定,但“现在收集密文,未来解密”让长期保密数据需要提前行动。NIST 已在 2024 年发布:
- FIPS 203:ML-KEM,用于建立共享秘密;
- FIPS 204:ML-DSA,通用后量子数字签名;
- FIPS 205:SLH-DSA,基于哈希的无状态签名。
KEM 与签名不能互换。ML-KEM 不是给任意明文直接加密的 API,ML-DSA 也不是密钥协商协议。
迁移不等于今天把所有 ECC/RSA 字符串替换掉。首先做 crypto inventory:
协议/数据 → 算法 → 密钥位置 → 证书/格式 → 依赖库
→ 保密期限 → 互操作对象 → 升级负责人然后让协议和数据格式支持算法敏捷,评估更大的公钥、密文和签名对 MTU、握手、证书、HSM、固件与日志的影响。部署 hybrid 方案时必须采用标准化组合,确保攻击者不能降级到单一弱分量;自行拼接“经典密钥 + PQ 密钥”没有自动安全保证。
FIPS 标准仍可能发布勘误和后续指导,库实现也处于快速成熟期。生产选型应跟随协议生态和合规要求,使用互操作测试与已审查实现,而不是自己实现格密码。
选择原语前的清单
- 目标是密钥协商、签名、KEM,还是数据 AEAD?
- 谁认证谁,身份材料来自哪里?
- 是否需要前向保密和抗重放?
- 密钥是否按用途、环境和租户隔离?
- 签名是否绑定协议上下文并使用规范化编码?
- 算法和格式能否在不中断历史数据的情况下升级?
- 长期保密期限是否要求现在开始 PQC 迁移?
下一章把公钥与真实身份连接起来:证书链、服务名校验、TLS 握手和自动轮换。
参考资料
- RFC 9180, Hybrid Public Key Encryption
- NIST, FIPS 203: ML-KEM
- NIST, Post-Quantum Cryptography Publications
- RFC 9958, Post-Quantum Cryptography for Engineers