无证书与隐式证书PKI范式:GM/T 0130-2013 国密解读

算法原理 · 2026-08-29

概述

传统公钥基础设施(PKI)依赖证书链建立信任——用户 A 信任根 CA,根 CA 签发子 CA,子 CA 再签发用户证书。这个链条的每个环节都需要验证,且必须存储完整的证书链才能完成验证。

核心问题:能否绕过证书链,直接通过身份标识验证用户身份?

无证书公钥密码(CL-PKC)和隐式证书是两种回答这个问题的技术路线。它们的目标一致——消除证书链依赖——但实现方式截然不同。

  • 无证书方案(Al-Riyami-Paterson, 2002):用户自己生成私钥,Key Center 仅提供辅助信息,不存在密钥托管问题
  • 隐式证书(Garlock等, 1995):证书不传输,验证方通过公开参数推导证书内容
两者各有优劣。国密标准 GM/T 0130-2013《密码应用标识规范》 选择了隐式证书路线,但其实际标准化过程远比"选了一条路"复杂。

无证书公钥密码(CL-PKC)

设计动机

传统 PKI 有两个根本性问题:

  • 证书管理开销大:证书链验证需要存储和传输大量证书数据
  • 密钥托管风险:基于身份的加密(IBE)中,密钥生成中心(KGC)掌握用户全私钥,存在单点信任风险
CL-PKC 的核心思想是解耦身份与密钥生成:

  • KGC 知道用户的部分私钥(部分托管),但无法单独解密消息
  • 用户自己生成另一部分私钥(自主控制)
  • 最终私钥 = KGC 提供部分 + 用户自生成部分
这种设计既避免了 IBE 的密钥托管问题,又消除了传统 PKI 的证书链验证开销。

数学构造

设椭圆曲线参数为 $(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})$
Extract(KGC 为用户 U 执行):
  • 接收用户身份 ID_U
  • 计算 $Q_U = H_1(\text{ID}_U)$
  • 生成部分私钥 $d_{U_{partial}} = sQ_U$
  • 将 $d_{U_{partial}}$ 安全分发给 U
Set-Private-Key(用户 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$
这种分类确保了即使 KGC 被攻破(Type II),只要用户保持 $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)

标准定义的隐式证书格式包含以下字段:

CODE
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.