Page 336 - 《软件学报》2026年第6期
P. 336
高睿 等: 基于国密 SM9 的密钥隔离签名 2655
KGC 生成固定私钥的开销与 SM9 一致. 密钥隔离机制添加了临时私钥生成算法, 因此带来了物理安全设备
一定运算量上的提升, 并且增加了物理安全设备和不安全设备之间的 2 个群元素的通信量. 物理不安全设备签名
时增加了 2 次配对运算和 3 次 G 1 群上的指数运算.
表 3 算法计算开销比较
方案 固定私钥生成 临时私钥生成 签名 验签
SM9 1E 1 +1Hash+3M 无 1E 1 +1E T +1Hash+1M 1E 2 +1E T +1P+2Hash
本文工作 1E 1 +1Hash+3M 3E 1 +1E 2 +1Hash+4M 4E 1 +2P+1Hash+1M 2E 1 +6P+3Hash
[13]
KS-SOK-IBS 1E 2 +1Hash 1E 1 +1E 2 +E T +1Hash 1E 1 +1E 2 +1E T +1Hash 4P+3Hash
注: e(G 1 ,G 2 ) → G T 是一个双线性映射. E 1 代指群 G 1 中的指数运算; E 2 代指群 G 2 中的指数运算; E T 代指群 G T 中的指数运算;
M 代表 Z p 域中的计算; P 代表双线性配对运算; Hash代指哈希运算
本文的签名算法在时间段 i 中输出的一个签名为 σ = (S ID,i ,C i ,S i ,h,V i ). 通信开销为 1 个 G 1 群元素、3 个 G 2
群元素和 1 个有限域元素. 注意到签名方案中在某一确定的时段中, 签名的某些部分是固定不变的. 具体地说, 签
名中 S ID,i 和 C i 在同一时间段 i 中是固定的. 换言之, 如果在同一个时间段内, 用户与验证者之间不断地对不同的信
息执行“签名-验签”算法, S ID,i 和 C i 只需要传递一次, 这大大减少了通信开销和验证时间.
6.3 实 验
本节我们评估了基于国密 SM9 的密钥隔离签名的性能. 在一个有 3.20 GHz 处理器和 8 GB 内存的虚拟机上
使用 Go 语言 (Go 版本 go1.20.2 linux/amd64) 和 gmsm 库实现了本文的方案. 实验遵循 SM9 标识密码算法 [28] 中双
线性对的参数选取. G 1 中的一个点被存储为 32 个字节. 当需要存储 G 2 中的一个点时, 会将其映射到 G 1 群上再存
储, 因此也是 32 个字节 (因为 SM9 使用的曲线是 II 型双线性映射). 哈希输出结果为 32 个字节.
计算开销如表 4 所示, 私钥生成中心需要花费 0.079 ms 为用户生成私钥, 并需要使用秘密安全信道传输
0.032 KB 的私钥给物理安全设备. 每个时间段开始时, 物理安全设备需要消耗 0.57 ms 产生临时私钥并且发送
0.064 KB 的数据给物理不安全设备. 签名时物理不安全设备需要计算 2.66 ms. 产生签名的长度为 0.16 KB. 验证
者验证签名时需要消耗 7.26 ms, 开销增长的主要原因是验签算法涉及了 6 个双线性配对操作. 当用户和验证者在
C i 不需要重复传输, 实际单个签名大小只有 0.9 KB 的数据 (关系
同一时间段内多次通信时, 由于签名中的 S ID,i 和
图如图 2 所示), 对 100 条不同消息执行签名操作只需要传递 9.66 KB 的数据.
表 4 实测算法计算开销比较
方案 固定私钥生成 (ms) 临时私钥生成 (ms) 签名 (ms) 验签 (ms) 签名大小 (KB) 100次签名大小 (KB)
SM9 0.079 无 0.84 1.26 0.064 6.4
本文工作 0.079 0.57 2.66 7.23 0.16 9.66
KS-SOK-IBS [13] 0.34 0.43 1.19 4.70 0.96 64.3
12
9.664
10
签名大小 (KB) 8 6 4 3.904 5.824
7.744
2
0.16 1.984
0
0 20 40 60 80 100 120
签名个数
图 2 同一时间段签名大小和签名个数之间的关系
7 总 结
本文提出了一种基于国密 SM9 的密钥隔离签名方案, 解决了国产标识密码中存在的私钥暴露问题, 实现了前

