最近有人在讨论矿工是否可能采用一个还不存在的、修改过的以太坊客户端,主要为了使矿工可以接受贿赂,对区块链进行短程的重组 (创造这种贿赂的主要用例是攻击 DeFi 协议)。
在这篇文章里,我们将解释这个攻击向量为什么在以太坊 2.0 合并后更难执行。
分叉选择规则是一个函数,由客户端来求值,该函数把区块集和见过的其他消息作为输入,然后把「权威链」的内容输出给客户端。之所以需要分叉选择规则,是因为可能有多条有效链可选 (即如果同一个父区块有两个竞争子区块同时发布)。
重组 (reorg)?是这样一种事件——本来属于权威链的区块变成不再是权威链的一部分了,因为有一个竞争区块把它击败了。最终确定性是这样一种情况——分叉选择规则强有力地支持某个区块,以至于该区块在数学上不可能被重组 (或至少是经济行不通)。
在有些分叉选择规则里 (例如 Tendermint),重组是不可能发生的;分叉选择规则只通过添加任何已经通过 BFT (拜占庭容错共识协议) 共识、最终敲定的区块来扩展现有的链。在其他分叉选择规则里,重组是很常见的。
在以太坊这样的 PoW 区块链里,我们通常看到的是「最长链规则」(或更准确来说,是「最高总挖矿难度规则」)。这意味着,当客户端看到两条区块链时,它会选择总难度 (即该链里所有区块的难度总和) 最高的那条。
为了方便举例,假设区块难度可以是 100 或 110,想象以下这样的场景:
1、我们从难度为 100 的区块 1 开始同步。
2、区块 2a 和 3a 都以难度 100 到达,我们把它们嵌入到我们的区块链里,构成总难度为 300 的分叉。
3、区块 3b 以难度 110 到达,并声称 2a 是它的父区块,构成总难度为 310 的分叉。分叉选择规则会发现目前「最重」的链是第二个分叉,然后转为选它。这种情况属于 1 个区块的重组,因为只有区块 3a 被改变了。请注意,区块不是直接被丢弃的,因为新到达的区块可能会导致分叉选择转为选择第一个分叉。
4、区块 2b 和 3c 都以难度 110 到达,构成总难度为 320 的新分叉。这意味着分叉选择规则现在将使用 2b 而不是 2a,3c 而不是 3b,区块 2a 和 3b 都曾在上一条权威链里。这种属于 2 个区块的重组。
Terra生态非营利组织LFG的比特币地址再次增持586枚BTC:据OKLink区块链浏览器显示,北京时间4月6日15:29分左右,被标记为Terra生态发展组织Luna Foundation Guard的比特币地址(bc1q9d4ywgfnd8h43da5tpcxcn6ajv590cg6d3tg6axemvljvt2k76zs50tv4q)再次转入586枚BTC,约合2657万美元。目前,LFG的比特币地址持有35,277.98BTC(约合16.02亿美元)。[2022/4/6 14:07:40]
读者应该能看到逻辑是怎么发展下去的。如果一个新区块 4a 到达并声称 3a 是它的父区块,分叉选择规则会转为选第一个分叉,如此类推。
由于延迟,短程的重组经常发生。矿工 A 和矿工 B 可能同时找到一个有效区块,但由于区块是在 p2p 网络里广播的,部分网络可能先看到矿工 A 的区块,而另一部分先看到矿工 B 的区块。如果两个区块的难度相同,就会出现平局,客户端端要么随机选择,要么选先看到的那个区块。通常,当第三个矿工 C 在矿工 A 或 B 构建的区块上构建了一个区块时,另一个区块就会被遗忘。偶尔运气不好还会导致 2-5 个区块重组。比那更长的重组几乎总是由于极端的网络故障、客户端漏洞、或恶意攻击。
短程重组并不致命,但对网络的确仍会带来一些严重的有害后果:
· 节点开销:当一起重组发生时,因为需要转用新的分叉,可能需要重新执行交易或状态编辑,节点会有一些内存和磁盘开销。
· 用户体验下降:可能重组意味着用户需要等待更长的时间,才能安全处理需要「被确认」的交易。这方面的一个重要子用例是交易平台等企业在接受存款前需要等待更长的时间。
· 交易背景的不确定性:当一个用户发送一笔交易时,他们会更不确定该笔交易会在什么背景下执行 (例如,最新的 N 个区块会被回滚吗)。显然,这会使 DeFi 交易更容易出现意外的失败、比预期更糟的交易结果、或有害的 MEV 提取。
· 更容易受到 51% 攻击:在以最长链作为分叉选择规则的系统里,如果区块链从选择 B1 转为 B2 进行重组,那么 B1 的难度不再为链提供安全性。攻击者不再需要击败所有诚实矿工,他们只需击败没被重组的那部分诚实矿工。如果重组进行得频繁,这会使得攻击变容易很多。
在最坏的情况里,频繁的重组会使区块链的结算保证完全失效,并阻止它继续进行。正常来说,对于出块者来说,「激励相容」的策略应该是延长最长的链。但如果某个区块执行后的状态异常有利可图呢 (例如,交易费很高,或只有直接在该区块后构建新区块才能提取 MEV) 呢。这个问题在过去讨论「没有区块奖励的比特币」和自私挖矿问题上探讨过,而在今天「以太坊生态里 DeFi 相关的 MEV" 问题上也探讨过。
Polkastarter将于第三季度增加动态代币销售,取消POLS持仓时间限制:据官方消息,Polkastarter公布第三季度路线图。其中提到将增加动态代币销售,取消POLS持仓时间限制。[2021/7/12 0:45:41]
这些情况都存在很强的动机试图通过与其他区块竞争」窃取「费用,而不是延长权威链。在下面的例子里,区块 1 的执行后状态非常有利可图,且区块 2a 已经被挖了。然而,不是一个,而是三个出块者已经选了在区块 1 上继续挖,而不是区块 2a (以获得区块 1 后显露出的 MEV),这可以扩展到任意数量的出块者。
很明显,这样的模式为恶意 51% 攻击打开了一扇大门。我们把矿工参与这种重组挖矿策略的情况称为」短视理性「,因为决定这样做在短期内可能是理性的。但是,他们都或显式地 (质押者) 、或隐式地 (矿工) 看涨 ETH (因为交易费和区块奖励都是以 ETH 计价的),这意味着这种减少用户对以太坊信任的攻击是与他们的最佳利益有冲突的,因此在长期来说是不理性的。
在 Nakamoto PoW 共识算法里,区块在分叉选择里是被」连续「敲定的。首先,当一个区块被挖,此时一个竞争区块有可能可以对其进行重组。如果一个区块成功被打包进权威链,(平均) 13 秒后会有其他矿工在该区块上构建第二个区块。此时,一条链要重组的话需要有两个竞争区块。随着构建了越来越多的区块,对链进行重组的难度会持续上升,但速度很慢。
以太坊信标链实现的是一个名为 Gasper 的权益证明协议,其分叉选择规则称为 LMD-GHOST。不同于 Nakamoto PoW,在 Gasper 里,参与出块的有两个角色:
· 提议者:负责提议区块的一名验证者
· 证明者:由一组验证者构成,他们对应该成为权威链链头的区块进行投票。证明者的投票被称为」证明 (attestation)",这是他们给区块的「权重」。控制了证明者意味着控制了分叉选择规则。
每 12 秒就有一个 slot,这代表着提议一个区块的一次机会。在每个 slot 里会有一个混洗算法伪随机地选出一个委员会,这个委员会由所有验证者数的大约 1/32 组成,其中每个委员会里的一名验证者会作为提议者,其余的验证者作为证明者。证明者同时对他们认为应该被打包到权威链的区块进行投票。因为委员会是通过伪随机采样组成的,攻击者是没有办法把他们的验证者都集中到一个单一 slot 里的。
当前,信标链有大约 19.6 万名验证者,意味着每个 slot 里的委员会人数大约是 6125。因此,即使是一个区块的重组也是极其困难的,因为一个只控制了一些验证者的攻击者是无法击败数千名诚实的多数验证者的。
为了更好理解为什么是这样,让我们看看以下这个例子:有 2 个 slot 和 24 名验证者,其中 9 名是恶意的。验证者被分成 2 个委员会,经过随机混洗,对手不太可能可以控制他们被分配到的委员会人数的 50%,更不能实现重组。
更正式地说,拥有 p% 质押量的恶意行为者控制 N 名验证者大小委员会的 50% 以上的概率遵循二项式分布 (其中 k = N/2 ):
算出多个质押值的概率后,我们得出下表:
现在我们了解到,攻击者如果想直接进行重组的话需要控制总验证者数的 50%。
如果控制证明者的 25-49% (参阅此论文、或这里的概要),控制者还是可能发起一些更小型的攻击的。但是,对这些攻击已经有修复方法了,它们可以被悄悄执行,从而达到接近 50% 的无条件安全性。
最后,长程重组是不可能了,因为所有比过去两个 epoch 更深的区块都会被认为「最终确定了」,也就是说,对它们进行回滚是不可能的了。如果一个攻击者造成两个冲突区块被最终确定了 (例如,控制了 67% 的质押量),系统需要倒回去,通过社会性干预来恢复。
现在我们了解了在不同的分叉选择规则下重组是如何发生的,不妨通过一个简单的博弈论例子来了解,对于矿工或验证者来说,什么时候运行软件来执行重组以获利是有意义的。
我们可以用收益矩阵非正式地描述每个场景,其中「叛变」意味着「下载并使用执行重组的软件」。收益是「短视的」,没有考虑长期后果。
在最长链 PoW 里,即使是验证者集里的一小部分人,也有可能实现短程重组。执行后状态是异常有利可图的区块总会偶尔出现,即使是 1-10% 的成功几率也值得尝试,与该区块现有的子区块进行竞争。
矿工可以形成一个中型矿池,等待找到未来连续 2-3 个区块的机会,或把部分他们的收入发送到一个任何人都可以认领的合约,以贿赂其他矿工也运行相同的软件,以构建他们的区块链,帮助它击败现有的权威链。
因此,有些矿工可能会尝试运行重组客户端。
在 Gasper 里,重组 1-64 个 slot 是可能的,但需要攻击者控制整个验证者集的大部分 (由于他们不能把他们的押金集中在某个特定的 slot,所以他们的质押量需要足够大才能在他们想要攻击的 slot 里被随机选中)。采用重组挖矿软件用处不大,除非有非常大量其他验证者也同时采用。
因此,如果 51% 的验证者都稍微有点利他主义精神或懒惰,那么没有人会运行重组挖矿软件这件事基本可以确定。
在 Tendermint 里,事情会更加简单:重组是完全不可能的,任何违反单个 slot 最终敲定规则的实现都需要超过三分之一的验证者被罚没。与 Gasper 的情况相似,这也意味着没有人会运行重组挖矿软件这件事基本可以确定。
从上面我们可以看出,尽管在三种情况里采用 "reorg geth" 都是可能的,基于并行证明这个理念的分叉选择规则比 Nakamoto 分叉选择规则带来更稳定的诚实平衡。
在以太坊的语境里,最有效的预防措施是进一步加快合并的工作,特别是赶快发展出能实现可接受的「紧急合并」的能力,以把以太坊转化为 PoS 机制。仓促合并会带来很高风险,还会毁坏基础设施,但如果很多矿工开始对链进行重组攻击的话,还是需要一个可信的承诺来抵御这样的行为。
接近合并的时候就是风险最大的时候,因为矿工仍然主导着这个系统,但他们的时间不多了。然而,有两个因素会缓解这个风险:
· 以太坊矿工经常同时是 (i) 其他区块链的矿工,和/ 或 (ii) 以太坊社区具有其他能力的成员,因此作出良好行为的动机会继续存在。
· 随着合并临近,实现紧急合并的成本和风险都在降低。在预计合并日期的前几个月进行紧急合并是非常具有破坏性的。在预计合并日期的前两周进行紧急合并则能为验证者操作员已经下载好的客户端提供参数设置。
合并后,重组验证将成为一个更小的问题,因为单个验证者或小群体证明者无法独自重组一个区块。成功的重组攻击需要解决让大部分验证者都同时参与进来的协作难题。但是,还是存在一些小风险的。如果想要进一步提高安全性,那么以太坊可以要么进一步调整分叉选择规则,将重组攻击的要求提到到 50% 的理论最大值;要么转为直接单个 slot 实现最终敲定的共识。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。