本文将介绍以太坊合并后可能发生的共识级攻击。

原用标题:比较:以太坊 PoS 和 PoW 安全性

ETH PoS 安全性

本节主要讨论以太坊采用 PoS 共识机制后可能出现的共识级攻击。

来自 Mirror 上的 jmcook.eth 的参考: https://mirror.xyz/jmcook.eth/YqHargbVWVNRQqQpVpzrqEQ8IqwNUJDIpwRP7SS5FXs

小型质押者的攻击

短程重组

这是一种针对信标链的攻击,通常由攻击者对其他验证者隐藏部分信息,然后在特定时刻释放这些信息,以便实现双花或通过预先运行的大型交易提取 MEV。这种攻击也可以扩展到多个区块,但成功的可能性会随着重组长度的增加而降低。

这种攻击本质上是一种区块重组,它分为两种类型:事前重组和事后重组。事前重组意味着攻击者从主链中替换一个尚未创建的区块,而事后重组则意味着攻击者从主链中删除一个经过验证的区块。就 PoS 以太坊的情况,攻击者必须拥有超过 2/3 的区块才能执行事后重组。与此同时,一些研究表明,即使攻击者拥有 65% 的份额,成功攻击的几率也不到 0.05%。

短程重组攻击是通过事前重组来实现的,攻击者不需要控制大部分已质押的 ETH 就可以实现,并且成功的几率会随着所控制的质押比例的增加而增加。

弹跳和平衡

平衡攻击指攻击者采取的特定手段,他们将诚实的验证者集拆分为对区块有不同看法的离散组。具体来说,攻击者等待提出一个区块的机会,当机会到来时,他们在同一个 slot 中提出两个区块。它们将一个区块发送给诚实验证者集合的一半,将另一个区块发送给另一半。分叉选择算法将检测到这种冲突,区块支持者将被执行没收并从网络中驱逐出去。然而,上面提到的两个区块仍然存在,并且将有大约一半的验证者集来证明每一个分叉。攻击者以丧失一个验证者为代价,成功地将区块链一分为二。同时,其余的恶意验证者保留他们的证明。然后,在分叉选择算法的执行过程中,有选择地将有利于一个或另一个分叉的证明释放给足够多的验证者,这允许它们生成具有最多累积证明的任何分叉。这种情况可以无限期地持续下去,攻击者可以在两个分叉上保持验证者的均匀分布。由于两个分叉都不能吸引 2/3 的绝对多数,信标链不会最终确定。

在这种类型的攻击中,由攻击验证者控制的总质押百分比越大,在任何给定时刻攻击的可能性就越大,因为它们更可能选择验证者在每个 slot 中提出一个区块。即使只有 1%,发起平衡攻击的机会平均每 100 个 epoch 就会出现一次,这不需要长时间的等待。

一种类似的攻击,就是弹跳攻击,它只占一小部分。在这种情况下,攻击验证者再次拒绝投票。这一次,他们没有发布投票来保持两个分叉之间的平均分配,而是在适当的时候使用他们的选票来证明在分叉 A 和分叉 B 之间交替的检查点是合理的。这两个分叉之间的证明的翻转阻止了可以在任意一条链上完成的合理的源和目标检查点对,从而终止了最终确定性。

雪崩攻击

另一类攻击被称为雪崩攻击,在 2022 年 3 月的一篇论文中对其进行了描述。作者认为,提议者增强,并不能防御一些变种的雪崩攻击。然而,作者也只演示了对以太坊分叉选择算法的高度理想化版本的攻击 (他们使用了没有 LMD 的 GHOST)。其中,GHOST 分叉选择算法将第一个分叉区块及其所有对应的后代区块所获得的选票进行累积,并选择票数最高的分叉作为主链。

为了发动雪崩攻击,攻击者需要控制几个连续的区块提议者。在每个区块提议 slot 中,攻击者保留他们的区块,并收集它们,直到诚实链与保留的区块达到相等的子树权重。然后,释放被保留的区块,使它们最大限度地模糊。这意味着,例如,对于 6 个保留区块,第一个诚实区块 n 与对手区块 n 竞争创建一个分叉,然后所有剩下的 5 个对手区块都在 n+1 处与诚实区块竞争。这意味着建立在对手区块 n 和 n+1 上的分叉现在吸引了诚实的验证,因为区块在真正诚实的链的重量等于对抗链的重量的时刻被释放。现在可以对尚未构建在其之上的保留区块重复这一操作,允许攻击者阻止诚实的验证者跟随诚实的链头,直到它们的模糊区块被用完。如果攻击者在攻击进行时有更多的机会提出区块,他们可以使用它们来扩展攻击,这样,越多的验证者参与攻击,它可以持续的时间越长,并且可以将更多诚实的区块从规范链中移出。

图片
资料来源:对权益证明 GHOST/以太坊的两次攻击

LMD- ghost 分叉选择算法的 LMD 部分可以缓解雪崩攻击。LMD 的意思是 “最后消息驱动”,它指的是每个验证者保存的一个表,其中包含从其他验证者接收到的最新消息。只有当新消息来自某个特定验证者表中已存在的 slot 之后的 slot 时,该字段才会更新。在实践中,这意味着在每个 slot 中,接收到的第一个消息是它所接受的消息,任何其他消息都是要忽略的模棱两可的消息。换句话说,共识客户端不计算模棱两可——它们使用来自每个验证者的第一个到达的消息,模棱两可会被丢弃,从而防止雪崩攻击。

远程攻击

远程攻击也是权益证明 (PoS) 共识机制下的一种特定类型的攻击,包括两个主要场景:在第一个场景中,攻击者作为参与原始区块的验证者,维护一个单独的原始区块链旁边的区块链分叉,并最终说服诚实的验证者集合在很久以后的某个适当时间切换到它。然而,这种攻击在信标链上是不可能发生的,因为 “finality gadget” 确保所有验证者定期就诚实链 (“检查点”) 的状态达成一致,检查点后的区块不能重新组织。

在第二种情况下,当一个新节点加入网络时,它将从最近的节点 (称为弱主观性检查点) 获取信息来构建一个区块链作为伪创始区块。这为新节点创建了一个 “信任网关”,然后它才能开始自己验证区块。然而,从客户端 (如区块浏览器) 收集构建检查点所需的可信区块信息并不能增加客户端本身的可信度,因此主观性是 “弱” 的。因为检查点的定义是由网络上的所有节点共享的,所以不诚实的检查点是共识失败状态。

验证者控制了大部分的情况

33%

33% 的质押份额是攻击者的基准,因为如果超过这个数量,他们就有能力阻止信标链完成,也无需精细控制其他验证者的行为。它们可以简单地一起消失。这是因为要完成信标链,检查点就必须由 2/3 的质押以太验证。如果 1/3 或更多的质押以太恶意验证或不验证,那么 2/3 的绝对多数就不可能存在。防御这种情况的方法是信标链的不活动泄漏。这是一种紧急安全措施,在信标链未能完成四个 epoch 后触发。不活动泄漏标识那些没有验证或验证结果与大多数相反的验证者。由这些非验证的验证者所拥有的质押以太币会逐渐流失,直到最终它们共同占总数的 1/3 以下,因此链可以再次被完成。

50% 和 51%

理论上,如果恶意验证者控制了 50% 的质押 ETH,他就可以将以太坊区块链分成两个大小相等的分叉。与前面说过的平衡攻击类似,攻击者可以通过为同一 slot 提出两个区块然后简单地使用其所控制的 50% 来投票反对诚实的验证者集来维护两个分叉并防止最终确定性。四个 epoch 之后,两个分叉上的不活动泄漏机制将被激活,因为每个分叉都会看到其一半的验证者无法验证。每个分叉都会抽取另一半验证者集合的质押,最终导致两条链由不同的验证者代表 2/3 的绝对多数。在这一点上,唯一的选择就是依靠社区恢复。

相比之下,当攻击者控制了 51% 以上时,他们就可以控制分叉选择算法。在这种情况下,攻击者将能够通过多数票进行验证,从而使他们有足够的控制权来进行简短的重组,而不需要欺骗诚实的客户。51% 的份额不允许攻击者改变历史,但他们有能力通过应用他们的多数票有利的分叉和/或重组不方便的不合理的区块,以此来影响未来。诚实的验证者会效仿,因为他们的分叉选择算法也会将攻击者青睐的链视为最重的链,因此链可以最终确定。这使得攻击者能够审查某些交易,进行短程重组,并通过对区块进行有利的重新排序来提取最大 MEV。针对这种情况的防御措施是,攻击者将多数质押置于风险之中,因为社交层很可能介入并采用诚实的少数质押,从而使攻击者的质押大幅贬值。

66%

拥有 66% 或更多的质押以太的攻击者可以完成他们的首选链,并且他们不必强迫任何诚实的验证者。攻击者可以简单地为他们喜欢的分叉投票,然后完成它,他们可以以不诚实的绝对多数进行投票。作为绝对多数质押,攻击者将始终控制最终区块的内容,拥有消费、回滚和再次消费、审查某些交易和随意重组链的权力。攻击者实际上是在购买进行事后重组和最终性还原 (即改变过去和控制未来) 的能力。这里唯一真正的防御是退回到社交层以协调采用替代分叉。

总的来说,尽管存在这些潜在的攻击向量,信标链的风险还是很低的,甚至比它们的工作量证明等价物更低。这是因为攻击者需要冒着质押 ETH 的巨大成本风险,来压倒拥有投票权的诚实验证者。内置的激励层可以防止大多数恶意行为,特别是对低风险的攻击者。更微妙的弹跳和平衡攻击也不太可能成功,因为真实的网络条件很难对特定验证者子集的消息传递实现细粒度控制,而客户端团队已经用简单的补丁快速修复了已知的弹跳、平衡和雪崩攻击问题。

然而,33%、51% 或 66% 的攻击可能需要社区投票来解决,因此有效的社区治理对攻击者来说是一个强大的抑制因素。对于攻击者来说,技术上成功的攻击仍然有被社区阻止的风险,这降低了攻击者获得足够利润以充当有效威慑的可能性。这就是为什么保持一个具有一致价值观的有效社区对投资那么重要。

ETHPoW 安全性

矿工自以太坊成立以来一直扮演着重要的角色,但以太坊的合并将打破这一局面。Bitpro 估计,GPU 矿工需要关闭约 95% 的 GPU,才能在合并后的加密生态系统中保持盈利。但由于合并后不太可能立即关闭这么多 GPU,矿工会在合并后尝试 PoW 分叉。如果一些交易所也支持分叉,那么分叉的寿命将比预期的要长。到目前为止,一些机构已经支持了 ETHPoW 硬分叉,包括 Gate、OKX、f2pool、Matcha、BitMEX 和 Justin Sun。

2022 年 8 月 15 日,Ethereum Pow 在推特上发布消息称,ETHW Core 的初始版本已经在 GitHub 上发布,主要功能如下:1. 禁用难度炸弹;2. EIP-1559 变更,基本费用改为由矿工和社区共同管理的多签名钱包;3. 调整 ETHW 的初始挖矿难度。

2022 年 8 月 26 日,Ethereum PoW 在推特上发布了 ETHW 的第一个测试网 “iceberg”。随之而来的是区块链浏览器和 RPC 服务器。他们欢迎社区中所有潜在的合作伙伴 (交易所、池、钱包提供商、桥、建设者等) 加入到构建一个真正的 POW 驱动的以太坊生态系统中来。

那么,以太坊合并后硬分叉 ETHPoW 可能会面临哪些安全问题呢?我们将在下面详细分析。

算法攻击

当系统中的恶意单个实体或组织能够控制大部分(即超过 51%)的全网算法时,51% 算法攻击是对区块链网络的潜在攻击。由于 PoW 算法中的共识是由算法决定的,这使得攻击者可以利用算法篡改账本,从而导致对系统的恶意攻击。以太坊合并后,无法再通过挖矿获得收入的矿工将关闭他们的矿机,这导致基于 POW 的 ETH 分叉可能失去一些算力,例如,目前最大的矿池 Ethermine 已经发布公告,将停止支持 ETH PoW 挖矿。

一旦支持 ETHPoW 的算力下降,就会降低攻击者发起算法攻击的代价。然后攻击者可以租用矿池的大量算力,使其算力达到 51% 以上,此时,它可以利用算力优势更快地生成区块,当生成的区块成为系统中最长的链时,它可以回滚区块交易,实现数据篡改,这会造成很大的危害,如:双花,任意地址控制交易等。

双花

双花攻击是指攻击者试图重复消费其账户拥有的相同数字代币。一个例子:

假设 A 在区块高度 1000 处有 51% 的算力。A 向 B 转 1 个 ETH,转移交易由矿工打包。

交易确认后,A 依靠 51% 的算力优势,在区块高度 999 后重新生成一条 “更长的链”,并在区块高度 1000 时将 ETH 重新转移给 C,并打包交易记录,即链中包含 A 向 C 转移 ETH 的记录。

根据 “最长链共识”,包含转移到 C 的记录的链成为主链,从 A 转移到 B 的一个 ETH 为 “无效支付”。

控制任何地址的交易

利用 51% 的算力,攻击者可以在任意地址打包或解包交易,阻止区块确认任意交易,甚至阻止部分矿工获得有效的记账权,从而达到控制任意地址交易的目的。

但是拥有 51% 的算力并不是万能的,例如它不能修改别人的交易记录,也不能阻止交易的发出,也无法凭空产生 ETH。

重放攻击

在传统术语中,重放攻击指的是攻击者发送一个已经被目标主机接收到的数据包,以达到欺骗系统的目的。在区块链领域中,重放攻击通常发生在区块链硬分叉的情况下,这意味着 “一条链上的交易在另一条链上通常是合法的”。

2016 年 7 月 20 日,以太坊在第 192 万个区块高度发生硬分叉,产生了两条链,分别称为 ETH 链和 ETH Classic 链,对应的代币分别为 ETH 和 ETC。

由于这两个链上的地址和私钥是相同的,而且交易格式完全相同,因此其中一个链上的交易在另一个链上也是完全合法的。在一条链上发起的交易,如果在另一条链上重放,可能也会被确认。由于事先没有适当的计划,许多人利用这一漏洞,不断地在交易所存取款,以获得额外的 ETC。因此,“重放攻击” 在区块链世界中被重新定义。

目前以太坊合并中可能出现的硬分叉 ETHPoW,理论上也可能存在上述问题。

应该做什么来防止重放攻击? 事实上,很容易达到以升级为目的的分叉,因为硬分叉升级会使用不同的客户端版本,并且交易的前缀通常包含发起交易的客户端的版本信息。分叉之后,矿工通常会拒绝某个版本之前的交易,以避免打包来自老客户端的 “非法交易”(不是恶意交易,只是不被其他节点识别的低版本号),这使得恶意攻击者很难在硬分叉升级期间通过重放攻击窃取资金。

2022 年 8 月 23 日,EthereumPoW 正式发布第二次代码更新以强制执行 EIP-155。在此更新之后,所有交易都必须使用链 ID 进行签名。这将保护 ETHW 用户免受来自 ETHPoS 和其他分叉代币的重放攻击。

下面是对 EIP-155 的简要介绍:

该提案被称为 “简单重放攻击保护”。如果 block.number >= FORK_BLKNUM 和 CHAIN_ID 可用,那么在计算签名交易的哈希值时,不要只对前六个 rlp 编码元素(nonce、gasprice、startgas、to、value、data)进行哈希处理,而应该哈希九个 rlp 编码的元素(nonce、gasprice、startgas、to、value、data、chainid、0、0)。此时,签名中 v 的值不再是 recid,而是 recid+ chainID*2+ 35。

因此,简而言之,签署交易时需要 Signer 和 PrivateKey。需要 Singer,是因为在 EIP-155 修复重放攻击漏洞后,需要保持原有的区块链签名方法不变,但需要提供新版本的签名方式。因此,新旧签名方式通过一个接口实现,根据区块高度创建不同的 Signer。在 EIP-155 中实现的新哈希算法的主要目的是获取交易用于签名的哈希值 TxSignHash。与旧的方法相比,哈希计算混合了链 ID 和两个空值。注意,这个哈希值 TxSignHash 并不等同于 EIP-155 中的交易哈希值。

这样,一个签名交易可能只属于唯一标识的区块链。

另外,为保证项目安全,建议项目在合约中进行离线签名验证时,签名数据应包含 Chain ID,避免跨链签名重用造成资产损失。

应用层项目

实际上,传统的分叉是需要用算力做选择的,而选择的主角是矿工,而这一次,如果真的同时有两个以太坊链,需要做出选择的是整个以太坊生态系统。这里的项目方是用户和投资者。

今天的以太坊和 2016 年的硬分叉相比已经不可同日而语了,DeFi 项目已经占据了以太坊生态圈的大部分,但 DeFi 的基础是链上资产,所以项目主要是沿着资产端。资产端是 USDT、USDC 等稳定资产,而 DeFi 的质押或者借贷项目基本都是以资产端为主。

对于这些稳定资产 (这里主要指稳定币) 的发行者来说,如果以太坊分叉发生,他们将突然面临一个问题——两个版本的稳定币。作为稳定币的发行人,每发行一枚稳定币,就会突然有两份债务义务。

虽然大多数人认为稳定币发行者会将新的 PoS 链视为 “真正的” 以太坊网络,但如果他们想要支持 PoW 链呢? 毕竟,他们有足够的经济动机这么做。

例如,他们可以做空 PoS 以太坊代币,在 PoW 网络上宣布赎回,并赚取数十亿美元。这可能会破坏新的以太坊网络,协议、交易所和相关的 DeFi 项目被关闭。这将造成巨大的混乱,并可能大规模摧毁加密货币市场。

同样,以太坊分叉项目 EthereumPow 在 8 月 17 日发布推文称,ETHW Core 将引入流动性池冻结技术来保护用户资产。因在以太坊 PoW 硬分叉之后,特别是前几个区块,用户存放在流动性池中的 ETHW 代币,如 Uniswap、Susiswap、Aave、Compound 等,将被黑客利用,以废弃或无价值的方式交换或借 USDT、USDC、WBTC,这将对整个网络和社区造成巨大的破坏。因此,ETHW Core 暂时冻结了一些 LP 合约,以保护用户的 ETHW 代币,直到协议的控制者或社区找到更好的方法来返还用户的资产。冻结不适用于仅涉及单一资产的权益合约 (如 ETH2.0 存款合约和打包以太币)。ETHW Core 建议每个人都在硬分叉之前从 LP(如 DEX 和贷款协议) 中撤出 ETH。

免责声明:作为区块链信息平台,本站所发布文章仅代表作者及嘉宾个人观点,与 Web3Caff 立场无关。本文内容仅用于信息分享,均不构成任何投资建议及要约,并请您遵守所在国家或地区的相关法律法规。