SM9 密钥交换算法深度解析:从 GM/T 0044.3 到身份基密钥协商

算法原理 · 2026-08-14

概述

SM9 密钥交换算法(SM9-IKE)是中国国家密码管理局发布的标识密码标准之一,规范于 GM/T 0044.3-2016《SM9 标识密码算法 第 3 部分:密钥交换协议》。与传统的基于证书的密钥交换(如 SM2 密钥交换)不同,SM9-IKE 允许通信双方直接使用对方身份标识(如邮箱地址、手机号)完成密钥协商,无需依赖 PKI 基础设施。

SM9-IKE 的设计基于 BLS(Boneh-Lynn-Shacham)双线性配对的数学结构,其安全性建立在双线性 Diffie-Hellman(BDH)假设之上。与 Diffie-Hellman 密钥交换相比,SM9-IKE 的核心优势在于:身份即公钥——通信双方无需交换或验证证书,只需确认对方身份标识的正确性即可建立安全会话。

本文将从算法原理、数学推导、参数设计、安全分析和工程实现五个维度,系统阐述 SM9-IKE 的完整技术细节。

数学基础:双线性配对

配对友好曲线

SM9-IKE 定义在特定椭圆曲线上,该曲线需满足以下条件:

  • 素数域 $\mathbb{F}_p$:$p$ 为 256 位素数
  • 曲线方程:$y^2 = x^3 + b$,其中 $b = 5$
  • 嵌入度 $k = 12$:最小的 $k$ 使得 $n | p^k - 1$,其中 $n$ 为子群阶
  • 安全强度:约 128 位
为什么选择嵌入度 12?

嵌入度 $k$ 决定了配对运算的效率与安全性的平衡:

  • $k$ 越小,配对计算越快,但安全性可能降低
  • $k = 12$ 是当前的安全最优选择,在保持 128 位安全强度的同时,配对运算可在合理时间内完成

群结构定义

SM9 定义了三类群,用于密钥交换协议:

群描述阶
$\mathbb{G}_1$椭圆曲线上的点群($\mathbb{F}_p$ 上)$n$
$\mathbb{G}_2$扩域 $\mathbb{F}_{p^{12}}$ 上的点群$n$
$\mathbb{G}_T$乘法子群$n$
生成元:
  • $P_1 \in \mathbb{G}_1$:$\mathbb{G}_1$ 的生成元
  • $P_2 \in \mathbb{G}_2$:$\mathbb{G}_2$ 的生成元

双线性配对

SM9 采用 R-ate 配对(Ate 配对的优化变体):

$$e: \mathbb{G}_1 \times \mathbb{G}_2 \rightarrow \mathbb{G}_T$$

满足以下性质:

  • 双线性:$e([a]P, [b]Q) = e(P, Q)^{ab}$
  • 非退化性:$e(P_1, P_2) \neq 1$
  • 可计算性:存在多项式时间算法计算 $e(P_1, P_2)$
配对的非退化性是 SM9-IKE 正确性的关键——它确保了密钥协商过程中双方能推导出相同的共享密钥。

算法详细流程

系统参数

SM9-IKE 的系统参数如下:

CODE
主密钥: s ∈ Z_n*
主公钥: P_pub = [s]P_2 ∈ G_2

G_1 生成元: P_1
G_2 生成元: P_2
目标群生成元: e(P_1, P_2) ∈ G_T

哈希函数: H1: {0,1}* → Z_n*, H2: G_T → {0,1}^n

身份标识派生

每个用户的身份标识 $ID$ 派生出对应的私钥:

私钥派生(由 KGC 执行):

$$d_{ID} = \frac{1}{H_1(ID) + s} \cdot P_1 \in \mathbb{G}_1$$

其中:

  • $H_1$:哈希函数,输出为 $\mathbb{Z}_n$ 中的元素
  • $s$:KGC 主私钥(保密)
注意:SM9-IKE 的私钥是一个 $\mathbb{G}_1$ 中的点,而非标量。

密钥交换协议

SM9-IKE 采用两步式密钥交换,通信双方需要交换临时公钥后才能完成密钥协商。

#### 发起方 A 的操作

输入:A 的身份 $ID_A$、私钥 $d_A$、B 的身份 $ID_B$

步骤:

  • 采样随机数 $r_A \in_R \mathbb{Z}_n^*$
  • 计算临时公钥 $R_A = [r_A]P_2 \in \mathbb{G}_2$
  • 发送消息 $(R_A, ID_A)$ 给 B
输出:$(R_A, ID_A)$

#### 响应方 B 的操作

输入:B 的身份 $ID_B$、私钥 $d_B$、收到的消息 $(R_A, ID_A)$

步骤:

  • 验证 $R_A \in \mathbb{G}_2$
  • 采样随机数 $r_B \in_R \mathbb{Z}_n^*$
  • 计算临时公钥 $R_B = [r_B]P_2 \in \mathbb{G}_2$
  • 发送消息 $(R_B, ID_B)$ 给 A
输出:$(R_B, ID_B)$

#### 共享密钥计算

A 方计算:

  • 计算 $g_1 = e(R_B, d_A) = e([r_B]P_2, d_A)$
  • 计算 $g_2 = e(P_{pub}, P_1)^{r_A \cdot r_B} = e([s]P_2, [r_A r_B]P_1)$
  • 计算会话密钥:$K = \text{KDF}(ID_A \parallel ID_B \parallel R_A \parallel R_B \parallel g_1 \parallel g_2)$
B 方计算:

  • 计算 $g_1 = e(R_A, d_B) = e([r_A]P_2, d_B)$
  • 计算 $g_2 = e(P_{pub}, P_1)^{r_A \cdot r_B}$
  • 计算会话密钥:$K = \text{KDF}(ID_A \parallel ID_B \parallel R_A \parallel R_B \parallel g_1 \parallel g_2)$
正确性证明:

双方计算出的 $g_1$ 相等:

$$e(R_B, d_A) = e([r_B]P_2, \frac{1}{h_A + s} \cdot P_1) = e(P_2, P_1)^{\frac{r_B}{h_A + s}}$$

$$e(R_A, d_B) = e([r_A]P_2, \frac{1}{h_B + s} \cdot P_1) = e(P_2, P_1)^{\frac{r_A}{h_B + s}}$$

实际上,双方各自计算的 $g_1$ 值可能不同(因为 $d_A$ 和 $d_B$ 使用不同的身份标识),但通过 KDF 中的身份绑定,最终派生的会话密钥相同。

双方计算出的 $g_2$ 相等:

$$g_2 = e(P_{pub}, P_1)^{r_A \cdot r_B} = e([s]P_2, [r_A r_B]P_1) = e(P_2, P_1)^{s \cdot r_A \cdot r_B}$$

#### 密钥派生函数(KDF)

SM9-IKE 使用基于 HMAC 的密钥派生函数:

$$K = \text{KDF}(ID_A \parallel ID_B \parallel R_A \parallel R_B \parallel g_1 \parallel g_2, l)$$

其中:

  • $ID_A, ID_B$:通信双方的身份标识
  • $R_A, R_B$:交换的临时公钥
  • $g_1, g_2$:配对计算结果
  • $l$:所需密钥长度(字节)
为什么要绑定身份标识?

身份绑定防止中间人攻击:如果攻击者替换了通信方的身份标识,双方推导出的密钥将不同,导致通信失败。这是 SM9-IKE 区别于传统 DH 协议的重要安全特性。

与 SM2 密钥交换的对比

架构差异

特性SM2 密钥交换SM9 密钥交换
标准编号GM/T 0003.3-2012GM/T 0044.3-2016
公钥管理需要证书绑定身份即公钥
交互轮次两步交互两步交互
密钥来源证书验证KGC 派生
适用场景PKI 环境轻量级部署

安全性对比

SM2 密钥交换:

  • 基于 ECDH(椭圆曲线 Diffie-Hellman)
  • 安全性基于 ECDLP(椭圆曲线离散对数问题)
  • 需要证书链验证通信方身份
SM9 密钥交换:
  • 基于双线性配对
  • 安全性基于 BDH(Bilinear Diffie-Hellman)假设
  • 身份标识本身作为公钥,需依赖 KGC 的可信度
关键差异:
  • SM2 的安全性不依赖第三方(KGC),但需要证书管理
  • SM9 的安全性依赖 KGC 的完整性——如果 KGC 被攻陷,所有用户私钥均可被推导

安全模型分析

攻击模型

SM9-IKE 的安全目标包括:

  • KEA(密钥交换认证):攻击者无法区分真实会话密钥与随机值
  • 前向安全性:长期私钥泄露不影响历史会话密钥(需配合密钥轮换)
  • 身份匿名性:无法从通信数据推断通信方身份

BDH 假设

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

问题定义: 给定 $(P_1, [a]P_1, [b]P_1, [c]P_1)$ 和 $(P_2, [a]P_2, [b]P_2, [c]P_2)$,计算 $e(P_1, P_2)^{abc}$ 是计算困难的。

安全性断言:在随机预言机模型下,任何有效的 SM9-IKE 攻击者可归约为 BDH 问题的求解器。

已知攻击与防御

攻击类型原理防御措施
时序攻击通过配对运算耗时推断私钥使用常数时间实现
身份猜测攻击暴力枚举身份标识身份标识使用不可预测格式
KGC 内鬼攻击KGC 主动推导用户私钥硬件安全模块(HSM)保护主密钥
中间人攻击替换临时公钥KDF 绑定身份标识和临时公钥

工程实现要点

参数验证

实现 SM9-IKE 时,必须验证以下参数:

  • 曲线参数:$p, a, b$ 满足 $y^2 = x^3 + ax + b$
  • 素数阶:$n | \#E(\mathbb{F}_p)$
  • 嵌入度:$k = 12$ 满足 $n | p^k - 1$ 且 $n \nmid p^j - 1$($j < k$)
  • 点在曲线上:验证所有输入的群元素在对应的曲线群上

常见实现陷阱

陷阱后果防护
未验证点在曲线上侧信道攻击实现点验证函数
身份标识编码不一致密钥推导错误统一 UTF-8 编码
随机数重用隐私泄露使用 CSPRNG
KDF 未绑定身份中间人攻击KDF 输入包含双方身份

国密合规要点

密评要求

根据 GB/T 39786-2021《信息系统密码应用基本要求》,SM9-IKE 的合规要点:

  • 第三级要求:
- 密钥交换应使用符合国密标准的算法 - 密钥材料应使用密码模块保护

  • 密钥管理:
- 主密钥 $s$ 应由硬件密码模块(如服务器密码机)生成和保护 - 用户私钥应在安全环境中派发

  • 身份标识管理:
- 身份标识应唯一且不可伪造 - 建议与数字证书体系结合,实现双重身份验证

与 GM/T 0044 其他部分的配合

SM9-IKE 通常需要与以下标准配合使用:

  • GM/T 0044.1-2016:定义曲线参数
  • GM/T 0044.2-2016:定义签名算法(用于身份认证)
  • GM/T 0044.4-2016:定义加密算法(用于数据加密)

应用场景

物联网设备认证

SM9-IKE 特别适合资源受限的 IoT 设备:

  • 无证书部署:设备无需存储证书,节省存储空间
  • 轻量级计算:配对运算在嵌入式设备上可行
  • 快速连接:两步握手降低连接延迟

车联网 V2X

车辆间安全通信场景:

  • 车辆注册时获取身份标识(如 VIN 码)
  • 通过 SM9-IKE 协商会话密钥
  • 利用 SM9 签名实现消息认证

总结

SM9 密钥交换算法代表了标识密码学的核心成果——将身份直接用作公钥,消除了传统 PKI 的证书管理负担。其两步式密钥交换设计特别适合物联网、车联网等低延迟应用场景。

然而,SM9-IKE 的安全性高度依赖 KGC 的可信度,这在实践中需要通过硬件安全模块(HSM)和多签机制来保障。国密从业者在选择 SM9 方案时,应充分评估 KGC 部署的安全性和合规性要求。

参考

  • GM/T 0044.3-2016《SM9 标识密码算法 第 3 部分:密钥交换协议》
  • GM/T 0044.1-2016《SM9 标识密码算法 第 1 部分:曲线参数》
  • GB/T 39786-2021《信息系统密码应用基本要求》
  • Boneh, D., Lynn, B., Shacham, H. (2001). *Short Signatures from the Weil Pairing*. ASIACRYPT 2001. DOI:10.1007/3-540-45682-3_23