国密SM9标识密码在工业边缘计算中的身份认证协议

协议详解 · 2026-07-06

概述

工业物联网(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轮迭代压缩
  • 安全性:抗碰撞性、原像抗性、第二原像抗性
SM9协议中定义了两个哈希函数H1和H2:
  • H1: {0,1}* → [1, N-1]:将标识字符串映射为[1, N-1]范围内的整数
  • H2: {0,1}* → [1, N-1]:将消息映射为[1, N-1]范围内的整数
H1和H2的具体构造见GM/T 0044-2016附录A。

标识到私钥的标准映射

SM9的核心创新在于将用户的"身份标识"(如设备ID、IP地址、MAC地址等)直接作为公钥使用。私钥由KGS通过主私钥和用户标识计算生成。

标准私钥生成算法(GM/T 0044-2016第5.2.2节)

CODE
给定设备标识 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:
- hid = 0x01(签名私钥后缀) - t1 = H1(ID || hid, N) + s mod N - t2 = s × t1^(-1) mod N - dID = [t2]P1
  • 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}给边缘服务器
#### 3.2 边缘服务器验证

边缘服务器收到认证请求后:

  • 计算h = H2(ID || ω)
  • 计算U = [H1(ID || hid, N)]P1 + Ppub(验证方公钥推导)
  • 验证e([l]U, P2) == ω × e(P1, Ppub)^h
  • 若等式成立,认证通过;否则拒绝
#### 3.3 正确性简述

验证等式的成立依赖于双线性对的线性性质: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.320-50ms证书+可选证书链中高
注:TLS握手时间在高速网络和高性能服务器上较低,在边缘设备上会显著增加。

工程实现要点

密码库选择

SM9算法涉及双线性对运算,需要使用支持配对运算的密码库:

  • Miracl密码库:支持SM9/配对运算,C语言实现,适合嵌入式环境
  • GMSSL:国密开源库,支持SM9算法
  • Tongsuo(原BabaSSL):支持国密SM2/SM3/SM4,SM9支持在开发中

工业部署建议

  • KGS高可用:密钥管理中心是单点故障,建议采用主备或多活部署
  • ω缓存防御重放:边缘服务器需维护已使用ω的缓存,建议缓存时间窗口≥10秒
  • 标识管理:设备标识ID建议使用不可伪造的唯一标识(如MAC地址+序列号组合)
  • 私钥保护:设备私钥dID存储在设备安全元件(Secure Element)或TEE中
  • 密钥轮换:定期更换设备私钥,建议每6-12个月重新注册一次

相关实践

参考来源

  • GM/T 0044-2016. 《SM9标识密码算法》. 国家密码管理局.(第5部分:参数与密钥生成,第6部分:身份认证协议)
  • GM/T 0004-2012. 《SM3密码杂凑算法》. 国家密码管理局.
  • Miracl密码库文档. https://github.com/miracl/MIRACL
  • GMSSL国密开源库. https://github.com/GMSSL/GMSSL