针对Casper FFG共识协议的安全性问题,以太坊联合创始人Vitalik撰文表示:“(注:在以太坊应用Casper FFG共识协议后),无论哪种情况,51%攻击对于(以太坊)社区来说都是一个欢乐的时刻,因为想要造成1天或1周的破坏,攻击者被消耗的ETH将是以年总产量为代价的,这反过来会增加ETH的价值,从而使未来的攻击变得更为昂贵。”
(译者注:Casper FFG是以太坊2.0在阶段0将会采用的共识机制)
以下是译文:
对共识系统执行51%攻击的成本虽然很大,但它并非是无限的,因此51%攻击的风险始终存在。此外,如果攻击成功,想要在“协议内”实现恢复是非常困难的,而且往往是不可能的。在工作量证明(PoW)系统中,成功的51%攻击是有利可图的,因此攻击可无限循环进行,而针对ASIC工作量证明(PoW)系统的攻击,可变得更便宜。而在权益证明(PoS)系统中,成功的51%攻击可阻止新的存款。
这些事实告诉我们,必须要有一个连贯的策略来应对51%攻击,使得链能够恢复正常运行。这种策略不会经常使用,它的存在也许足以阻止攻击,因此其存在是需要的。正如我们将看到的,基于存款的PoS在一定程度上是高度安全的,因为任何51%攻击,都会给攻击者带来极高的经济损失。
最终确定性逆转攻击
最终确定性逆转(Finality reversion)是目前为止被谈论最多的一类51%攻击,而在PoS系统中,这是最容易被处理的一种攻击。
很容易处理的原因是,它正是Casper FFG的“经济最终确定性”机制的设计初衷:BFT最终确定性的整个要点是,要最终确定两个冲突的区块,必须有一个a ≥ 1/3 ∗ |V| 相交验证者(intersection)集( |V|作为活跃验证者集的大小)签署了两条互相矛盾的消息,因此可在两条链上进行罚没(slash)操作。
注意,客户端实现的分叉选择规则会阻止逆转已完成的区块。因此,如果在上面的场景中,上面的链是在下面的链之前完成,那么在线客户端都将停留在上面的链上。只有离线客户端在返回在线状态时才会看到两个供选择的链。因此,离线客户端需要联系社区(或者称为“社区层”或“附加协议恢复”),以询问哪条链是合法的。我们称之为一个次要的附加协议负担(minor extra-protocol burden):在线节点有一个自然而然的正确选择,只有少数几个节点需要询问已经达成的共识。
更困难的情况是两条链同时完成:攻击者需要严重操纵网络(当然是有可能的!),一次成功的攻击需控制超过1/3 ∗ |V|,至少1/2 ∗ |V|,甚至可能需要2/3 ∗ |V|。此外,客户端在一个区块完成后会等待1分钟,然后才将该区块中的交易显示为已完成,这将使得此类攻击在实际执行双花攻击时的用处大大降低。然而,这种双终结性攻击仍然可用来造成混乱。
从这种攻击中恢复的最简单方法:用户选择支持LMD GHOST分叉规则的链,只考虑未被罚没的验证者。然而,在一种边界情况下,链A赢得了LMD GHOST分叉选择规则,但链B稍早完成,这就会出现无法确定哪条链应占主导地位的情况。
因此,一个愿意且能够同时完成两个链的攻击者,可要求社区聚集在一起,任意选择一条链或另一条链(我们可称之为一个主要的额外协议负担(major extra-protocol burden)),尽管代价对攻击者而言是非常高的。
无论哪种情况,攻击者被罚没的验证者都应该≥ 1/3 ∗ |V|,这将导致数百万以太币的惩罚。因此,攻击者可能会中断交易,并要求社区进行商议,以及让用户手动更新其客户端,但代价会是极高的,这使得此类攻击的发生非常困难,而且非常罕见。
验证者审查攻击
另一种更困难的51%攻击是审查攻击。交易审查并不是一个大问题,因为我们假设最终会有一个友好的验证者会将任何给定的交易打包到一个区块中。相反,我们更关注的是验证者的审查。验证者的审查可能会有很多原因,而最可能的两个原因是(i)审查那些拒绝合作的验证者,以及(ii)阻拦攻击(discouragement attack)。
审查是更为棘手的,因为没有“罚没条件”可以检测到它:审查的本质是,不包含你想要包含信息的行为。事实上,从不在线的任何验证者或客户端的角度来看,A 审查B,和B不与A交谈是不可区分的(这有时被称为说话人-听话人故障等效问题),了解有关此的更多信息,请参阅 https://vitalik.ca/general/2017/07/16/triangle_of_harm.html
然而,在线节点是可以检测到审查行为的,因此,我们面临的挑战是处理“边界条件”,并确定何时审查是足够糟糕的,以至于协议外干预及处理不可避免出现边界条件的挑战,是值得的。
让我们区分两个案例:首先是,审查集大于1/3 ∗ |V|,也就是说,介于1/2和2/3的验证者正在审查另一部分,并在这些验证者无法包含其消息的地方建立一条链。因为少于2/3的验证者在同一条链上,没有区块会被最终确定,在攻击者的链上,攻击者没有损失任何金钱(但也没有获得任何回报),但受害者会损失他们大部分的存款。
受害者唯一的求助渠道是一个“少数派软分叉”(minority soft fork),然后将审查链列入黑名单,并继续在自己的链上工作。这种“少数派软分叉”可自动化进行:如果一条链不接受你的证明,在fork选择中会自动取消其优先级,最终它将不再显示为主导。
攻击者将无法加入两条链,因为在每个epoch周期中,每个验证者只能选择一条链参与,否则它们将遭到罚没。最终,两条分叉链都将完成一个区块并恢复正常,在少数链上,攻击者将损失其存款的很大一部分(至少一半)。
一个聪明的少数派群体,甚至可等到攻击者的链证明一个新区块,然后,少数派 可开始建立他们自己的链,如果他们这样做了,攻击者在不承受NO_SURROUND罚没条件的情况下,将无法加入少数派的链。
而如果攻击者没有加入少数派链,他们将损失约一半的存款。
现在,让我们考虑第二个案例,这个案例会比较温和。攻击者需控制2/3 ∗ |V|的验证者集,并审查剩余《1/3 ∗ |V|的验证者集,或者攻击者执行上述攻击,但方式要更为温和(每十个区块完成一次攻击)。在这种情况下,有两种解决方案。首先,可尝试协调外部代币持有者加入和解封验证者。如果攻击链拒绝了他们的存款,那么这个事实将对所有人都是可见的,并将崩溃成与前一个案例相同的场景。第二,仍然可协调少数派软分叉,阻止攻击者使用上述技术加入少数链。
请注意,这两种技术,都依赖于诚实的少数人之间某种形式的协调,以确定值得拉黑的链是什么。人们可简单地依靠社区层(social layer)来实现这一点,即使社区层做出不利于攻击者的决定,也会使得期望中的攻击代价变得高昂。
另外,我们可想象创造工具来协助协调。一个简单的例子是这里提出的99%容错共识提议:https://vitalik.ca/general/2018/08/07/99_fault_tolerant.html ,其可以在网络延迟相当低的在线节点之间创建共识。
总结
在最终确定性逆转攻击的情况下,我们已经知道攻击者可能会遭到罚没,因此攻击可能会是非常昂贵的(惩罚将是数百万ETH)。而试图控制区块的创建,以便在攻击后在哪条链上继续进行额外的协议协调攻击,其代价会更加高昂。相比之下,审查攻击会更具挑战性,因为如果社区没有反应,它们会“默认”成功并造成伤害(尽管客户端可实现拒绝审查似乎过多的链),而这种攻击可通过协议外的“少数派软分叉”共识解决,该“少数派软分叉”巧妙地使用了NO_SURROUND罚没条件,将注意力集中在攻击者无法合法加入的链上。
无论哪种情况,51%攻击对于(以太坊)社区来说都是一个欢乐的时刻,因为想要造成1天或1周的破坏,攻击者被消耗的ETH将是以年总产量为代价的,这反过来会增加ETH的价值,从而使未来的攻击变得更为昂贵。此外,这可以通过软分叉或分叉选择规则功能来解决,而不需要硬分叉来手动取出攻击者的币。
来源: 巴比特
评论
查看更多