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

张川 等: 抗量子的高效区块链认证存储方案                                                           4495



                 算法  5.  chain.
                 输入:  PK.seed, ADRS, r, s, i;
                 输出:   r 迭代  s 次后的哈希值.

                 1.  if  s = 0 then
                 2.   return  r;
                 3.  endif
                 4.  if  (i+ s) > w−1 then
                 5.   return NULL;
                 6.  endif
                 7.   tmp = chain(PK.seed,ADRS,r, s−1,i);
                 8.   ADRS.setHashAddr(i+ s−1);
                 9.   tmp = F(PK.seed,ADRS,tmp);
                 10. return  tmp

                     bw_Keygen(PK.seed,ADRS,SK.seed) → (bw pk ,bw sk ): 全节点利用该算法用于生成  BW  公私钥对, 私钥中的每个

                 n  字节字符串都由    SK.seed  和地址  ADRS  生成, 相应的公钥通过对私钥进行         w  次哈希计算生成. 具体而言, 结合
                 ADRS  地址对每个私钥进行哈希计算, 生成对应的公钥, 这个过程中, 私钥地址根据哈希链的结构进行更新, 根据
                 链函数  (算法  5) 计算哈希链每次迭代的结果. 算法        6 展示了  BW  密钥对的生成步骤, 有关      ADRS  的操作参考文献     [30].
                 通过  ADRS.setChainAddr()  和  ADRS.setHashAddr()  来调用对应地址, 并对每个私钥执行哈希操作, 生成   个    l  BW
                               bw pk , 如下所示:
                 密钥对, 之后计算

                                          bw pk = Th l (PK.seed,ADRS,bw pk [0]||...||bw pk [l−1])    (10)
                 算法  6.  bw_Keygen.

                 输入:  PK.seed, SK.seed, ADRS ;
                 输出:  bw sk , bw pk .
                 1. for  i = 0 to  l do
                 2.   ADRS.setChainAddr(i);
                 3.   ADRS.setHashAddr(0);
                 4.    bw sk [i] = PRF(SK.seed,ADRS);
                 5. endfor
                 6. for   j = 0 to  l do
                 7.    ADRS.setChainAddr( j);
                 8.   ADRS.setHashAddr(0);
                 9.    tmp[ j] = chain(bw sk [ j],0,w−1,PK.seed,ADRS );
                 10. endfor
                 11. 根据公式  (10) 生成  bw pk ;
                 12. return  bw sk ,bw pk

                      bw_sig(PK.seed,ADRS,SK.seed) → SIG bw : 根据  Size-optimal 编码  (见第  2.3  节), 我们用  BW  私钥进行签名生
                   SIG bw . 具体过程见算法  1 (详见第  2.3  节).
                 成
                  4.4.2    超树签名
                    本节将说明     BW  如何与  Merkle 树结合生成超树     (HT), 从而产生固定输入长度的签名方案. HT          的公钥位于顶
   93   94   95   96   97   98   99   100   101   102   103