本文作者:author

比特币惊天BUG:幽灵交易重现,你的币还安全吗?

author 03-31 102 抢沙发
比特币惊天BUG:幽灵交易重现,你的币还安全吗?摘要: 比特币的幽灵:重复交易的怪异案例比特币,这个号称去中心化的数字黄金,一直被视为是免受审查和篡改的理想货币。但理想很丰满,现实却常常暴露出一些令人不安的瑕疵。你或许以为比特币交易...

比特币的幽灵:重复交易的怪异案例

比特币,这个号称去中心化的数字黄金,一直被视为是免受审查和篡改的理想货币。但理想很丰满,现实却常常暴露出一些令人不安的瑕疵。你或许以为比特币交易一旦发生,就铁板钉钉,绝对不可能出现重复。毕竟,双重支付是加密货币的死敌,一旦出现,整个系统的信任根基就会崩塌。然而,鲜为人知的是,在比特币的历史中,确实存在着两组完全相同的交易,就像幽灵一样游荡在区块链之上,挑战着我们对这种技术的固有认知。这并非什么惊天阴谋,也不是黑客攻破了SHA256算法,而是比特币早期设计中一个被忽视的角落,一个关于创世区块和“币基交易”(coinbase transaction)的怪异故事。这起事件虽然在事后通过协议升级得到了缓解,但它仍然像一个隐患,提醒着我们即使是最可靠的系统,也可能存在着意想不到的漏洞。 这不仅仅是一个技术细节,它关乎比特币的安全性、可靠性和未来。

双重支付的噩梦与创世区块的漏洞

被忽视的漏洞:Coinbase 交易的特殊性

比特币之所以能够防止双重支付,核心在于其交易验证机制。每一笔新的交易都需要引用之前未花费的交易输出(UTXO),就像盖房子需要一块块砖头,每一块砖头都必须是独一无二的。如果同一笔 UTXO 被花费两次,网络就会拒绝其中一笔交易,从而保证了资金的唯一性。然而,这个看似完美的机制却存在一个例外,那就是 Coinbase 交易。Coinbase 交易是矿工通过挖矿获得新比特币的特殊交易,它不需要引用任何之前的 UTXO,而是直接从空气中创造出新的币。这就给了一种奇特的可能性:如果两个不同的矿工在相近的时间内,生成了两个完全相同的 Coinbase 交易,会发生什么?

哈希碰撞?别逗了,这是设计上的疏忽

你可能会立刻想到哈希碰撞。毕竟,比特币交易的唯一标识符是交易 ID (TXID),而 TXID 是通过对交易数据进行哈希运算得到的。如果两个不同的交易数据产生了相同的哈希值,那不就意味着出现了重复交易吗?理论上确实如此,但在实践中,哈希碰撞的概率几乎为零。SHA256 是一种密码学安全的哈希算法,要找到两个不同的输入产生相同的哈希值,其难度堪比大海捞针。所以,重复交易的根源并非哈希碰撞,而是 Coinbase 交易的特殊性质,以及早期比特币协议中一些未完善的细节。

幽灵交易的时间线:短暂的混乱

这两组重复交易都发生在2010年11月,具体时间跨度约为16个小时。 更诡异的是,第一组重复交易竟然夹在了第二组重复交易之间。 其中,交易ID为 d5d2….8599 的被认为是第一个重复交易,尽管它在区块链上首次出现的时间晚于另一个重复交易 e3bf….b468。 这时间上的错位,更增加了这起事件的神秘色彩。

重复交易的剖析:mempool.space 的幻觉

浏览器行为的诡异差异:谁在掩盖真相?

当你试图在不同的区块链浏览器上查看这些重复交易时,你会发现一个奇怪的现象。像mempool.space、Blockstream.info和Btcscan.org这样的浏览器,对于交易 d5d2….8599 默认显示较早的区块,而对于交易 e3bf….b468 则默认显示较晚的区块。 另一方面,Blockchain.com和Blockchair.com总是显示重复交易的最新版本。 这种不一致的行为,让人不禁怀疑:这些平台是否在有意无意地掩盖某些信息? 还是仅仅因为技术实现上的差异导致了这种显示上的偏差? 无论如何,这种差异都给用户带来了困惑,也增加了理解这起事件的难度。

孤独的区块:91,812 的秘密

在包含这些重复交易的四个区块中,只有一个区块 (91,812) 包含了其他交易。 这笔交易将1 BTC和19 BTC的输出合并成了一个20 BTC的输出。 这意味着,绝大多数区块都只包含了 Coinbase 交易,这或许也暗示了当时比特币网络的早期阶段,交易量非常有限。

潘多拉的魔盒:如果重复的币真的被花费了…

理论上的混乱:UTXO 的幽灵与价值的迷失

由于存在两组相同的 TXID,这就引发了一个令人头疼的问题:这些重复的币真的可以被花费吗? 每一个重复交易的价值都是50 BTC,因此总共涉及4 x 50 BTC = 200 BTC。 换句话说, 有100 BTC实际上是不存在的。 截至今日,这200 BTC 仍然未被花费。 假设有人拥有与这些输出相关联的私钥,他们理论上可以花费这些比特币。 但一旦被花费,UTXO 将从数据库中删除,重复的 50 BTC 因此将无法花费并丢失,因此只有 100 BTC 可能被找回。 至于这些币被花费时,它们将来自哪个区块(较早的还是最近的),这可能是未定义的,甚至无法确定。 这就像一个薛定谔的猫,在没有被观察之前,你无法确定它的状态。

重复交易的幽灵链:比特币的末日场景?

更可怕的是,如果有人在创建重复交易之前,先花掉了所有比特币,然后再创建重复输出,那又会发生什么? 这会在未花费输出的数据库中创建新的条目。 这不仅意味着存在重复交易,还意味着可能存在重复的已花费输出的重复交易。 如果这种情况发生,当这些输出被花费时,可能会创建更多的重复交易,形成一种重复链。 为了避免这种情况,必须小心事件的顺序,总是在创建重复之前花费。 否则,比特币可能会永远丢失。 幸运的是,这种情况从未发生过。

重复交易的威胁:交易所的噩梦与用户体验的灾难

重复交易绝非善类,它们就像潜伏在暗处的幽灵,随时可能给比特币生态系统带来混乱。 它们会给钱包和区块链浏览器带来困扰,让用户难以追踪资金的来源和去向。 更严重的是,它们还会引发一系列攻击和漏洞。 例如,攻击者可以使用两笔重复的交易向某人支付两次。 然后,当收款方尝试使用这笔资金时,他们可能会发现只有一半的资金可以收回。 这尤其会对交易所构成威胁。 攻击者可以利用重复交易进行存款,并在交易所尚未发现问题时迅速提取资金,从而导致交易所的资产损失,甚至可能使其破产。 更糟糕的是,由于攻击者可以在存款后立即提取资金,因此他们几乎没有任何损失。 这简直就是一场完美的犯罪!

补丁与漏洞:BIP30 的亡羊补牢

软分叉的代价:性能与安全之间的权衡

为了缓解重复交易的问题,比特币开发者在2012年推出了 BIP30 软分叉方案。 这个方案禁止使用重复的 TXID 进行交易,除非前一个 TXID 已经被花费。 简单来说,就是给 UTXO 加上了一个 “已花费” 的标记,避免被重复使用。 随后,这一规则被修改为适用于所有区块,而不仅仅是 2012 年 3 月 15 日之后的区块。 这修复了一些潜在的拒绝服务 (DOS) 漏洞。 然而,BIP30 检查的计算成本很高。 节点需要检查新区块中的所有交易输出,并检查这些输出端点是否已经存在于 UTXO 集中。 这意味着节点需要维护一个庞大的 UTXO 数据库,并频繁地进行查询和更新操作。 这无疑会增加节点的负担,并可能影响比特币网络的性能。 这也体现了安全性和性能之间的权衡:为了提高安全性,我们不得不牺牲一些性能。

BIP34:创世区块的诅咒与未来的危机

2013年,BIP34软分叉方案被激活,它要求Coinbase交易包含区块高度,这也使得区块版本管理成为可能。区块高度被添加为币基交易脚本Sig的第一项。Coinbase scriptSig中的第一个字节是区块高度数字所使用的字节数,接下来是区块高度数字本身。这就像给每个区块都贴上了一个独一无二的标签,从而彻底解决了重复交易的问题。至少,理论上是这样。 然而,BIP34 并非万无一失。 尽管它在几乎所有情况下都修复了这个问题,但它并不是一个完全的 100% 修复。 在 BIP34 激活之前的区块中,有一些 Coinbase 交易使用的 scriptSigs 的第一个字节恰好与未来有效的区块高度相匹配。 这意味着,在未来的某个时间点,可能会出现新的重复交易。 这就像一个定时炸弹,虽然被埋藏得很深,但仍然存在爆炸的风险。

2046 年的审判日:矿工的阴谋与被遗忘的私钥

170 BTC 的代价:攻击的成本与收益

下一个可能出现重复交易的区块是 1,983,702,预计将于 2046 年 1 月左右产生。 2012 年 1 月产生的 164,384 区块中的 Coinbase 交易向七个不同的输出地址发送了 170 BTC。 因此,如果 2046 年的矿工想要进行这次攻击,他们不仅需要足够幸运地找到这个区块,还需要烧掉不到 170 BTC 的费用,总成本略高于 170 BTC,其中包括 0.09765625 BTC 区块补贴的折损。 按照目前 88500 美元的比特币价格计算,这将花费超过 1500 万美元。 至于 2012 年币库交易的七个地址归谁所有,目前还不得而知,密钥很有可能已经丢失。 目前,该 Coinbase 交易的所有七个输出地址都已被使用,其中三个在同一笔交易中使用。 有人认为这些资金可能与 Pirate40 庞氏骗局有关。 因此,这次攻击不仅代价高昂,而且对攻击者来说几乎毫无用处。 要在硬分叉中将 31 年前的 2015 年 11 月节点从网络中剔除,将是一笔不小的开支。

SegWit 的保护:额外的防御层

自 2017 年 SegWit 升级以来,Coinbase 交易也可以包含对一个区块中所有交易的承诺。 这些 BIP34 之前的区块并不包含见证承诺。 因此,要产生一个重复的 Coinbase 交易,矿工需要从区块中排除任何 SegWit 输出赎回交易,这进一步增加了攻击的机会成本,因为区块可能无法包含许多其他支付费用的交易。 这就像给比特币增加了一道额外的防线,让攻击者更加难以得逞。

最后的思考:安全是永恒的战场

考虑到复制交易的难度和成本,以及利用它的机会非常罕见,这个复制交易漏洞并不像是比特币的一个主要安全问题。 不过,考虑到所涉及的时间尺度和重复交易的新颖性,想想还是挺有意思的。 尽管如此,多年来开发人员还是在这个问题上花费了大量时间,2046 年这个日期在一些开发人员心中可能是修复这个问题的最后期限。 修复这个错误的方法有很多,可能需要软叉。 一种可能的修复方法是强制执行 SegWit 承诺。 比特币的安全是一场永恒的战争,开发者需要不断地发现和修复潜在的漏洞,才能确保这个系统的稳定和可靠。

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

阅读
分享

发表评论

快捷回复:

验证码

评论列表 (暂无评论,102人围观)参与讨论

还没有评论,来说两句吧...