国密SM9标识密码在工业边缘计算中的身份认证协议
概述
工业物联网(IIoT)的快速发展使得边缘计算成为工业数字化转型的核心架构。在边缘计算场景中,边缘服务器负责处理和智能决策,而海量智能设备(智能机器人、机械臂、摄像机等)负责数据采集和执行。这些设备之间的身份认证是保障工业系统安全的第一道防线。
传统的基于公钥证书的身份认证方案(如TLS/SSL)需要复杂的证书传输和管理,对资源受限的工业边缘设备带来难以承受的开销。国密SM9标识密码算法(GM/T 0044-2016)作为基于身份的身份基密码体系(Identity-Based Cryptography, IBC)的典型代表,无需申请和交换证书即可实现身份认证,特别适合工业边缘计算场景。
本文基于GM/T 0044-2016《SM9标识密码算法》标准,结合工业边缘计算的实际需求,系统解析SM9身份认证协议的数学原理、标准协议流程、安全性分析和工程实现。
系统架构
参与方
SM9工业边缘计算身份认证方案包含三类参与方:
- 密钥管理中心(KGS/Key Generation Center):高安全性和可信度的实体,负责生成系统主密钥对,以及为每个设备生成和分发私钥。在工业场景中,KGS通常部署在企业数据中心或云端。
- 边缘服务器(Edge Server):具有较强的计算和存储能力,负责处理和分析来自智能设备的海量数据,运行机器学习模型进行智能决策。边缘服务器同时也是认证验证方,负责验证智能设备的接入请求。
- 智能设备(Smart Device):工业现场的数据采集终端和执行终端,如智能机器人、智能机械臂和智能摄像机等。设备资源受限(计算能力、存储空间、能耗),因此需要轻量级的认证方案。
数学原理
双线性对基础
SM9算法基于配对友好椭圆曲线,涉及以下数学结构:
- G1:素数阶N的加法循环群,生成元为P1(定义在素数域Fp上)
- G2:素数阶N的加法循环群,生成元为P2(定义在扩域Fp²上)
- GT:素数阶N的乘法循环群
- e: G1 × G2 → GT:双线性对映射(Weil对或Tate对的变种)
- 双线性:e(aP, bQ) = e(P, Q)^ab,其中a,b ∈ Z_N,P ∈ G1,Q ∈ G2
- 非退化性:e(P1, P2) ≠ 1_GT
- 可计算性:存在有效算法计算e(P, Q)
国密SM3哈希函数
SM9协议中使用SM3哈希函数(GM/T 0004-2012)作为安全哈希:
- 输入:任意长度消息
- 输出:256位(32字节)哈希值
- 结构:Merkle-Damgård结构,32轮迭代压缩
- 安全性:抗碰撞性、原像抗性、第二原像抗性
- H1: {0,1}* → [1, N-1]:将标识字符串映射为[1, N-1]范围内的整数
- H2: {0,1}* → [1, N-1]:将消息映射为[1, N-1]范围内的整数
标识到私钥的标准映射
SM9的核心创新在于将用户的"身份标识"(如设备ID、IP地址、MAC地址等)直接作为公钥使用。私钥由KGS通过主私钥和用户标识计算生成。
标准私钥生成算法(GM/T 0044-2016第5.2.2节):
给定设备标识 ID 和私钥类型后缀 hid(0x01=签名,0x02=加密,0x03=密钥协商):
1. 计算 t1 = H1(ID || hid, N) + s mod N
2. 若 t1 == 0,KGS需重新生成主密钥对,重新计算
3. 计算 t2 = s × t1^(-1) mod N
4. 设备私钥 dID = [t2]P1(签名私钥)或 dID = [t2]P2(加密/协商私钥)其中:
- s 是系统主私钥(仅KGS知道)
- H1 是基于SM3的哈希函数,将标识映射到[1, N-1]
- [t2]P1 表示G1群上的标量乘法
- 签名场景:Ppub_sign = [s]P2
- 加密/协商场景:Ppub_enc = [s]P1
标准协议流程
阶段1:系统初始化
密钥管理中心执行以下步骤:
- 输入安全参数λ,生成素数阶为N的加法循环群G1、G2,以及乘法循环群GT
- 选择随机数s ∈ [1, N-1]作为系统主私钥
- 计算系统公钥Ppub = [s]P2(签名场景)
- 选取双线性对e: G1 × G2 → GT
- 选择两个安全哈希函数H1和H2(基于SM3,见GM/T 0044-2016附录A)
- 发布公共参数{G1, G2, N, P1, P2, Ppub, e, H1, H2}给系统内所有设备
阶段2:设备注册
智能设备通过安全信道与KGS交互:
- 设备将自身身份标识ID发送给KGS
- KGS计算设备私钥dID:
- KGS通过安全信道将dID发送给设备
- 设备的公钥即为ID(标识本身),无需证书
阶段3:标准SM9身份认证协议
SM9标准(GM/T 0044-2016第6部分)定义了基于标识的身份认证协议。
#### 3.1 设备发起认证(证明者)
智能设备执行以下步骤:
- 计算g = e(P1, Ppub) ∈ GT(预计算,可缓存)
- 选择随机数r ∈ [1, N-1]
- 计算ω = g^r ∈ GT
- 计算h = H2(ID || ω)
- 计算l = (r - h × sID) mod N(sID为设备私钥标量值)
- 发送认证请求{ID, ω, l}给边缘服务器
边缘服务器收到认证请求后:
- 计算h = H2(ID || ω)
- 计算U = [H1(ID || hid, N)]P1 + Ppub(验证方公钥推导)
- 验证e([l]U, P2) == ω × e(P1, Ppub)^h
- 若等式成立,认证通过;否则拒绝
验证等式的成立依赖于双线性对的线性性质:e([a]P, [b]Q) = e(P, Q)^ab。完整推导见GM/T 0044-2016附录B。
安全性分析
机密性
- KGS的系统主私钥s由KGS秘密保存,攻击者即使获取系统公钥Ppub,也无法从ECDLP反推s
- 设备的私钥dID通过安全信道秘密分发,攻击者无法截获
- 认证消息中的随机数r每次认证都不同,无法从中推导出dID
前向安全性
- 每次认证会话使用不同的随机数r
- 即使某次会话的认证请求被破解,不会影响之前会话的安全性
抵御篡改攻击
- 如果攻击者篡改了认证请求{ID, ω, l},边缘服务器会通过验证等式不成立检测到
抵御重放攻击
- 每次认证使用不同的随机数r
- 边缘服务器需缓存已使用的ω值,防止重放攻击
- 也可结合时间戳机制,拒绝超过ΔT时间窗口的认证请求
抵御假冒攻击
- 攻击者无法伪造合法认证请求,因为只有拥有合法私钥dID的设备才能产生正确的l
性能分析
标准SM9运算开销
基于GM/T 0044-2016标准参数的软件实现性能参考:
| 操作 | 运算类型 | 典型耗时 |
|---|---|---|
| H1哈希 | SM3哈希 + 模运算 | ~0.1 ms |
| 私钥生成 | 1次标量乘(G1) | ~2-3 ms |
| 认证签名 | 1次标量乘(G1) | ~2-3 ms |
| 认证验证 | 1次双线性对 | ~5-8 ms |
注意:以上数据为参考值,实际性能取决于CPU、密码库实现和优化程度。
与TLS/SSL认证的性能对比
| 方案 | 握手/认证时间 | 证书传输开销 | 设备资源消耗 |
|---|---|---|---|
| SM9身份认证 | ~5-8ms | 无证书 | 低(仅需存储私钥dID) |
| TLS 1.2 (RSA) | 50-200ms | 完整证书链(1-5KB) | 高(需存储和管理证书) |
| TLS 1.2 (SM2) | 50-200ms | 完整证书链(1-5KB) | 高(需存储和管理证书) |
| TLS 1.3 | 20-50ms | 证书+可选证书链 | 中高 |
注:TLS握手时间在高速网络和高性能服务器上较低,在边缘设备上会显著增加。
工程实现要点
密码库选择
SM9算法涉及双线性对运算,需要使用支持配对运算的密码库:
- Miracl密码库:支持SM9/配对运算,C语言实现,适合嵌入式环境
- GMSSL:国密开源库,支持SM9算法
- Tongsuo(原BabaSSL):支持国密SM2/SM3/SM4,SM9支持在开发中
工业部署建议
- KGS高可用:密钥管理中心是单点故障,建议采用主备或多活部署
- ω缓存防御重放:边缘服务器需维护已使用ω的缓存,建议缓存时间窗口≥10秒
- 标识管理:设备标识ID建议使用不可伪造的唯一标识(如MAC地址+序列号组合)
- 私钥保护:设备私钥dID存储在设备安全元件(Secure Element)或TEE中
- 密钥轮换:定期更换设备私钥,建议每6-12个月重新注册一次
相关实践
- SM9 标识密码实战:无证书加密与身份认证部署 — SM9算法的工程实践教程
- 国密SSL/TLS双证书自适应方案详解 — 双证书智能切换协议
- SM9 标识密码算法原理详解 — SM9算法的数学基础和协议设计
参考来源
- GM/T 0044-2016. 《SM9标识密码算法》. 国家密码管理局.(第5部分:参数与密钥生成,第6部分:身份认证协议)
- GM/T 0004-2012. 《SM3密码杂凑算法》. 国家密码管理局.
- Miracl密码库文档. https://github.com/miracl/MIRACL
- GMSSL国密开源库. https://github.com/GMSSL/GMSSL