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

4494                                                      软件学报  2025  年第  36  卷第  10  期


                     ADRS  中  tree index  部分计算为:


                                                   tree_index = i×t +idx[i]                           (8)
                    私钥利用    SK.seed 和  ADRS  通过  PRF  来生成:

                                                 dforc sk = PRF(SK.seed,ADRS)                         (9)
                                                                                           2
                                                                                              1
                                                     ′                       leaf[q][w +1] = [F ,F , sk[q]], 表示
                                                                                    ′
                    然后, 我们迭代地将       F  应用于每个私钥    w  次, 将每次哈希的结果添加到
                 第   q 个叶子节点上的哈希链上节点, 其中         F  见第  2.2  节的说明. 每个哈希值作为哈希链上节点, 最后哈希的节点作
                 为叶子节点, 接着从叶子节点开始, 根据算法            3  中的第  3–18  行来生成每层的节点, 直到根节点.
                  4.3.3    生成证明
                                                   ′                                                md 、
                                                                                                      ′
                      dforc_sig(PK.seed,ADRS,SK.seed,idx,md ) → SIG dforc : 全节点通过该算法来生成对应的证明. 该算法输入
                                        idx, 输出  DFORC                                k(log(t)+1) 的字符串数
                 SK.seed、PK.seed、ADRS  和              签名  SIG dforc , 即   proof . 该   proof  是长度为
                 组, 其中  k  是  Merkle 树的数量,  t  是叶子节点的数量, 包含从叶子节点到根节点的认证路径上的节点. 每个认证路
                 径的元素由    n 字节的私钥和树中节点组合而成, 认证路径见图               1  所示. 在实际生成过程中, 认证路径的每个节点都
                 使用   SK.seed  和  ADRS  通过伪随机函数  PRF  进行计算. 对于每个   key, 算法通过遍历    Merkle 树来生成相应的认证
                 路  径  ,   并  将  这  些  路  径  与  签  名  组  合  ,   输  出  完  整  的     proof .   具  体  过  程  见  算  法  4 ,   有  关     ADRS   的  操  作  和  部  分  函  数
                 (SIG XMSS .getAUTH)  参考文献  [30].

                 算法  4.  dforc_sig.

                 输入:  PK.seed, SK.seed, ADRS, idx, md ;
                                              ′
                 输出:  SIG dforc .
                 1. for  i = 0 to  k −1 do
                 2.   ADRS.setTreeHeight(0);
                 3.    ADRS.setTreeIdx(i×t +idx[i]);
                 4.   SIG dforc [i] = PRF(SK.seed,ADRS);
                 5.  for   j = 0 to  a−1 do
                              j
                 6.     s = (idx/2 )⊕1;
                 7.     AUTH[j] = SIG XMSS .getAUTH(j);
                 8.  endfor
                 9.     SIG dforc = SIG dforc [i]||AUTH[j];
                 10. endfor
                 11. return  SIG dforc

                  4.4   超树构造
                    在本节中, 我们详细阐述超树的构造过程. 由于超树中的叶子节点都是平衡 WOTS+ (BW) 的公钥, 所以首先
                 介绍  BW, 然后基于   BW  来构造超树.

                  4.4.1    BW  签名
                                w×l 次   (见第  2.2                       F (sk i ) 时, 私钥的地址在每次迭代都会发生
                                                                        w
                                     F
                    首先需要调用                     节) 来生成相应的     bw pk . 当计算
                                                     PK.seed 被结合使用, 用于计算新的哈希值, 并且更新后的地址会对
                 变化. 每次迭代过程中, 地址       ADRS 和公钥种子
                 应当前节点在哈希链中的位置, 并将其用作下一步计算的输入. 这样设计确保每个哈希步骤的不可预测性, 增强了
                 签名方案的抗量子攻击能力. 该过程详细描述于算法                 5, 通过对哈希和私钥地址的更新, 输出哈希链中的每一次迭
                 代的哈希值,    i 表示开始索引, 有关    ADRS  的操作参考文献     [30].
   92   93   94   95   96   97   98   99   100   101   102