Page 467 - 《软件学报》2025年第8期
P. 467

3890                                                       软件学报  2025  年第  36  卷第  8  期


                          (  )
                            ′
                              ′
                                                                                  ′
                           r ,r = [s ]G +[t]vk = [s ]G +[tu]G = [s ]G +[(r + s )u]G = [(1+u) s +ur ]G
                                                                               ′
                                                               ′
                                                                  ′
                                                         ′
                                  ′
                                              ′
                          
                            x  y
                          
                          
                                {        [           ]        }
                                           −1    ′  ′        ′        ′     ′        ′
                               = (1+ sk −1) sk ·(k +r )−r +(sk −1)r G = [(k +r )− sk ·r +(sk −1)r ]G = k ×G .
                          
                          
                          
                          (   )
                          
                            r x ,r y = k ×G
                                   R = r  是否成立, 来判断签名验证是否通过.
                                       ′
                    因此可以通过检验

                 3.2   加权门限  SM2  签名  (方案  2)
                    本节给出第     2  种加权门限   SM2  签名具体构造, 相较于方案        1, 此方案在最开始的密钥生成阶段求得             sk 的逆
                                                                                              [ ]  [ ]
                                                                                               0
                                                                                                     1
                 元, 计算得到签名公钥, 从而在预签名阶段只需要调用一次乘法函数即可得到                        θ, 并且计算部分签名      s   和   s   不
                                                                                                i     i
                 需要再计算    θ 的逆, 这种方法更加高效, 通信开销减少. 方案具体构造如下.

                                 (  λ  )
                 3.2.1    密钥生成  F Gen 1 ,T,t
                    生成签名的公私钥. 这里对         SM2  签名算法私钥进行调整为         v = sk −1, 获得相应的签名公钥, 方便后续预签
                                                                       −1
                 名阶段中对    SM2  密钥求逆的这一操作. 密钥生成具体如下.
                                  λ
                      F Gen  以安全参数  1  以及  WRSS  的重构阈值  T  和隐私阈值  t 作为输入. 然后, 它将执行以下操作.
                                                           −1              −1                        vk =
                    (1) 随机选择一个部分密钥        sk ← F q . 然后计算  sk , 令签名私钥  v = sk −1, 将对应的验证公钥设置为
                       (     )
                         −1
                 v×G = sk −1 ×G.
                    (2) 根据  WRSS  的访问结构, 生成部分密钥       sk 的份额:   {[sk] i } ← Share(P,T,t, sk). 然后发送  (vk,{[sk] i }) 给各个
                 参与方   i.

                 3.2.2    签名生成  F Sign ([sk] i ,vk, M)
                                                                                            )
                    秘密输入    [sk] i , 公开输入对应的公钥   vk 和消息  M. 采用以下协议进行签名:       ( R Random ,F Mult ,F Open .
                    ● 预签名阶段
                    利用本文介绍的函数, 得到通过预签名获得的签名相关值. 直接让每个参与方利用乘法函数得到本地份额乘
                 法的结果, 从而使预签名阶段只进行两轮, 有效降低通信开销. 具体过程如下.
                                                                                    (   ∑    )
                                                                       {[ ] }
                    (1) 每个参与方    i 利用随机份额生成函数         F Random  产生  γ  的份额:   γ  ← F Random γ =  γ i  和  k  的份额:
                                                                          i i∈S           i∈S
                              (  ∑     )
                 {[k] i } i∈S ← F Random k =  k i . 每个参与方得到  , 计算并广播  k i ×G.
                                                     k i
                                    i∈S
                                                      (            )
                                                      {[ ] }
                    (2) 各方利用乘法函数计算出        {[θ] i } i∈S = F Mult  γ  ,{[sk] i } i∈S  .
                                                         i i∈S
                                                (     )                                        ∑
                                                 {[ ] }
                    (3) 各方利用打开函数计算        γ = F Open  γ  . 利用通过广播本地保存的      k i ×G  计算出  R = k ×G =  k i ×G,
                                                    i i∈S
                                                                                                  i∈S
                               (   )
                 并设置曲线点     R = r x ,r y .
                    (4) 计算  e = H v (M), 得到  r = (e+r x ) mod p.
                              [ ]           [ ]              [ ]                [ ]
                                    −1
                                                  −1
                    (5) 各方计算   s 0  = γ ·θ ·k 和   s 1  = γ ·θ ·r. 这里的   s 0   是  sk ·k 的一个份额,   s 1   是  sk ·r 的一个份额.
                                 i            i                 i                  i
                    (6) 每个参与方               ( [ ] [ ] ) .
                                                0
                                                   1
                                             r, s , s
                                i 都保存这些值
                                                 i   i
                    ● 签名阶段
                    每个参与者将保存的值通过加法计算, 得到部分签名份额并广播, 然后通过打开函数得到消息                               M  的签名. 具
                 体如下.
                    (1) 每个参与方   i 本地计算   [s] i = s + s 1  i  −r.
                                             [ ] [ ]
                                               0
                                                i
                                     (     )
                    (2) 各方计算   s = F Open {[s] i } i∈S  , 消息  M  的签名是  σ = (r, s).

                 3.2.3    签名验证  F Verify (r, s, M,vk)
                    此签名方案的验证过程与第           3.1.3  节中的方案  1  验证过程类似. 但值得注意的是, 两者验证阶段的第             (2) 步有
                                                                             )
                 所不同, 本节方案     2  签名的密钥为    v = sk −1, 故而在计算椭圆曲线点       ( r x ,r y = [s ]G +[t]vk  时, 其中的签名公钥
                                                −1
                                                                                 ′
                                                                         ′
                                                                            ′
                               (     )
                                 −1
                 应为:  vk = v×G = sk −1 ×G.

                 3.2.4    正确性分析
                                 ′            ′  ′                         ′  ′
                    对收到的消息      M  及其数字签名    (r , s ) 进行正确性分析. 由已知的    t = (r + s ) mod p, 可得:
   462   463   464   465   466   467   468   469   470   471   472