Page 289 - 《软件学报》2025年第5期
P. 289
刘振亚 等: SM2 数字签名算法的两方门限计算方案框架 2189
码的概念, 开启了门限密码学的研究. 门限密码算法将私钥进行拆分, 得到若干个部分私钥, 保护在不同的设备中,
避免了完整私钥的直接存储和使用. 密码计算需要门限数量的部分私钥的参与才能完成. 门限密码方案一方面提
高了系统的可用性, 即使少量部分私钥丢失, 也不会影响密码系统的可用性. 另一方面, 恶意敌手即使窃取了少量
部分私钥, 也难以破坏密码系统的机密性. 数字签名算法的两方门限计算方案的特点在于: 2 个参与方分享签名私
钥, 分别持有部分私钥共同计算数字签名. 数字签名算法的两方门限方案在移动互联网中应用广泛, 由移动终端和
半可信的中心服务器共同掌握用户的私钥, 每一次数字签名计算同时需要移动终端和中心服务器参与, 从而提升
攻击者窃取密钥的难度; 中心服务器也不能单独地使用该私钥来完成数字签名计算.
SM2 算法 [5] 是国家密码管理局于 2010 年发布的标准化椭圆曲线公钥密码算法, 包含了数字签名算法, 密钥交
换协议和公钥加密算法, 其安全性基于求解有限域上椭圆曲线离散对数问题的困难性. SM2 算法已成为我国公钥
算法标准 GM/T 0003.2-2012, 并进入国际标准 ISO/IEC 14888-3:2016 中. SM2 数字签名算法与大量的椭圆曲线签
名算法类似, 签名时先生成签名随机数, 再计算签名随机数对应的椭圆曲线点, 根据椭圆曲线点的横坐标及消息摘
要计算出签名的第 1 部分, 最后根据签名私钥、签名随机数以及签名第 1 部分, 计算得到签名第 2 部分, 与签名
第 1 部分共同组成消息签名. 在上述签名过程中, 签名随机数和私钥都需要被保护.
针对 SM2 签名算法的私钥安全问题, 已有很多两方门限计算方案被提出. 不同的方案区别在于: (1) 不同的密
钥生成方式, 例如基于乘法或加法拆分密钥; (2) 不同的签名随机数构造方式, 例如使用不同数量的随机数完成签
名随机数的构造; (3) 不同的签名计算方式, 例如使用不同的交互轮数完成数字签名的协作计算. 在此基础上, 本文
提出了 SM2 签名算法两方门限计算方案框架: 首先根据乘法或加法密钥拆分, 两个参与方完成协作式的密钥生
成, 分别获得一个部分私钥; 然后双方协作计算签名随机数对应的椭圆曲线点, 签名随机数由双方各自构造的随机
数共同组成; 最后根据双方分别持有的部分私钥、随机数以及消息摘要和椭圆曲线点, 完成数字签名的协作计算.
在协作签名的过程中, 两个参与方使用独立生成的随机数, 结合签名私钥以及各自的部分私钥, 协作构造符合
安全要求的签名随机数, 完成该框架的多种实例化, 得到不同的 SM2 签名门限计算方案. 本文的实例化, 包括了现
有已知的 23 种两方门限计算方案, 也包括多种新的方案.
本文第 1 节介绍门限签名的相关工作. 第 2 节介绍本文所需基础知识, 包括 SM2 签名算法和 MtA (multiplicative-
to-additive share conversion protocol) 协议. 第 3 节介绍本文提出的两方门限签名计算框架并给出安全性说明. 第 4
节对提出的框架进行性能分析. 第 5 节总结全文.
1 相关工作
1991 年, Desmedt 等人 [6] 针对 RSA 算法设计了门限签名方案, 此后, 针对不同密码算法的门限签名方案也相
继被设计. DSA 和 ECDSA 签名算法的门限方案需要所有签名参与方共同协商随机数, 并计算随机数的逆, 因此门
限方案挑战很大. 针对该问题, 1996 年, Gennaro 等人 [7] 设计了计算乘积和求逆的多方安全计算方法, 完成 DSA 算
法门限方案. 但是该方案在合成签名阶段, 各用户需要计算私钥与随机数的乘积以及随机数的逆, 当门限值是 t 时,
至少需要 2t +1 个用户才能合成签名, 通信消耗非常大. 2016 年, Gennaro 等人 [8] 针对门限数字签名算法的多项式
扩张问题, 基于 Paillier 同态加密方案的门限版本和陷门承诺 (trapdoor commitment), 构造了最优化的门限 DSA 签
名方案, 该方案也适用于 ECDSA 签名算法. 随后, Gennaro 等人 [9] 对上述方案进行优化, 使用了多方安全计算技术,
避免了使用复杂的零知识证明方法, 设计了原理更简单的 ECDSA 门限方案. 但是该方案依旧使用了 Paillier 同态
加密. 针对该问题, 2017 年 Lindell 等人 [10] 使用指数 ElGamal 的加法同态算法代替 Paillier 算法, 设计了更高效率
的门限 ECDSA 分布式密钥生成算法和签名算法.
SM2 签名算法与 DSA/ECDSA 签名算法的计算过程略有不同, 虽然 SM2 签名中包含私钥的逆运算, 但是可
以将私钥 d 的表达式 (1+d) −1 整体视为一个变量, 对其进行乘法或加法密钥拆分获得多个部分私钥, 避免数字签名
过程中的求逆运算. 各参与方使用部分私钥以及各自生成的随机数, 通过简单的点乘、点加、数乘、数加等运算,
交互得到 SM2 签名结果 (r, s) . 相较于使用多方安全计算、加法同态密码算法等技术, 该方法在性能方面具有明
显的优势. 基于上述观察, 林璟锵等人 [11] 在 2014 年公开了一个基于 SM2 的两方协作签名协议, 不需要私钥的求逆