Page 290 - 《软件学报》2025年第5期
P. 290

2190                                                       软件学报  2025  年第  36  卷第  5  期


                 计算; 同年, 尚铭等人    [12] 基于  Shamir 秘密分享的思想, 分别针对存在可信中心和不存在可信中心的情况, 设计了门
                 限的  SM2  签名算法, 但是效率较低; 张永强等人         [13] 在  2017  年提出了一个具有盲签名特性的      SM2  两方协作签名方
                 案. 多方安全计算等技术也可以用于设计             SM2  签名算法门限方案. 2015     年, Jie 等人  [14] 基于秘密分享和多方安全
                 计算技术, 提出了一种无可信中心的           SM2  门限签名方案, 该方案相较于使用相同秘密分享技术的                 ECDSA  门限签
                 名方案拥有更高的效率.

                  2   基础知识

                    本文所提方法主要基于         SM2  签名算法  [5] , MtA  协议  [15] 也略有涉及, 下面就相关概念和基本知识予以介绍.
                  2.1   SM2  签名算法
                    SM2  签名算法是基于椭圆曲线密码的数字签名算法, 椭圆曲线                   E 参数包括   a 、  b 、   p 、  q 和  G E 是定义在
                                                                                               :
                                                      2   3
                                                                        ,
                 有限域   F p  上的椭圆曲线, 曲线上的点     (x,y) 满足  y ≡ (x +ax+b) mod p G = (x G ,y G ) 是曲线上  q 阶的基点.
                                                            (r, s) , 签名者  Signer 应执行以下运算步骤.
                    设待签名的消息为       m , 为了获取消息    m 的数字签名
                    ● 密钥生成:
                    (1) 随机生成  d ∈ [1,q−1] .
                    (2) 计算  P = [d]G , 将   P 作为公钥公开,   d 作为私钥保存.
                    ● 签名生成:
                         m = m||z z  由用户  Signer 标识和  SM2  椭圆曲线的部分参数共同组成.
                          ′
                    (1) 置        ,
                                         ′
                    (2) 计算消息摘   e = Hash(m ) .
                    (3) 随机生成  k ∈ [1,q−1] .
                    (4) 计算椭圆曲线点     (x 1 ,y 1 ) = [k]G .
                    (5) 计算  r = (e+ x 1 ) mod q , 若   r = 0 或  r +k = q 则返回步骤  (3).
                                  −1             s = 0 则返回步骤
                    (6) 计算   s = (1+d) (k −rd) mod q , 若       (3), 否则签名结果即为     (r, s) .
                    验证者   Verifier 收到签名  (r, s) 后, 通过如下步骤验证签名.
                    ● 签名验证:
                                                       ′
                                                          ′
                    (1) 检查  r  和   s 是否满足   r, s ∈ [1,q−1] ; 计算  (x ,y ) = [s]G +(r + s)P .
                                                       1  1
                                                       r
                                                    ′
                            ′       ′   ′           r  和   是否相等, 若二者相等则签名验证通过, 否则验证失败.
                    (2) 计算  r = (Hash(m )+ x ) mod q ; 判断
                                        1
                    签名过程中,     s  的计算可以等效为如下形式:

                                                                  −1
                                                                                     −1
                                                −1
                           s = (1+d) (k −rd) = (1+d) (k −rd +r −r) = (1+d) (k −(1+d)r +r) = (1+d) (k +r)−r,
                                   −1
                 由上式可知, 签名私钥      d  的表达式  (1+d) −1   在签名计算中可被整体视为一个变量. 因此, 本文对           (1+d) −1  进行拆分,
                 避免求逆运算, 并记椭圆曲线点         [k]G  为  Q .
                  2.2   MtA  协议
                    MtA  协议  [15] 能够将两方乘法份额分享转变成加法份额分享: Alice 和            Bob  分别持有乘法份额      z A  和  z B  , 满足
                 z = z A z B  . Alice 和  Bob  将  z A  和  z B  作为  MtA  协议的输入, 分别得到输出   z  和  z  , 满足  z = z A z B = z +z  . 该协议可以
                                                                                             ′
                                                                            ′
                                                                                          ′
                                                                        ′
                                                                            B
                                                                                          A
                                                                                             B
                                                                        A
                 使用加法同态加密或不经意传输协议来实现.
                  2.2.1    基于加法同态密码算法的    MtA  协议
                    加法同态密码算法定义了          2  个空间, 3  个算法和  2  个运算. 2  个空间包括明文空间     M 和密文空间     E ; 3  个算法
                 包括密钥生成算法      KGen 、加密算法    Enc pk  和解密算法   Dec sk  : 密钥生成算法  KGen 用于生成一对公私钥   (pk, sk) , 加
                 密算法   Enc pk  是  M → E 的概率性算法, 解密算法   Dec sk  是  E → M 的确定性算法; 2  个运算分别是   ⊕ : E×E → E 运
                 算和  ⊙ : Z×E → E 运算, 定义如下:

                                            {
                                              m 1 +m 2 = Dec sk (Enc pk (m 1 )⊕ Enc pk (m 2 ))
                                                                            .
                                              k ·m = Dec sk (k ⊙ Enc pk (m))
   285   286   287   288   289   290   291   292   293   294   295