比特币现金硬分叉—— 三个相互关联的事件

摘要:2019 年 5 月 15 日,比特币现金硬分叉似乎遭遇到三个相互关联的重大问题。 “攻击交易” 利用一个漏洞,导致矿工产生空块。 围绕空区块的不确定性可能引起了一些矿工的担忧,他们可能试图在最初的非硬分叉区块链上挖矿,继而引发了共识区块链分裂。开发人员和矿工似乎已经制定了一项计划,以复原意外发送到隔离见证(SegWit)地址的资金,上述漏洞可能破坏了这一计划。 这种失败可能导致了进行有意识和协调的两个区块链重组。 根据我们的计算,大约有3392 比特币现金(BCH)可能已经在一个精心策划的交易逆转中成功地被双重花费了。 不过,这次双重花费的唯一受害者可能是原来窃取这笔钱的 “小偷”。

比特币现金网络在 2019 年 5 月 15 日分裂的图解

(资料来源: BitMEX 研究)
(注: 分裂的图形说明)

三个比特币现金的问题

比特币现金在2019年5月的硬分叉升级受到三个重大问题的困扰,其中两个可能是间接由一个导致空块的漏洞引起的。下图显示了这三起事件之间的潜在关系。

比特币现金在硬分叉升级期间面对的三个问题之间的关系

(资料来源: BitMEX 研究)

空块问题

Bitcoin ABC 是比特币现金的一个重要实现软件,但它有一个漏洞,进入内存池的交易的有效性条件可能没有共识有效性条件那么繁琐。 这与比特币(想必比特币现金也一样)预期运作的方式相反,共识有效性规则本应比内存池有效性更宽松。这实际上是一个非常重要的特性,因为它可以防止恶意花费者创建满足通过网络中继并进入商家内存池的条件,但是无法满足进入有效区块所需条件的交易。这会使 0 确认双重花费攻击相对容易阻止,而无需担心初始付款进入区块链。在这种情况下,攻击者可以有理由确定,恶意构造的交易永远不会进入区块链。

攻击者似乎已经在比特币现金 ABC(Bitcoin Cash ABC)中发现了这个漏洞,然后在硬分叉之后加以利用,从而引起混乱和迷惑。这个攻击可以随时执行。 攻击者只需要广播满足内存池有效性条件但未通过共识检查的交易。当矿工试图产生这些交易的区块时,他们失败了。作为故障保护,矿工似乎已经制造空块,而不是颗粒无收,至少在大多数情况下是这样。

比特币现金 — 每个区块的交易数量 — 橙色线是硬分叉

(资料来源: BitMEX研究)

不对称的链分裂

在空块不确定性达到最高峰时,我们的预硬分叉 Bitcoin ABC 0.18.2 节点收到了一个新的区块,582,680。 当时,许多人都担心空块,一些矿工可能已经恢复到一个硬分叉前客户端,认为较长的区块链遇到了麻烦,并可能会恢复到硬分叉之前。不过,这仅仅是我们的猜测,而空块漏洞可能与链分裂无关,这可能只是由一个太慢而无法升级的矿工造成的。

比特币现金共识链分裂

(资料来源: BitMEX 研究)

对于硬分叉的结构,链分裂确实向我们强调了一个问题。 我们测试了我们的硬分叉后客户端 ABC 0.19.0 是否会将分裂的非硬分叉侧视为有效。 为了使分裂 “干净”,分裂的每一侧都应该认为另一侧是无效的。

为了测试较短的硬分叉前区块链的有效性,从 Bitcoin ABC 0.19.0 节点的角度来看,我们不得不使自分裂以来的第一个硬分叉区块无效。 然后,我们观察该节点是否会跟随链分裂或仍然卡在硬分叉点。 出乎我们意料的是,如下面的屏幕截图所示,该节点跟随分裂的另一侧。 因此,分裂并不完全,这种不对称,可能为攻击者提供更多机会。

我们的 Bitcoin ABC 0.19.0 节点的命令行截图

(资料来源: BitMEX研究)

协调的两个区块重组

在硬分叉之后的几个区块,在分裂的硬分叉侧,有一个长度为 2 的区块链重组。 当时,我们认为这是由正常的区块传播问题引起的,并没有考虑太多。 例如, Bitcoin SV 在此之前几周经历了该长度的 6 个区块的重组, 根据我们的分析,当 Bitcoin SV 重组时,孤链中的所有交易最终都进入主要的获胜链(Coinbase 交易除外)。 不过,在这种比特币现金重组中,我们发现事实并非如此。

孤立区块,582,698,包含 137 笔交易(包括 Coinbase),其中只有 111 笔交易进入获胜链。 因此,就 25 笔交易而言,似乎发生了一次成功的 2 个区块双重花费。 如下表所示,这 25 笔交易的输出值总计超过 3,300 个BCH。

孤立区块(582,698)中没有进入主链的交易列表

交易 ID

总输出 (BCH)

1e7ed3efb7975c06ca46598808e17c6f42c66a085fcb65356dc090e3c434d874

Coinbase (未计算)

0cdd5afff40831199d78ac55116a94aaf4ea7d53e599ac44962c29861ef9f05e

79.9

1907e59313a5c2607f706e8439feb613ed3ff89530d17bd9deced7113928df79

358.9

27553ff15a9d58b10b33da69bef3ccd570c007fc0d695cf8b88817cfc4d49065

65.2

2ff74d9b244469dcd87f9c853b70f9bc72d4116c662ee12783a1c32a6825d45e

196.3

357e31bcf17b4d557954b2d69b7169559a64605a628c4bb9eb11adbd416967d1

117.4

3801dc4ee11ccaeda243ac287ee5e40afb0f07dc0ba26f534ea52f4bfde0d3da

161.2

83e6065dd31ef706f6a90669e460000741820c4dcb753290bd2b003a9f853211

71.2

8950cae069562893aa3583b75fd14f2aaef4f0db72292bd05e11f915ca38cd86

107.8

8e10f1f85d9707ca974ddabd9cb8188d0b890586781ef4161a9133dadefbe0e6

72.0

8fc0b3665f4734b56686ffec83f6b23000720af90102e20f39d9dddb5f1f5c25

183.0

99bd320fb7e3fc487b393c3b9afbc6a7bc765d7f9df5902201a70d3cb8fc5a63

57.8

a38b43f85cc592c4bd69b2b1f0f865df6d36f3b89dfa6119780197369e48192a

177.8

b091bf34d72444ff1669dd13b6c912d8801b94aad8a92d162a9680d46d4b727f

89.2

bd8ee13735dcbdad983fe9624c5b3fd3d257b15a62b269ddb40bb4be9d4a15cb

100.5

beae5bc9137beebddea6f5fbc6fe79b77f6d59f2aa2a5da675ccc39b2b2f8cb6

166.3

c47d1c18c39d28df21ce0e3c34021295658b56c7e669af3aebe685cea32462dc

210.3

c8031b2fd429d9e2838dccc7fa0631788139443a7609958c5d2ce195aec97f8a

85.7

cf3af954a7c3b327107aa42498ec31924075bd926a61428352695a696af8d6c4

114.8

cf8f47928c37bc24c88ff8ff8ea3c84419d4cedc907e74d113e681b055c566dc

162.0

dff4537328f2568db5b7f0fa81a57024fdeb9da23a432a893fb48eca1ab63079

115.9

e1398e628da1258db08f969efdade13e6daac6a53e5b43121dab3604c605af29

69.9

e926ce8ca0192b3ea7f971d93eec3f651e8a35839a76101512cb8c37f98caa89

126.8

e9e0482d61300d3b3d6a9340f9ee66bd6d098328cd7ced50416bb28eb8dc796e

307.4

ebc4392b27056b84a0337638f1257031172d842c148f9ffa10e80afc4080d8a1

82.7

f81267d65855040bf08bb5291a87733555067041ab611cd4e874368c8c1a2c2a

111.9

Total

3,391.7

(资料来源: BitMEX 研究)

如上表所示,这 25 笔双重花费交易的总输出值为 3,391.7 BCH,从经济角度来看,这是一笔重大数额。 因此,可以得出结论,重组是一个精心策划的事件,而不是偶然发生的。 如果这是偶然发生的事件,则分裂的每一侧的交易可能不会出现不匹配。 不过,假设协调和故意重组是我们的猜测。 

我们提供了以下两个双重花费的输出示例:

其中一个双重花费 UTXO(未花费过的交易输出)示例—— “0014”

(资料来源: BitMEX 研究)

上表说明了重组期间 5 个 BCH 输出发生的情况。 这 5 个 BCH 首先被发送到区块 582,698 中的地址 qzyj4lzdjjq0unuka59776tv4e6up23uhyk4tr2anm 。 该链是孤立链,而相同的输出最终被发送到不同的地址, qq4whmrz4xm6ey6sgsj4umvptrpfkmd2rvk36dw97y,在 7 个区块之后。

第二个双重花费 UTXO 示例—— “0020”

(资料来源: BitMEX研究)

上述输出的情况与 25 笔双重花费交易中的几乎所有资金有共同的特征。 大多数输出似乎已经在主链上的区块 582,705 附近进行双重花费,在孤立区块后大约 7 个区块。 

用于赎回交易输入的 SigScript 以 “0020” 或 “0014” 开头,在上面的示例中突出显示。 这些可能与 Segregated Witness(隔离见证)有关。 根据 Segregated Witness 中的规范,“0014” 被推送到 P2WPKH(支付给见证公钥哈希),和 “0020” 被推送到 P2WSH(支付给见证脚本哈希)。 因此,这些输入的赎回可能与比特币升级的隔离见证有关,其中只有一部分是在比特币现金上采用的。

实际上,基于我们的分析,孤立区块 582,698 中的 25 笔交易中的每个单个输入都用 “0014” 或 “0020” 开头的 Sigscript 来赎回。 因此,除了赎回这些 SegWit(隔离见证)输出的 “攻击者” 或 “小偷” 之外,有可能没有人丢失与此链重组相关的资金,而这些资金可能首先被偶然地发送到这些输出。 

作为比特币现金 2019 年 5 月硬分叉一部分,有一个变化,就是允许复原被意外发送到 SegWit 地址的比特币。 因此,这可能发生在这次事件中。

允许隔离见证复原

在上次升级中,意外发送到 Segwit P2SH 地址的比特币因 CLEANSTACK 规则而变为不可花费。 这次升级将对这些比特币进行豁免,并将它们恢复到之前可以花费的情况。 这意味着一旦 P2SH 赎回脚本预映射被透露(例如通过从相应的BTC地址花费比特币),任何矿工都可以拿走硬币。

(资料来源: https://github.com/bitcoincashorg/bitcoincash.org/blob/master/spec/2019-05-15-upgrade.md)

这个 2 个区块重组可能与空块漏洞无关。 不过,分裂似乎就在在解决漏洞之后一个区块发生,因此它可能是相关的。 也许“诚实”的矿工们试图在分裂后直接协调这些输出的花费,又或许要将它们归还到原来的所有者那里,而空块漏洞搞砸了他们的时间,让攻击者得益并卷走资金。 

另一方面,该攻击非常复杂,因此攻击者可能非常老练,并需要进行广泛的规划。 因此,即使没有空块漏洞,这种攻击也可能是有效的。 

结论

我们从有关比特币现金硬分叉升级的事件中吸取到许多教训。 硬分叉似乎为恶意行为者提供了攻击和制造不确定性的机会,因此对硬分叉的精心规划和协调非常重要。 另一方面,这个空块漏洞可能是其他两个事件的根本原因,其可能在任何时候发生,而无论是否正在试图硬分叉,尝试防止这样的漏洞才是重中之重。

这些事件的另一个重要教训是需要透明度。 在事件发生期间,很难知道开发人员的计划、漏洞的性质或矿工支持的链。 在公共渠道中就这些问题进行公开交流可能会更有帮助。 特别是,很多人都不能清晰知道开发人员和矿工的计划,以协调和复原发送给 SegWit 地址的资金。 如果这个计划事先在社区中,以及在明显的经过深思熟虑和协调的重组期间进行辩论和讨论,可能会有所帮助。 当然,假设有时间披露后者。 如果参与者在事后披露有关这些事件的详细信息,也可能会有所帮助。

我们认为,所有这一切中令人最担忧的是经过深思熟虑和协调的重组。 从论证的一方来看,资金被盗,因此将资金归还给其“合法所有者”的行为是合理的,即使这造成了一些短期中断。 不过,许多人或者某些人认为交易最终确认等现金是这些区块链系统的唯一独特特征。 如果能够逆转交易,和在本情况下的经济上重大交易,这将否定这个系统的整个前提条件。 这种行为可能消除适当保障资金的动机,开创先例或改变预期,更有可能产生进一步逆转。

对于比特币社区中所有不喜欢比特币现金的人来说,这可能成为嘲笑这种币的机会。 不过,虽然比特币现金的哈希值比比特币低得多,使得这种逆转更容易,但我们认为,成功对比特币现金进行经济上重大的精心策划交易逆转对比特币而言并不是好消息。 从某些方面来看,这些事件有助于树立一个危险的先例。 这表明这些事件可能会发生在比特币身上。 或者,这可以说明比特币现金在成为少数链的同时所面临的风险。

欢迎转载,请注明文章来自

BitMEX (www.bitmex.com)