无证书与隐式证书PKI范式:GM/T 0130-2013 国密解读
概述
传统公钥基础设施(PKI)依赖证书链建立信任——用户 A 信任根 CA,根 CA 签发子 CA,子 CA 再签发用户证书。这个链条的每个环节都需要验证,且必须存储完整的证书链才能完成验证。
核心问题:能否绕过证书链,直接通过身份标识验证用户身份?
无证书公钥密码(CL-PKC)和隐式证书是两种回答这个问题的技术路线。它们的目标一致——消除证书链依赖——但实现方式截然不同。
- 无证书方案(Al-Riyami-Paterson, 2002):用户自己生成私钥,Key Center 仅提供辅助信息,不存在密钥托管问题
- 隐式证书(Garlock等, 1995):证书不传输,验证方通过公开参数推导证书内容
无证书公钥密码(CL-PKC)
设计动机
传统 PKI 有两个根本性问题:
- 证书管理开销大:证书链验证需要存储和传输大量证书数据
- 密钥托管风险:基于身份的加密(IBE)中,密钥生成中心(KGC)掌握用户全私钥,存在单点信任风险
- KGC 知道用户的部分私钥(部分托管),但无法单独解密消息
- 用户自己生成另一部分私钥(自主控制)
- 最终私钥 = KGC 提供部分 + 用户自生成部分
数学构造
设椭圆曲线参数为 $(E, \mathbb{F}_q, n, G)$,哈希函数 $H_1: \{0,1\}^* \to \mathbb{Z}_n^*$。
Setup(KGC 执行):
- 选择秘密值 $s \in \mathbb{Z}_n^*$
- 计算主密钥 $P_{pub} = sG$
- 发布系统参数 $\text{params} = (E, \mathbb{F}_q, n, G, H_1, P, P_{pub})$
- 接收用户身份 ID_U
- 计算 $Q_U = H_1(\text{ID}_U)$
- 生成部分私钥 $d_{U_{partial}} = sQ_U$
- 将 $d_{U_{partial}}$ 安全分发给 U
- 随机选择 $x_U \in \mathbb{Z}_n^*$
- 计算用户私钥 $d_U = d_{U_{partial}} + x_U Q_U$
- 计算公钥 $Y_U = x_U G$
- KGC 知道 $d_{U_{partial}}$,但不知道 $x_U$
- 用户知道 $x_U$,但不知道 $s$
- 双方合作才能构造完整私钥 $d_U$
- 没有 KGC 参与,用户无法伪造他人身份(因为 $d_{U_{partial}}$ 需要 KGC 的主密钥 $s$)
安全模型
CL-PKC 的安全性定义在 eCK 安全模型(Extended Canetti-Krawczyk)下证明:
| 攻击者类型 | 能力 |
|---|---|
| Type I(外部攻击者) | 无 KGC 主密钥,但可替换用户公钥 |
| Type II(恶意 KGC) | 持有主密钥 $s$,但不能获取用户的自主私钥 $x_U$ |
隐式证书(Implicit Certificate)
设计动机
隐式证书由 Garlock、Kravitz 和 Goldwasser 于 1995 年提出,核心思想是证书不传输,直接推导。
传统证书包含:用户身份、公钥、有效期、CA 签名。隐式证书只传输 CA 签名,用户公钥从签名和其他公开参数中推导出来。
数学构造
设椭圆曲线参数同前,CA 的主密钥对为 $(s, P_{pub} = sG)$。
证书生成(CA 对用户 U 执行):
- 用户生成临时密钥对 $(r, R = rG)$
- CA 计算隐式证书 $C_U = (r + s \cdot H(R \| \text{ID}_U)) \mod n$
- CA 返回 $(C_U, R)$ 给用户
- 计算用户公钥 $Y_U = C_U \cdot G + H(R \| \text{ID}_U) \cdot P_{pub}$
- 验证 $Y_U = R$(或等价条件)
- 若验证通过,$Y_U$ 即为 U 的有效公钥
- CA 签名 $C_U$ 隐含了公钥信息
- 验证方不需要接收完整证书,只需接收 $(C_U, R)$ 即可推导出公钥
- 公钥验证与证书验证合并为一个数学等式
与显式证书对比
| 特性 | 显式证书 | 隐式证书 |
|---|---|---|
| 证书大小 | 数百字节 | 数十字节(仅签名) |
| 公钥获取 | 从证书中提取 | 从签名推导 |
| 信任模型 | 证书链验证 | 直接信任 CA 签名 |
| 适用场景 | 通用 PKI | 资源受限环境 |
GM/T 0130-2013 标准解读
标准定位
GM/T 0130-2013《密码应用标识规范》 是中国国家密码管理局发布的密码应用标识标准,定义了国密算法体系中的标识符(OID)编码规则。
该标准虽然名为"标识规范",但实际上包含了隐式证书的构造方法,为国密 SM9 标识密码系统提供了标准化支持。
隐式证书构造(GM/T 0130 §5)
标准定义的隐式证书格式包含以下字段:
ImplicitCertificate ::= SEQUENCE {
version INTEGER {v1(1)},
issuer Name, -- CA 身份信息
serialNumber CertificateSerialNumber, -- 证书序列号
validity Validity, -- 有效期
userInfo UserInfo, -- 用户标识
signature SignedValue -- CA 签名值
}其中 signature 字段即为上述数学构造中的 $C_U$,包含隐式公钥信息。
与 SM9 的关系
SM9 标识密码标准(GM/T 0044)定义了基于身份的加密和签名方案,但未规定隐式证书的具体构造。GM/T 0130 填补了这一空白,为 SM9 系统的证书管理提供了标准化接口。
注意:SM9 实际标准化过程中,隐式证书的选取经历了多次讨论。最终 SM9 采用无证书方案而非隐式证书方案,原因是隐式证书在跨域互操作场景下的局限性。
两种范式的工程对比
适用场景分析
| 场景 | 推荐方案 | 理由 |
|---|---|---|
| IoT 设备轻量认证 | 隐式证书 | 证书小,传输开销低 |
| 大规模用户系统 | 无证书 | 避免 KGC 单点故障 |
| 跨域互操作 | 无证书 | OID 兼容性好 |
| 移动端应用 | 隐式证书 | 减少网络传输 |
| 国密合规系统 | GM/T 0130 | 符合国家标准要求 |
性能特征
| 指标 | 无证书 | 隐式证书 |
|---|---|---|
| 证书大小 | 中等(含辅助信息) | 小(仅签名) |
| 验证计算量 | 中等(1次配对运算) | 低(无配对运算) |
| KGC 负载 | 低(仅 Extract) | 高(每次签名) |
| 密钥更新 | 简单 | 复杂(需重新协商) |
未来展望
SM9 标准化的启示
SM9 最终采用无证书而非隐式证书路线,反映了工程实践中的权衡:
- 隐式证书的优势在理论上是明显的(小证书、快速验证)
- 隐式证书的劣势在实际部署中逐渐显现(跨域问题、密钥更新困难)
- 无证书方案虽然在某些方面更复杂,但具有更好的可扩展性和互操作性
国密标准的演进方向
GM/T 0130 的发布为国密隐式证书应用提供了标准依据。未来可能的演进方向包括:
- 与 GB/T 33560-2017(密码应用标识)的深度融合
- 在物联网、车联网等新兴场景中的应用扩展
- 与国际标准(如 X.509 v3 隐式证书扩展)的互操作研究
参考
- SM9 标识密码算法
- 国密 TLS 协议
- PKI 信任链原理
- GM/T 0130-2013《密码应用标识规范》
- Al-Riyami S, Paterson K. Certificate-less public key cryptography[C]//International Conference on the Theory and Application of Cryptology and Information Security. Springer, Berlin, Heidelberg, 2002: 456-473.
- Garlock J, Kravitz V, Goldwasser S. Implicit certificates[C]//Workshop on the Theory and Application of of Cryptographic Techniques. Springer, Berlin, Heidelberg, 1995: 8-14.