签名哈希运算平方膨胀问题与隔离见证
作者:technicaldifficulties.io
来源:https://technicaldifficulties.io/2022/07/22/life-before-segwit-understanding-the-quadratic-sighash-problem/
我参加了 Chaincode Lab 的比特币协议开发研讨会。本周,我们深入研究了 SegWit。SegWit 解决了一个叫作 “签名哈希运算平方膨胀(quadratic sighash)” 的问题。
简单来说,这个问题就是签名验证需要长达 O(n²) 的时间来完成。如果你想降低比特币的参与门槛,这是个严重的问题。签名哈希运算平方膨胀之类的问题会将那些算力资源有限(如使用移动节点或树莓派节点)的人拒之门外。如果这个问题没有得到控制,没有专用硬件的人将无法运行节点。运行节点的人越少,比特币的中心化程度就越高。
此外还有一个合法的攻击向量,即,矿工可以创建需要花费很长时间验证的区块,导致其他人无法跟进区块链的最新动态。没了验收方,矿工就可以随心所欲地做自己想做的事。
资料
在深入探究上述问题之前,我想要先列出三份很棒的资料,我对此问题的理解就是从中得来。本文实际上对这三份资料里的特定内容进行了整合,只不过增加了一些示意图。
fjahar 的《SegWit 如何解决签名哈希运算平方膨胀问题》
Andrew Chow 在 Stack Overflow 上的回答
Rusty Russell 的调查报告《巨型交易:为何需要花费 25 秒处理?》
谈谈签名验证
验证签名必须具备以下三个东西:
签名
公钥
被签名的消息
签名和公钥都是需要提供的,但是消息必须经过重新构建。
签名哈希算法 = 消息的构建方式
SegWit 激活之前的签名哈希算法
在激活 SegWit 之前,我们构建消息的方式如下:
对于每个输入,
获取交易并删除其它所有输入的脚本。不是将其它输入完全删除,只是删除其脚本!我们还需要保留其它输入数据,例如,前序交易的 ID 和输出索引号。
对于我们的目标输入,将其脚本替换成来其所引用的输出的脚本。
执行两次 SHA256 哈希计算。
上述步骤生成了可用于签名验证的消息。理解这个问题的关键在于关注第一步中发生了什么。
O(n²) 是怎么回事?
对于每个输入,你都要略微调整一下交易,再对它进行两次哈希计算。这看上去不是很像二次函数,更像是线性函数,即复杂度为 O(n),n 就是输入的数量。
将 O(n) 变成 O(n²) 的第二个 n 源于每增加一个输入都会让消息的体积增大。
举个例子可能是最好的说明方法。
先看一笔包含 2 个输入的交易

- 包含两个输入的交易(超级简化版) -
现在,我们可以开始为每个输入构建消息。第一步,将非目标输入的脚本删除。

- 包含两个输入的交易经过签名哈希算法第一步处理后得到的消息 -
这看上去可能跟你预期的一样。不是很糟糕。就这笔包含两个输入的交易而言,总共有四部分数据需要经过哈希计算来完成消息构建:
输入 1 的消息:输入 1(带有脚本)
输入 1 的消息:输入 2
输入 2 的消息:输入 1
输入 2 的消息:输入 2(带有脚本)
4 恰好与 2² 相等。没关系,我们还可以用另一个数据点来证明这确实是二次函数。
再看一笔包含 3 个输入的交易

- 包含 3 个输入的交易(超级简化版) -
跟上个例子一样,我们将为每个输入构建消息。以下是每个输入经过第一步处理后的情况:

- 包含 3 个输入的交易经过签名哈希算法第一步处理后得到的消息 -
我们有 3 个输入,就要构建 3 个消息 …… 但是小心了!这 3 个消息全都比上个例子中的更大了!现在,总共有 9 部分数据需要经过哈希计算来完成消息构建:
输入 1 的消息:输入 1(带有脚本)
输入 1 的消息:输入 2
输入 1 的消息:输入 3
输入 2 的消息:输入 1
输入 2 的消息:输入 2(带有脚本)
输入 2 的消息:输入 3
输入 3 的消息:输入 1
输入 3 的消息:输入 2
输入 3 的消息:输入 3(带有脚本)
如你所见,随着输入数量增加,消息的体积逐渐增大,构建这些消息所需的操作也逐渐增多。除了你要构建更多消息之外,每个消息的体积也在变大!
SegWit 如何解决该问题
SegWit(通过一起部署的 BIP-143)定义了一个新的签名哈希算法,让见证(签名)数据成为交易之外的一个独立部分,成功解决了二次签名哈希问题。现在的签名哈希算法包含了一个可重复使用的“中间态”,从而省去了以往哈希签名算法中的第一步,将时间复杂度降低至 O(n)。
从某种程度上来说,SegWit 通过 UASF(用户激活软分叉)的方式激活这件事值得我们歌颂。如果我们放任签名哈希运算的平方膨胀问题不管,这世上能够运行节点的普通比特币用户将所剩无几。届时,我们甚至无法通过用户激活软分叉去解决这一问题。
如果你想了解更多关于 SegWit 如何将签名哈希算法的时间复杂度降至 O(n) 的背景知识,请参阅本文开头给出的链接。
(完)
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
您可能感兴趣
-
Galaxy Digital:从波动到可预测作者:Prathik Desai 编译:Block unicorn推土机在酷热中闲置。地段荒凉,合同不确定,一个加密货币交易公司转型为电力公司的想法似乎是痴人说梦。 一年前,德克萨斯州的 Helios
-
大仙说币:10.29 美联储降息板上钉钉,比特币意外跌破 113000 关口随着美国CPI年增率将至3.0%,强化了市场对联准会即将降息的预期;同时,Zhong美预计在周四早上九点在首尔举行高峰会,缓解全球地缘zz紧张。美股受此影响三大指数于28日收盘再创新高,但比特币形成高
-
火币成长学院 | x402 深度研报:互联网支付范式的重构与投资启示一、项目背景及概述 自20世纪90年代互联网兴起以来,HTTP协议一直是信息传输的基石。它定义了浏览器与服务器之间如何沟通,也塑造了互联网的使用习惯。然而,在HTTP/1.1标准中,有一个长期被忽视的
-
大仙说币:10.30 凌晨降息如期而至,鲍威尔放话 12 月降息未成定局,比特币应声下跌美国联准会在今日凌晨两点传来关键决策,主席鲍威尔宣布降息一码,使联邦资金利率区间将至3.75%-4%,并宣布12月1日起停止缩减资产负债表,也就是暂停量化紧缩。尽管这两项决策带有明显的宽松色彩,但在随
-
如何参与 Stable 第二轮预存款活动作者:CoinW 研究院稳定币是连接传统金融与加密世界的桥梁,在 DeFi 借贷、交易市场和跨境支付中发挥重要作用。随着市场成熟和监管演变,稳定币正从“单一资产”发展为底层网络。新兴稳定币公链以稳定币
-
HashWhale 加密周报 | 利好兑现后资金回吐;市场短期面临震荡(10.25-10.31)作者&编辑:蒙奇1、比特币市场比特币价格走势(2025/10/25-2025/10/31) 横盘整理阶段(10月25日至10月26日) 10月25日,比特币价格自 $110,000 逐步小幅攀升至 $
-
权力的游戏:从特朗普到赵长鹏,亿万富翁们为何纷纷押注“预测市场”作者:链上启示录引言:一场关于概率的权利游戏 想象一个地方,你可以为任何事情下注:下一任美国总统是谁?美联储下个月会不会降息?甚至,你最喜欢的演员能否赢得今年的奥斯卡金奖? 2025 年,预测市场经历
-
大跌后的迷雾:宏观流动性触底 VS 市场情绪反转作者:Proton Capital Research Team自10月11日清算事件以来,加密市场情绪明显转弱。大规模合约爆仓和流动性抽离引发连锁反应,市场普遍认为当前或已处于牛市末期阶段。原本在本轮
- 成交量排行
- 币种热搜榜
OFFICIAL TRUMP
Pepe
泰达币
以太坊
比特币
Solana
USD Coin
币安币
瑞波币
First Digital USD
狗狗币
大零币
莱特币
Sui
ChainLink
OKB
FIL
DYDX
ZEN
CAKE
HBAR
CFX
EOS
BSV