SM9 标识密码实战:无证书加密与身份认证部署

国密算法 · 2026-06-03 · 28 阅读

前言

传统 PKI 体系需要 CA 签发证书来绑定"身份"和"公钥",证书管理(申请、签发、吊销、续期)是整个体系中最繁琐的环节。SM9 标识密码算法提供了一种完全不同的思路:用身份本身作为公钥,无需证书。

SM9 是国家密码管理局发布的标识密码算法标准,基于双线性对(Bilinear Pairing)数学构造。它包含三个核心协议:

  • IBE(Identity-Based Encryption):基于身份的加密
  • IBS(Identity-Based Signature):基于身份的签名
  • IBA(Identity-Based Authenticated Key Exchange):基于身份的认证密钥协商
本文从原理到实战,完整覆盖 SM9 的部署和应用。

一、SM9 的核心思想

1.1 从 PKI 到 IBE

传统 PKI 的公钥分发问题:

Alice 要给 Bob 发加密消息,需要:

  • 从 CA 获取 Bob 的证书
  • 验证证书链(签名、有效期、吊销状态)
  • 提取证书中的公钥
  • 用公钥加密
SM9 的简化:

Alice 只需要知道 Bob 的标识(如邮箱 bob@example.com),就可以直接加密。

CODE
PKI:  明文 → 获取证书 → 验证证书 → 提取公钥 → 加密
SM9:  明文 → 用标识加密

1.2 系统架构

KGC 是 SM9 的核心组件,负责:

  • 生成系统主密钥
  • 根据用户标识生成用户私钥
  • 公开系统参数

1.3 安全假设

SM9 的安全性基于双线性 Diffie-Hellman(BDH)假设

给定 P, aP, bP, cP(其中 a, b, c 是秘密值),计算 ê(P, P)^(abc) 是计算不可行的。

这与 SM2 基于的椭圆曲线离散对数问题(ECDLP)不同,但同样被认为在经典计算模型下是安全的。

二、数学基础(简要)

2.1 双线性对

SM9 定义在椭圆曲线的循环子群上,使用 Weil 对或 Tate 对构造双线性映射:

CODE
ê: G₁ × G₂ → G_T

其中 G₁ 和 G₂ 是椭圆曲线上的加法循环群,G_T 是乘法循环群。双线性性质:

CODE
ê(aP, bQ) = ê(P, Q)^(ab) = ê(bP, aQ)

2.2 系统参数

参数说明大小
p有限域素数256 位
E(F_p)椭圆曲线方程 y² = x³ + b-
N基点 P 的阶(素数)256 位
P₁G₁ 的生成元(F_p 上)512 位
P₂G₂ 的生成元(F_p² 上)1024 位
sKGC 主密钥(秘密)256 位
P_pub = s·P₂KGC 公钥(公开)1024 位

三、SM9 三个核心协议

3.1 SM9 数字签名(IBS)

签名者用 KGC 颁发的私钥 d_A 签名,验证者用签名者的标识(如邮箱)直接验证。

签名过程:

CODE
输入:消息 M,签名者私钥 d_A
1. 计算 g = ê(P_pub, P₁)^w  (w 是随机数派生)
2. 计算 r = H(M || w) mod N
3. 输出签名 (r, S),其中 S = d_A · (1/(r + s)) 的哈希

验证过程:

CODE
输入:消息 M,签名 (r, S),签名者标识 ID_A
1. 计算 h = H(ID_A || hid) mod N
2. 计算 P = [h]P₂ + P_pub
3. 验证 ê(S, P) · ê(P_pub, P₁)^r 是否等于 w

3.2 SM9 加密(IBE)

加密者用接收方标识加密,接收方用 KGC 颁发的私钥解密。

加密过程:

CODE
输入:明文 M,接收方标识 ID_B
1. 计算 h = H(ID_B || hid) mod N
2. 计算 Q_B = [h]P₁ + P_pub  (接收方公钥)
3. 选择随机数 r
4. 计算 C₁ = [r]Q_B
5. 计算 g = ê(Q_B, P_pub)^r
6. 计算 C₂ = M ⊕ H(g || C₁)
7. 输出密文 (C₁, C₂)

解密过程:

CODE
输入:密文 (C₁, C₂),接收方私钥 d_B
1. 计算 w = ê(C₁, d_B)
2. 计算 M = C₂ ⊕ H(w || C₁)
3. 输出明文 M

3.3 SM9 密钥协商(IBA)

双方通过标识协商共享密钥,无需证书交换。

四、KGC 密钥生成中心搭建

4.1 环境准备

BASH
# 安装依赖
pip install gmssl charm-crypto

# 或使用纯 Python 实现(仅用于学习)
pip install py-pairing

4.2 KGC 初始化

4.3 KGC 的安全要求

KGC 是整个 SM9 体系中最关键的安全节点:

五、SM9 签名和加密 Python 实现

5.1 基于 gmssl 的 SM9 签名

5.2 SM9 加密通信

5.3 SM9 密钥协商

六、SM9 vs PKI 对比分析

6.1 核心差异

维度PKI(SM2 证书)SM9 标识密码
公钥随机生成的椭圆曲线点用户标识(邮箱、手机号等)
公钥绑定需要 CA 证书天然绑定,无需证书
证书管理需要完整的 CA 体系不需要证书
吊销CRL/OCSPKGC 停止为用户生成新私钥
密钥托管不存在KGC 知道所有用户私钥
信任模型树状信任(根 CA → 中间 CA → 用户)星状信任(KGC → 用户)
标准GM/T 0003-2012, GM/T 0015-2023GM/T 0044-2016
计算开销较低(ECDLP)较高(双线性对运算)

6.2 SM9 的优势

  • 零证书管理:不需要 CA、证书签发、证书吊销等繁琐流程
  • 天然的身份绑定:公钥就是身份,不存在"证书中的身份是否真实"的问题
  • 适合封闭体系:企业内部、政府专网等 KGC 可控的场景
  • 支持离线加密:Alice 不需要在线获取 Bob 的证书就能加密

6.3 SM9 的劣势

  • 密钥托管问题:KGC 知道所有用户的私钥,这在某些场景下是不可接受的
  • KGC 单点故障:KGC 被攻破意味着整个体系的私钥泄露
  • 撤销困难:要撤销用户只能更改其标识或停止 KGC 服务
  • 计算开销大:双线性对运算比 ECDLP 慢约 10-100 倍
  • 互操作性差:SM9 是国密特有算法,国际互通困难

6.4 适用场景

SM9 适合:

  • 企业内部邮件加密(用邮箱作为标识)
  • 政府专网中的身份认证
  • IoT 设备认证(用设备 ID 作为标识)
  • 需要简化证书管理的封闭系统
PKI 适合:
  • 互联网公开服务(HTTPS)
  • 跨组织互信场景
  • 需要不可否认性的场景(数字签名)
  • 对 KGC 托管不信任的场景

七、生产部署建议

7.1 混合架构

在实际生产中,可以考虑 PKI + SM9 的混合架构:

CODE
对外服务(HTTPS)→ PKI/SM2 证书
内部通信(邮件、文件加密)→ SM9 标识密码
IoT 设备认证 → SM9 标识密码
跨组织互信 → PKI/SM2 证书

7.2 KGC 部署架构

CODE
┌─────────────────────────────────────────┐
│              KGC 集群                     │
│                                         │
│  ┌──────────┐    ┌──────────┐           │
│  │ KGC 主节点 │◄──►│ KGC 备节点 │          │
│  │ (HSM)    │    │ (HSM)    │          │
│  └──────────┘    └──────────┘           │
│       │                                  │
│       ▼                                  │
│  私钥分发 API                            │
│  (mTLS + 审计日志)                       │
└─────────────────────────────────────────┘

7.3 密钥轮换策略

虽然 SM9 的主密钥不像 PKI 证书那样有明确的有效期,但建议:

  • 主密钥轮换周期:3-5 年
  • 轮换方式:生成新主密钥后,为所有用户重新生成私钥
  • 过渡期:新旧系统并行运行 6 个月
  • 用户私钥分发:使用安全信道,记录完整审计日志

总结

SM9 标识密码是一种优雅的密码学方案,它用"身份即公钥"的思想消除了证书管理的复杂性。在封闭体系(企业内部、政府专网)中,SM9 可以大幅简化密钥管理流程。

但 SM9 不是 PKI 的替代品,而是互补品。密钥托管、撤销困难和计算开销这三个问题,使得 SM9 不太适合开放互联网场景。

在实际部署中,建议根据具体场景选择:开放互联网用 PKI/SM2,封闭内网用 SM9,跨域互信用 PKI/SM2。混合架构是当前最务实的选择。

参考来源

  • 国家密码管理局. GM/T 0044-2016《SM3 密码杂凑算法》. 2016.
  • 国家密码管理局. GM/T 0003-2012《SM2 椭圆曲线公钥密码算法》. 2012.
  • 国家密码管理局. GM/T 0015-2023《数字证书格式》. 2023.
  • GB/T 39786-2021《信息安全技术 信息系统密码应用基本要求》. 2021.
  • Boneh D., Franklin M. Identity-Based Encryption from the Weil Pairing. CRYPTO 2001.