Page 118 - 《软件学报》2025年第10期
P. 118

王御天 等: 基于多父链辅助工作量证明共识机制的后量子区块链系统                                                4515


                 攻击和对偶攻击等对分圆环的针对性攻击, 此外素阶数域由于原始域的子域数量极少和自同态数量少可以抵抗子
                 域攻击和自同态攻击. 因此, 具有大          Galois 群的素阶数域因其代数结构的大幅减少被认为在理论上能提供更强的
                 安全保障. 同时, 从长远考虑, 在密码系统构造中去除不必要的代数结构也具有广泛的共识. 关于素阶数域相对于
                 power-of-two  分圆环的安全优势参见文献      [2,18,19].
                    Dilithium-Prime 方案效率也进行了优化. 通过使用种子         ρ 来代替矩阵    A、使用一系列算法分离并提取           Z q  中元
                 素的高位和低位, 来进一步压缩公钥尺寸; 针对素阶数域上无法使用传统                        NTT  技术, 多项式乘法效率低的问题,
                 Dilithium-Prime 方案设计了素阶数域上的扩展        NTT  算法, 同时针对签名方案的特殊多项式乘法设计了效率更高
                 的小多项式乘法算法.
                    基于格的后量子数字签名方案具有较高的计算效率和较好的可扩展性, Dilithium-Prime 方案相对于                      CRYSTALS-
                 Dilithium, 由于采用素阶数域底层结构, 具有更鲁棒的安全性且在同等安全程度下, 空间开销更小, 签名效率更高,
                 更接近目前基于椭圆曲线的数字签名方案. 因此, 在区块链的交易中应用                      Dilithium-Prime 后量子数字签名方案. 方
                 案包含密钥生成算法        Dilithium-Prime.KeyGen, 签名算法  Dilithium-Prime.Sign  和验证算法  Dilithium-Prime.Verify
                 这  3  个部分, 具体内容如算法     1–算法  3  所示.

                 算法  1. 密钥生成算法    Dilithium-Prime.KeyGen.
                              λ
                             1 ;
                 输入: 安全参数
                 输出: 签名公私钥对     (pk, sk).
                 1.  ζ ← {0,1} 256
                 2.  (ρ,ρ ,K) ∈ {0,1} 256  ×{0,1} 512  ×{0,1} 256  := H (ζ)
                      ′
                 3.   A ∈ R k×l  := ExpandA(ρ)
                       q
                          l
                              k
                 4.  (s 1 , s 2 ) ∈ S ×S := ExpandS(ρ )
                                         ′
                              η
                          η
                 5.   t := As 1 + s 2
                 6.  (t 1 , t 0 ) := Power2Round q (t,d)
                 7.  tr ∈ {0,1} 256  := H (ρ ∥ t 1 )
                 8.  RETURN (pk := (ρ, t 1 ), sk := (ρ,K,tr, s 1 , s 2 , t 0 ))
                 算法  2. 签名算法  Dilithium-Prime.Sign.

                 输入: 私钥   sk, 消息  M;
                 输出: 签名  σ.
                 1.     A ∈ R k×l  := ExpandA(ρ)
                        q
                 2.     µ ∈ {0,1} 512  := H (tr ∥ M)
                 3.     κ := 0, (z, h) :=⊥
                 4.    ρ ∈ {0,1} 512  := H (K ∥ µ)//算法的随机性版本中ρ ← {0,1} 512
                    ′
                                                        ′
                 5.    WHILE(z, h) :=⊥ DO
                         ˜ l
                                        ′
                 6.      y ∈ S := ExpandMask(ρ ,κ)
                         γ 1
                 7.      w := Ay
                 8.      w 1 := HighBits (w,2γ 2 )
                                q
                            256
                 9.       ˜ c ∈ {0,1}  := H (µ ∥ w 1 )
                 10.    c ∈ B τ := SampleInBall(˜c)
                 11.     z := y+cs 1
   113   114   115   116   117   118   119   120   121   122   123