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

唐长虹 等: 加权门限     SM2  签名方案                                                       3889


                 3.1   加权门限  SM2  签名  (方案  1)
                    本节提出第     1  种加权门限   SM2  签名方案, 在密钥生成时, 首先选取部分密钥            sk, 根据定义计算得到完整公私
                 钥对. 将部分密钥     sk 进行  WRSS  秘密共享, 参与者们得到部分密钥和完整公钥. 在签名时, 只需要部分密钥就可以
                 得到部分签名     s. 具体运算过程如下.

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

                              F Sign ([sk] i ,vk, M)
                 3.1.2    签名生成
                            [sk] i , 公开输入对应的公钥   vk 和消息  M. 采用以下协议进行签名:       ( R Random ,F Mult ,F Open .
                                                                                            )
                    秘密输入
                    ● 预签名阶段
                                                                 ( [ ] [ ] )
                                                                        1
                                                                    0
                    利用本文介绍的函数, 得到通过预签名获得的签名相关值                    r, s , s  , 直接让每个参与方利用乘法函数得到
                                                                      i  i
                 本地份额乘法的结果, 从而使预签名阶段只进行两轮, 有效降低通信开销. 具体过程如下.
                                                                                     (  ∑     )
                    (1) 每个参与方    i 利用随机份额生成函数         F Random  产生  γ  的份额:   γ  ← F Random γ =   和  k  的份额
                                                                        {[ ] }
                                                                          i i∈S              γ i
                                                                                           i∈S
                              (  ∑     )
                 {[k] i } i∈S ← F Random k =  k i . 每个参与方得到  , 计算并广播  k i ×G.
                                                     k i
                                    i∈S
                                                     (           )             (           )
                                                     {[ ] }                    {[ ] }
                    (2) 各方利用乘法函数计算        {[δ] i } i∈S = F Mult  γ  ,{[k] i } i∈S   和  {[θ] i } i∈S = F Mult  γ  ,{[sk] i } i∈S  , 方便计算签名
                                                        i i∈S                     i i∈S
                 s = sk ·k + sk ·r −r.
                     −1
                            −1
                                                                                               ∑
                                                (     )
                    (3) 各方利用打开函数计算        θ = F Open {[θ] i } i∈S  . 利用通过广播本地保存的   k i ×G  计算出  R = k ×G =  k i ×G,
                                                                                                  i∈S
                               (   )
                 并设置曲线点     R = r x ,r y .
                    (4) 各方计算  e = H v (M), 得到  r = (e+r x ) mod p.
                              [ ]   −1    [ ]    −1  [ ]   [ ]    −1           [ ]     −1
                                0
                                                                                 1
                                           1
                                                            0
                    (5) 各方计算   s  i  = θ ·δ 和   s  i  = r ·θ · γ . 这里   s  i   是  sk ·k 的一个份额,   s  i   是  sk ·r 的一个份额.
                                                      i
                    (6) 每个参与方   i 都保存这些值    ( [ ] [ ] ) .
                                                0
                                                   1
                                             r, s , s
                                                 i
                                                     i
                    ● 签名阶段
                    参与者将其保存的值进行加法计算得到签名份额并广播, 之后通过打开函数得到消息                             M  的签名. 每个参与者
                 广播最终签名, 这是一个非交互的签名阶段. 具体如下.
                                                             [ ]
                                                                  [ ]
                    (1) 每个参与方   i 利用本地保存的值计算并广播          [s] i = s 0  + s 1  −r.
                                                                i    i
                                     (     )
                    (2) 各方计算                , 得到  M  的签名是  σ = (r, s).
                               s = F Open {[s] i } i∈S
                 3.1.3    签名验证  F Verify (r, s, M,vk)
                    验证者利用公钥对生成的签名进行验证, 计算相关值后代入验证等式, 判断等式是否成立即可验证签名是否
                 有效. 此验证过程与      SM2  数字签名算法验证方法一致, 具体如下.
                                                                    [     ]     [     ]
                                      ′            ′  ′           ′          s ∈ 1, p−1  是否成立, 若不成立则
                                                                              ′
                    (1) 验证者收到消息     M  及其数字签名     (r , s ) 后, 首先检验   r ∈ 1, p−1  和
                 验证不通过, 否则进行下一步.
                                                                                    (   )
                            ′      ′       ′  ′                                     r ,r = [s ]G +[t]vk, 其中
                                                                                     ′
                                                                                           ′
                                                                                       ′
                    (2) 计算   e = H v (M )  和  t = (r + s ) mod p, 如果  t = 0, 即为验证失败; 否则, 计算
                                                                                     x  y
                 vk = u×G = (sk −1)×G.
                              (    )                 ′
                                  ′
                               ′
                    (3) 计算  R = e +r mod p, 判断等式  R = r  是否成立, 若等式成立则签名验证通过; 否则验证失败.
                                  x
                 3.1.4    正确性分析
                                 ′            ′  ′                         ′  ′
                    对收到的消息      M  及其数字签名    (r , s ) 进行正确性分析. 由已知的    t = (r + s ) mod p, 可得:
   461   462   463   464   465   466   467   468   469   470   471