SM9 密钥交换算法深度解析:从 GM/T 0044.3 到身份基密钥协商
概述
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 位
嵌入度 $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 的系统参数如下:
主密钥: 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 采用两步式密钥交换,通信双方需要交换临时公钥后才能完成密钥协商。
#### 发起方 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
#### 响应方 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
#### 共享密钥计算
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)$
- 计算 $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-2012 | GM/T 0044.3-2016 |
| 公钥管理 | 需要证书绑定 | 身份即公钥 |
| 交互轮次 | 两步交互 | 两步交互 |
| 密钥来源 | 证书验证 | KGC 派生 |
| 适用场景 | PKI 环境 | 轻量级部署 |
安全性对比
SM2 密钥交换:
- 基于 ECDH(椭圆曲线 Diffie-Hellman)
- 安全性基于 ECDLP(椭圆曲线离散对数问题)
- 需要证书链验证通信方身份
- 基于双线性配对
- 安全性基于 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 的合规要点:
- 第三级要求:
- 密钥管理:
- 身份标识管理:
与 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