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

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


                    (3) 在签名计算阶段, 任一参与方无法获取完整的签名随机数或签名随机数的任何信息, 从而不会泄露完整的
                 签名私钥.
                    根据部分私钥与签名私钥的特定关系, 本文提出                 2  种两方门限计算方案框架, 分别基于乘法和加法的密钥
                 拆分.
                  3.1   基于乘法密钥拆分的两方门限计算方案框架
                  3.1.1    密钥生成
                    根据第   2.1  节的分析, 本文对签名私钥      d  的表达式  (1+d) −1  进行乘法拆分, 使得  Alice 和  Bob  分别持有部分私
                 钥  d 1  和  d 2 d  、  d 1  、  d 2  满足如下关系:
                          ,

                                                           −1
                                                       (1+d) = d 1 d 2 ,
                                      −1 −1                  −1 −1
                 由上式可知, 签名私钥      d = d d −1 , 即公钥  P = [d]G = [d d ]G −G  .
                                      1  2                   1  2
                    为了实现上述乘法密钥拆分, Alice 和        Bob  通过如下步骤    [10] 进行协作式的密钥生成.
                                                     −1       P 1  给  Bob.
                    Alice.1 随机生成   d 1 ∈ [1,q−1] , 计算  P 1 = [d ]G , 发送
                                                     1
                                                     −1      P 2  给  Alice.
                    Bob.1 随机生成   d 2 ∈ [1,q−1] , 计算   P 2 = [d ]G , 发送
                                                     2
                                     −1
                                 P = [d ]P 1 −G .
                    Bob.2 计算公钥       2
                                      −1
                    Alice.2 计算公钥  P = [d ]P 2 −G .
                                      1
                    上述密钥生成过程应满足如下安全要求: 任一参与方无法获取完整签名私钥.
                    安全性说明如下. 在密钥生成过程中, Alice 能够获取如下信息.
                    (1) Bob  的公钥  P 2 = [d ]G .
                                     −1
                                     2
                                  P = [d d −1]G  .
                                       −1 −1
                    (2) 签名验证公钥         1  2
                    由于椭圆曲线离散对数问题 (elliptic curve discrete logarithm problem, ECDLP) [18] , Alice 无法从   P 2  获取  d 2 −1  , 从
                                                             d d −1 . 因此, 在  ECDLP  假设下, Alice 无法通过上述
                                                              −1 −1
                 而无法计算完整签名私钥; 也无法从           P  获取完整签名私钥
                                                              1  2
                 过程获取完整签名私钥. 同理可得, Bob         也无法在密钥生成过程中获取完整签名私钥.
                  3.1.2    签名生成
                    在每一次签名计算过程中, Alice         和  Bob  需要协作计算一个随机的椭圆曲线点            Q = [k]G  . 由于  s = (1+d) −1
                 (k +r)−r  , 其中   和   是公开的数字签名, 若签名随机数   仅由一个参与方生成, 则该参与方能够计算得到签名私
                             r
                                s
                                                            k
                          −1
                 钥  d = (s+r) (k +r)−1 , 违背了上述安全要求. 因此, 在协作计算椭圆曲线点的过程中, Alice 和           Bob  都需要生成各
                 自的随机数, 共同组成签名随机数          k , 使得任一参与方无法获取完整的签名随机数, 从而无法计算得到签名私钥.
                    本文先讨论     s 的协作计算过程, 再根据      s 的构造讨论椭圆曲线点        Q 的协作计算过程. 已知:

                                               −1
                                        s = (1+d) (k +r)−r = d 1 d 2 (k +r)−r = d 1 d 2 k +d 1 d 2 r −r.
                    为了实现    s 的协作计算, Bob   应发送   d 2 r  给  Alice. 由于  r  是公开的信息, 为了防止  Alice 计算得到  Bob  的部分
                 私钥  d 2  , Bob  应生成或计算一个随机数    w 2  来保护自己的部分私钥, 于是       Bob  计算  s 1 = d 2 (r +w 2 ) 并发送给  Alice.
                                                                                           s
                 Alice 接收到   s 1  后也应生成或计算一个随机数      w 1  来保护自己的部分私钥; 否则, 攻击者可以从   和          s 1  得到  d 1  . 于
                 是     Alice 计算:
                                                                            −1
                                  s = d 1 (s 1 +w 1 )−r = d 1 d 2 w 2 +d 1 w 1 +d 1 d 2 r −r = d 1 d 2 (w 2 +d w 1 )+d 1 d 2 r −r,
                                                                            2
                 这是一个有效的      SM2               k = w 2 +d w 1  .
                                                       −1
                                  签名, 签名随机数
                                                       2
                    综上, Alice 和  Bob  协作计算  SM2  签名的过程如下, 如图    1  所示.
                             ′                  ′
                    Alice.1 置   m = m||z , 计算  e = Hash(m ) .
                                                                        e 给  Bob.
                    Alice.2 随机生成或计算    w 1 ∈ [1,q−1] , 计算   Q 1 = [w 1 ]G , 发送   Q 1  和
                                                                       −1
                    Bob.1 随机生成或计算     w 2 ∈ [1,q−1] , 计算  Q = (x 1 ,y 1 ) = [w 2 ]G +[d ]Q 1  .
                                                                      2
                    Bob.2 计算  r = (x 1 +e) mod q .
   287   288   289   290   291   292   293   294   295   296   297