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

