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

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


                 新的技术和方法, 提高了算法的效率和安全性. SPHINCS+提出了                   3  种不同的签名方案, 分别是 SPHINCS+-
                 SHAKE256、SPHINCS+-SHA-256 和 SPHINCS+-Haraka, 这些方案通过使用不同的哈希函数实例化来实现.
                 SPHINCS+的设计目标是减少签名的大小, 同时保持较高的安全性. 在第                   2  轮提交中, SPHINCS+引入了简单和健
                 壮两种变体, 简单变体通过纯随机预言机实例化来实现, 相比健壮变体在速度上有约                          3  倍的提升, 但在安全性上可
                 能存在一定的折衷. SPHINCS-α     [21] 是在 SPHINCS+ 的基础上进一步优化的签名方案. 它通过改进             Winternitz 一次
                 性签名方案和引入一种新的几次签名方案 FORC, 提高了签名的效率. SPHINCS-α 在签名大小和签名时间上相比
                 于 SPHINCS+有所减少, 特别是在追求小签名大小的参数设置下, 签名大小和签名时间减少了                            8%  左右. 此外,
                 SPHINCS-α  在快速签名操作的参数设置下也展现出了更好的性能.
                  2   基础知识


                    本文所提方法主要是结合区块链的认证存储与基于哈希的签名                      (包括平衡    WOTS+, 随机森林链和超树), 下面
                 就相关概念和基本知识予以介绍.
                  2.1   区块链的认证存储

                    在标准的公有区块链系统中, 区块链节点可以分为两种类型: 全节点和轻节点. 全节点将同步和执行所有的交
                 易, 并相应地维护区块链账本状态. 轻节点            (客户端) 只同步区块头, 不同步交易和区块链账本状态. 当全节点提出
                 新的区块时, 执行区块内的所有交易, 并将执行完毕的账本状态的承诺放在区块头中. 因此, 区块链全节点在交易
                 执行中维护回写缓存, 并在执行完块中的所有交易后刷新存储. 因此, 认证存储需要提供两个算法.
                    ●   Get(k) → v: 获取给定键   k 的值  v.
                    ●   Set({(k,v) i },e) → comm: 将键值对  (k,v) 刷新到块号为  e 的存储中, 获得变更后账本状态承诺.
                    当轻节点想要获得键的对应值时, 它向全节点查询, 全节点返回与值相关的账本承诺和证明. 轻节点将检查承
                 诺是否为有效承诺, 并验证证明的正确性. 因此, 认证存储需要提供两种算法来证明和验证.
                    ●   Respond(k) → (v,π,comm): 根据最新的承诺, 用证明   π 回答键   k 的值  v.
                    ●  Verify(k,v,π,comm) → 0/1: 验证来自全节点的响应.
                  2.2   哈希函数
                                                                  T  和消息  m  作为输入. 其中, 公共参数可以看作一
                    可调整的哈希函数: 可调整哈希函数以公共参数                P、调整
                 个密钥函数, 而调整可以看作盐值或者随机数. 基于               SPHINCS+ [19] , 本文采用了后续的简化表示法. 对于输入长度
                                                   λ     256    kλ     λ
                 为  kλ 的可调整哈希函数, 有    Th k : Th k = {0,1} ×{0,1}  ×{0,1} → {0,1} . 扩展哈希函数定义为  F ≜ Th 1 ,H ≜ Th 2 .
                                                                                          λ     256    λ
                    伪随机函数和消息摘要: 在本文中, 伪随机函数            PRF 用于生成伪随机密钥, 其定义为        PRF :{0,1} ×{0,1}  →{0,1} ,
                                                                                                       λ
                                                                                           λ
                                                                                      λ
                                                                                                 ∗
                 而另一个伪随机函数       PRF msg  则用于生成对消息进行压缩的随机性, 其定义为            PRF msg :{0,1} ×{0,1} ×{0,1} →{0,1} .
                                                                                                λ     λ
                 此外, 本文利用一个能够处理任意长度消息的密钥哈希函数                 H msg  来压缩要签名的消息, 其定义为     H msg = {0,1} ×{0,1} ×
                                 λ
                    λ
                 {0,1} ×{0,1} → {0,1} .
                          ∗
                  2.3   平衡 WOTS+
                    WOTS+方案在编码过程中引入校验和, 防止攻击者在给定有效的消息和签名对的情况下有效伪造签名. 给定
                                        m ′
                                                                                        ,
                                                                               ′
                                                                                       ′
                                                     m i
                                         i
                                                 i
                 (σ,m), 攻击者可以通过计算      H (sk i ) = F m ′ −m i  (H (sk i )) 来伪造任何满足  ∀i (m i ⩽ m ) 的签名  m H  是哈希函数. 校验
                                                                               i
                                                                                 ′
                                                                                    ′
                 和解决了这个问题:      m i  中的任何更改都会导致校验和的变化. 因此, 对手不能伪造               (m ,C ) C  是校验和).
                                                                                      (
                    Size-optimal 编码  [21] . 在  WOTS+中, 编码函数将校验和附加到原始消息的末尾, 消息大小固定为             l, 并且尽可
                 能构造较小的编码长度. 然而, WOTS+编码方法存在一个问题, 即低消息空间利用率, 因为校验和占用了一部分.
                 为了最大化消息空间的利用, 平衡 WOTS+首先将编码的大小固定为                     l, 为了容纳尽可能大的消息空间, 这种编码
                 方法确保编码过程中所有码字的总和为定值, 从而消除了对校验和的需要. 为了实现平衡                            WOTS+, 令:

                                                               ∑
                                                                n
                                                            n

                                                 D n,m = {v ∈ [w] } :  v i = m                     (1)
                                                                 i=1
   84   85   86   87   88   89   90   91   92   93   94