Blockstream Research 推出了 SHRINCS,一种结合状态性和无状态后量子签名的混合方案,在正常操作下生成 324 字节的小签名,状态丢失时可回退到 SPHINCS+ 的 8KB 大签名,以保护资金安全。该方案利用不平衡 XMSS 树和 WOTS+C 减小签名尺寸,同时保留类似 12 词助记词的静态备份体验,为比特币等区块链提供实用的抗量子签名选择。

3 月 3 日,Blockstream Research 演示了 在 Liquid Network(由 Blockstream 驱动的联合侧链)上使用后量子(PQ)签名。研究人员 Oleksandr Kurbatov、Viktor Mashtaliar、Dmytrii Kurbatov、Mikhail Kudinov 和 stringhandler 成功利用 Blockstream 的智能合约语言 Simplicity 签署了一笔真实的 Liquid 主网交易,展示了 Simplicity 表达自定义复杂花费条件的能力,从而展示了一种潜在量子安全签名方案的可能形态。
此次测试交易使用的方案是 Blockstream Research 的另一项成果:一种名为 SHRINCS 的基于哈希的算法。
该方案于 2025 年 12 月由研究总监 Jonas Nick 和密码学研究员 Mikhail Kudinov 首次提出。SHRINCS 结合了有状态和无状态哈希方案,试图在利用无状态签名的优势的同时,减少链上足迹。
在深入技术细节之前,我们先来明确一下有状态和无状态密码学签名的区别,并强调其相应的权衡。
基于哈希的有状态签名方案(如 XMSS)依赖于所谓的一次性签名(OTS),其中每个密钥对必须且仅使用一次。重复使用密钥会破坏密码学方案的安全基础,使得攻击者能够伪造签名并可能窃取资金。因此,跟踪哪些密钥已被使用(即状态)至关重要,以避免危及资金安全。这意味着每次签名后都需要更新状态,以便跟踪哪些密钥已被使用。持有这种状态引入了密钥管理的复杂性,使得静态备份(即每次使用后不更新的备份)实际上变得危险。目前,你可以从 12 个种子词恢复所有资金,并且可以在不担心保存任何额外信息的情况下,用这些种子词签署任何密钥。而有状态方案意味着你将无法做到这一点,否则可能会泄露信息并丢失资金。
尽管有状态方案需要记住每一次签名,但其生成的签名尺寸更小,且验证所需的计算量也最小。与无状态签名方案相比,较小的尺寸使其更具吸引力。
另一方面,无状态签名方案无需跟踪哪些密钥已被使用,使得密钥管理像记住静态备份一样简单,与当前 12 个种子词的工作方式类似。同一个密钥对可以多次使用,而不会损害其背后的安全假设。为了实现这一目标,无状态方案利用了巨大的多层树结构,创建了一个庞大的可能签名池,使得两次使用相同密钥的可能性在统计上可以忽略不计。正如你可能已经猜到的,这要以比有状态方案大得多的签名尺寸和更高的验证计算成本为代价。
SHRINCS 结合了有状态和无状态签名方案,试图利用各自的优势,同时缓解其特定的局限。具体来说,SHRINCS 利用有状态方案在尺寸和验证方面的效率,同时允许用户在状态丢失的情况下,通过无状态方案轻松恢复密钥并保护资金。
为了实现这一点,SHRINCS 同时使用了一种无状态方案(SPHINCS+)和一种有状态方案(非平衡 XMSS)。
在正常运行期间,SHRINCS 使用有状态的非平衡 XMSS 树,生成 324 字节的签名,与大多数其他 PQ 签名方案相比,这是一个非常小的签名。每次签署消息时,状态都会更新并安全存储,以确保不会重复使用同一个密钥。
如果我们需要恢复密钥,该怎么办?正如我们所说,通过静态备份恢复有状态方案的密钥是不可能的,因为这会导致安全受损并可能损失资金。如果密钥状态丢失,SHRINCS 可以回退到 SPHINCS+ 无状态签名方案。签名尺寸会急剧膨胀,达到 8KB,但资金不会面临丢失或被盗的风险。
https://learnblockchain.cn/article/25055?ref=blog.blockstream.com
SHRINCS 使用一种基于非平衡 XMSS 树的有状态方案,该树的叶子代表 OTS。
为了签名,算法根据当前状态选择一个新的 OTS,对消息进行签名,并更新状态以表明所选密钥不应再被使用。
为了验证签名,我们必须证明我们使用的 OTS 属于该树。因此,需要同时提供完整的认证路径(即 Merkle 路径)和签名,这需要存储从叶子到根节点的每个兄弟节点的哈希值。
为了加速,SHRINCS 使用非平衡树,这会导致更短的认证路径,从而产生更小的签名。此外,非平衡树有助于简化状态跟踪,因为它基本上匹配了 Merkle 树的高度。
下图有助于阐明这一概念。对于第一个签名,将使用 WOTS_1。认证路径将仅由 WOTS_1 的兄弟哈希组成,而状态 state = 1。使用后,状态将更新为 state = 2,通知算法下一个签名必须使用 WOTS_2。
为了更深入地分析所选方案,我们来看一下每个组件:
https://learnblockchain.cn/article/25055?ref=blog.blockstream.com
将这些结合起来,我们就得到了 SHRINCS 的有状态方案。
用于无状态签名的选定方案是 SPHINCS+,或者如作者所建议的,是它的一种变体。
SPHINCS+ 是一种复杂的签名方案,由多层后量子签名工具构建而成,例如 WOTS、随机子集森林(FORS)和 XMSS。组合后,SPHINCS+ 生成单个量子安全密钥对,可以安全地签署许多消息。与 XMSS 不同,该算法不需要记住之前用该密钥对签署的任何信息,即可进行后续签名。一个 SPHINCS+ 结构生成一个公钥,可以安全地签署多条消息,而不会泄露私钥。
这是通过巨大的最终结构实现的,两次选择相同密钥的可能性在统计上可以忽略不计。当然,这导致签名比有状态方案生成的签名大得多,使其在空间有限的系统(如区块)中不太实用。
如果你想了解更多关于这种 PQ 签名方案的信息,请参考 Nifty 的这篇精彩文章。
为了实现 SHRINCS,需要四个函数:KeyGen,它使用非平衡 XMSS 和 SPHINCS+ 子金字塔设置初始 SHRINCS 结构,并返回顶层公钥;Restore,给定种子,返回与 KeyGen 相同的公钥,并将状态标记为 LOST;Sign,使用两个子方案之一(非平衡 XMSS 或 SPHINCS+)为消息返回有效签名。如果通过调用 Restore 将状态标记为 LOST,则使用 SPHINCS+;否则,使用非平衡 XMSS 树进行签名。最后,Verify,它接收公钥、消息和签名,如果签名验证通过则返回 true,否则返回 false。
大多数签名方案都包含 KeyGen、Sign 和 Verify 方法;Restore 并不常见,因为它标记了使用哪个内部方案。
正如 Nick 在 Delving 帖子中所概述的,以下是四个函数如何工作的更深入解释:
现在,我们可以尝试回答一个问题:这是算法敏捷性吗?

长话短说:简短的回答是否定的。更长的回答如下。
互联网工程任务组(IETF)在 RFC7696 中给出了一个精确的定义,其中指出:“当协议能够随着时间的推移轻松地从一种算法套件迁移到另一种更理想的算法套件时,就实现了算法敏捷性”,因为“计算能力的进步或密码分析技术的进步最终会使任何算法过时”。
因此,我们可以将算法敏捷性视为基于密码学的系统为可能发生在所用原语上的任何事情做好准备(“有备无患!”)的能力。
另一方面,SHRINCS 提出的混合方法的目标并不是在主要方案因研究和技术的进步而被攻破时提供一种替代密码学方案。相反,它旨在为用户提供一种快速高效的签名算法,同时提供一个安全网,防止他们因该方案已知的限制而损失资金。
PQ 签名方案最大的缺点之一是其尺寸。这本身不是问题,但在具有有限存储能力的去中心化协议中,它就成了问题。最小的 PQ 签名比目前使用的最简单的密钥大 10 倍,允许大约每秒 3 笔交易(tps),而目前通过 Schnorr 可以实现每秒 7 笔交易。
SHRINCS 是一个巧妙的解决方案,它有助于展示问题空间:如何在 PQ 世界中,在保持用户习惯的当前静态备份、12 个种子词体验的同时,压缩已知的基于哈希的签名方案以应用于比特币用例。SHRINCS 的创新是一种很好的方法,可以在平衡有限区块空间现实的同时,保持用户体验。
5 月 12 日,Blockstream Research 提出了 一个基于哈希的签名操作码的初步提案,用于后量子比特币,称为 OP_CHECKSHRINCS,并选用 SHRINCS 作为签名方案。研究仍在继续,以确保比特币未来能够抵御量子攻击。
- 原文链接: x.com/btcinsider__/statu...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!
作者暂未设置收款二维码