EIP-7657:保护以太坊的同步委员会

本文深入探讨了以太坊轻客户端的必要性及其在区块链中的功能,重点分析了EIP-7657提案对增强轻客户端安全性的重要性。通过引入新的惩罚机制,以防止恶意同步委员会成员提供错误信息,从而提升了轻客户端在处理跨链交易时的可靠性,保障了去中心化应用的正常运行。同时,文章还探讨了轻客户端在跨链桥和钱包中的应用场景以及潜在的安全性问题。

轻客户端在区块链环境中至关重要,因为它们能够在不下载整个链信息的情况下验证交易或状态。然而,以太坊网络上的轻客户端依赖每27小时随机重新选择的同步委员会,以跟随正确的区块。

EIP-7657 是一项以太坊改进提案(EIP),引入了一种针对恶意同步委员会消息的罚没条件。通过签署恶意的信标区块根,同步委员会成员可以欺骗轻客户端。向轻客户端提供错误信息可能导致依赖轻客户端的桥接被利用。这使得轻客户端容易受到恶意同步委员会成员的攻击。本分析旨在剖析 EIP-7657 在提升以太坊网络上轻客户端的安全性和可靠性方面的价值。

目录:

  • 引言 - 节点和客户端
  • 什么是轻客户端?
  • 轻客户端使用案例
  • 示例:比特币 SPV
  • PoS 的问题
  • LMD-GHOST:选择分叉算法
  • Altair
  • 解决方案:同步委员会
  • EIP-7657 提出的内容
  • EIP-7657 之后欺骗轻客户端的成本
  • 开放研究主题

引言 - 节点和客户端

让我们从头开始。以太坊是一个分布式网络,由相互通信的计算机组成。这些网络参与者,即计算机,被称为节点。为了与以太坊网络集成,节点必须运行称为客户端的软件。“节点”和“客户端”这两个词有时可以互换使用,但在本报告中,“节点”指计算机,“客户端”指节点的软件。根据不同的目的,节点和客户端有多种类型,例如:

  • 完整节点
  • 存档节点
  • 验证者节点
  • 轻节点

同步委员会与轻客户端有关,但在深入讨论轻客户端之前,我们先回顾一下这些节点类型。

完整节点: 完整节点检查每个由验证者发布的区块,以确定该区块是否有效。如果有效,完整节点会将其添加到账本末尾。完整节点存储从创世区块开始的每个区块和交易的完整数据,但它们仅保留最近128个区块的状态信息。它们的主要功能是验证区块,而不是维护整个区块链的状态历史。

完整节点运行两个客户端,执行客户端和共识客户端。执行客户端负责交易处理、交易传播、状态管理以及支持以太坊虚拟机,而共识客户端负责区块构建、区块传播和处理共识逻辑。

存档节点: 存档节点负责维护区块链的历史档案。它们验证并存储从创世区块起的每个区块。由于区块链数据的巨大规模,存档节点需要比完整节点更强大的硬件。截至2024年5月,以太坊数据的大小约为3.5TB。存档节点可以被视为存储任何历史时间点下所有状态的完整节点。

验证者节点: 验证者节点是满足质押32 ETH以成为验证者的完整节点。除了完整节点的执行客户端和共识客户端外,它们还运行验证者客户端。这使得它们能够生成区块,并在轮到它们时向完整节点发布这些区块。

轻节点: 轻节点只下载区块头,而不是所有区块数据。这些头部包含有关区块的摘要信息。与完整节点类似,轻节点运行双客户端结构:轻执行客户端和轻共识客户端。轻客户端负责通过检查区块头来验证数据的正确性。由于轻客户端不需要下载所有链数据,它们可以在手机、网络浏览器或钱包扩展中运行,使其成为与区块链交互的最具成本效益的方式。

什么是轻客户端?

轻客户端不在本地存储整个区块链,也不独立验证所有更改。相反,它从提供者(可能是完整节点或集中的 RPC 服务器)检索必要的区块链数据。轻节点然后验证这些数据,以保持与最新的区块链信息同步。通常,轻节点只处理区块头,偶尔下载完整区块内容。因此,它们不验证区块的有效性,这就是为什么轻客户端不如完整客户端安全的原因。轻客户端有几种类型,按照它们验证的数据进行分类:

  • 共识验证者
  • 状态验证者
  • 数据可用性(DA)验证者
  • 完整验证者

轻客户端使用案例

桥接

轻客户端的主要用例之一是创建桥接。考虑一个在以太坊和另一个区块链(例如链X)之间的桥接。由于无法直接从一个链转移资产到另一个链,桥接会在出发链上锁定资产,并在目标链上铸造等量的资产。新铸造的资产会被发送给用户,例如,Alice,她将她的资产发送给出发链上的桥接合约。此设置的关键在于确保Alice确实将她的资产发送到相应的智能合约。在她发送等量资产之前,她不应能够收到新铸造的资产。

因此,链X上的合约必须确定Alice确实将ETH发送到以太坊上的合约。证明这一点的最不安全的方法是创建一个多签名层,即链X上的合约仅在一组多签名钱包签署者确认Alice在以太坊上发送了ETH时才铸造代表性ETH。这是一种非常集中的方法;委员会可能会审查某些用户或允许恶意用户铸造ETH而根本没有发送任何ETH。

另一种方法是在线验证Alice的交易。得益于许多区块链的虚拟机结构,它们可以像小型计算机。例如,可以通过支付与计算复杂度相关的Gas费用,在区块链上利用以太坊节点的计算能力进行一些基本的数学计算。如果区块链能够像计算机一样工作,那么可以创建一个直接连接到另一条链的节点的智能合约,并读取合约以验证Alice是否发送了ETH。然而,这种方法也不可取,因为它依赖于一个节点,使其与多签名设置一样严重中心化。例如,该节点可以通过提供缺失或错误的信息来欺骗桥接合约,以利用桥接。

人们可能会问,如果可以把区块链当作计算机,为什么桥接合约不在链上运行它们自己的另一条区块链节点呢?这是可能的,但在Gas费用方面成本过高,使其效率低下。即使Gas消费是固定的,数据存储也是另一个问题,因为链的数据可能达到数TB。然而,这一构思引出了另一种解决方案:轻客户端。

在线上运行完整的区块链客户端是不切实际的,但运行轻客户端则可行。由于轻客户端只下载区块头而不下载区块自身,它们不需要像完整客户端那样大量的数据存储和Gas消耗。因此,合约可以验证用户是否将资产发送到另一条链的合约。这些类型的桥接被称为轻客户端桥,已知是最安全的桥。然而,由于运行一个轻节点所需的Gas更多,这使得它们相比于多签名钱包支持的桥更加昂贵。

钱包

钱包的安全问题与桥接一样重要,而它们可以通过使用轻客户端来提升安全性。为了理解轻客户端对钱包的重要性,我们来看一个 Etan Kissling 在其演讲 "次合并后的轻客户端" 中给出的例子,演讲时间为2022年 Devcon 博哥塔。

想象一个场景,其中某人(我们称他为Bob)正向你支付 0.5 ETH。你给了他你的地址,然后他签署了交易。然后他声称他犯了一个错误,实际上发送了 5 ETH 而不是 0.5 ETH。你使用 Metamask 或其他钱包检查你的余额,看到他确实发送了 5 ETH。作为一种道德回应,你又退回了 4.5 ETH。一段时间后,你再次检查你的钱包,发现你的余额没有增加 0.5 ETH,而是与之前相比减少了 4.5 ETH。那么这怎么可能发生?

钱包从节点获取信息,正如每个在链上工作应用一样。每个钱包连接到节点以读取用户余额并在应用中显示,同时将用户的交易请求送往链上。在这种情况下,可能会出现一些缺陷。第一种情况是Bob以某种方式更改了你钱包的连接节点。多数钱包应用给用户选项可以选择其通信的节点。在那种情况下,Bob可能会将你的钱包连接到一个恶意节点,谋取利益。因此,那个节点提供了虚假信息,显示错误的余额。引起这种情况的几个因素可能是,恶意节点故意给出故障信息,或者节点开始跟随了一个非规范链的分叉等等。第二种情况是没有更改钱包的连接节点,即使用钱包设置的默认节点。在这种情况下,节点不太可能提供虚假的余额信息来获取利益,因为该攻击场景是特定于用户的。然而,由于错误,该节点仍可能提供不正确的余额信息。

然而,你不需要担心你的钱包连接到的节点是否存在问题。由于轻客户端不处理整个区块链数据,你可以在自己的计算机、智能手表或甚至在网络浏览器上运行它们。对于以太坊网络,进行同步通常只需几秒钟,通常需要几GB的可用空间。一旦你拥有一个运行良好的轻客户端,你可以轻松地将你的钱包连接到你的轻客户端,避免来自第三方的风险。

示例:比特币 SPV

虽然轻客户端还有很长的路要走,但它们并不是新概念。第一个轻客户端的例子在比特币白皮书中被提到,称为简化支付验证(SPV)。为了理解 SPV 的工作原理,让我们回顾比特币的区块结构。

比特币区块由区块头和该区块内的交易组成。区块头包含交易的梅克尔根,而 SPV 允许通过检查交易的梅克尔根和梅克尔路径来验证交易是否被验证。这比检查区块中的每笔交易要容易得多。

梅克尔树是用哈希函数构建的数据结构,能够创建数据的摘要。哈希函数有两个主要特性:首先,它们是不可逆的,这意味着无法从输出确定输入。其次,它们是单射的,这意味着不同输入的输出是不同的。比特币协议使用 SHA-256,该函数产生 256 位的输出,无论输入的大小如何。欲了解更详细的信息,请查看 “Verkle Trees for the Rest of Us - Part 1.” 部分关于梅克尔树的内容。

要生成区块的梅克尔根,首先,将区块中的每一笔交易进行哈希。然后,将这些哈希进行配对并再次哈希。这个过程一直持续到最终哈希输出到达。该过程的最终结果称为该梅克尔树的梅克尔根。下面是一个包含 8 笔交易的例子。请注意,通常情况下,一个比特币区块包含超过3,000 笔交易。

这里,我们有从 A 到 H 的 8 笔交易,称为梅克尔树的叶子,每一笔交易都作为 SHA-256 函数的输入,并产生哈希H(A)H(H)。然后,这些哈希的每一对结合在一起并进行哈希,直到达到H(ABCDEFGH)。请注意,为了避免混淆,我们省略了括号中的函数符号 H。在此上下文中,_H(AB)_意味着 H(H(A)H(B)),反之亦然。该树中每个输出H 被称为一个分支。

要检查某一笔交易,例如 C,是否在区块中,可以下载区块头和所有交易(在这个例子中包括 8 笔),并生成梅克尔根以查看它们是否匹配。然而,这可能需要时间并消耗存储。相较于下载所有的叶子,可以使用特定的分支来验证该交易;这被称为梅克尔路径。例如,为了验证交易 C 是否在梅克尔根中,你只需要 D、H(AB)H(EFGH)。通过将这些与 C 结合,可以生成梅克尔根,并检查其与区块是否一致。以下是一个示例:

在这个示例中,绿色是到达梅克尔根所需的分支,而蓝色的是可以利用黄色的知识计算的分支。因此,与其下载所有区块数据,下载三个哈希输出(每个 256 位)就足够了。这正是 SPV 的工作方式。它只下载梅克尔树的相关分支和链的梅克尔根,然后检查需要验证的交易是否匹配。由于哈希函数的“随机化”结构,如果交易发生轻微变化,则整个梅克尔路径和梅克尔根将会完全不同,并且由于它是单射的,不可能使用另一条梅克尔路径生成相同的根。

在上述示例中,我们有 8(即 2^3)笔交易,而 SPV 只需要三个分支来验证一笔交易。这并不是巧合;要验证包含 N 个叶子的梅克尔树,仅需 log_2(N) 分支。要证明这一点,很容易看出,对于每一层,我们需要一条额外的分支以达到根。具有 N 个叶子的树意味着有 log_2 N 层可到达根。在我们的示例中,叶子的数量是 2 的幂。人们可能会问,如何构建一个叶子数不是 2 的幂的梅克尔树。解决方案是,如果叶子或分支没有邻接,则与自身进行哈希。使用这种方法,对于任意数量的叶子(在此情况下是交易)构建梅克尔树是可能的。

如上所述, SPV 可以通过仅检查梅克尔路径,确定某个交易是否在 N 笔交易的区块中有效。目前,比特币区块的平均大小约为 1.5MB,平均每个区块的交易数量约为 3000。因此,为了检查某个交易是否有效,SPV 需要下载 log_2 3000 ≈ 12 个哈希输出。由于每个 SHA-256 输出是 256 位(32 字节),SPV 需要下载 12 * 32 = 384 字节,而不是下载整个区块数据的 1,500,000 字节。这证明了轻客户端的高效性。

SPV 的一个问题是存在多个不同的链。在这种情况下,SPV 节点必须决定哪个是规范链。得益于工作量证明(PoW)链的特性,SPV 节点可以通过检查最长链轻易判断这一点。如果节点想通过提供不正确的信息来欺骗 SPV,它需要在末尾添加一个失效的区块,但它必须以自己的计算能力“挖掘”该区块,而所有节点都在试图挖掘真实的区块。即使恶意节点偶然先于其他节点挖掘出欺诈性的区块,它还必须找到下一个区块才能使自己的链变得更长, 这在没有超过 50% 的所有资源的情况下是不可能的。因此,在 SPV 跟随最长链时,几乎不可能欺骗它。然而,对于基于 PoS 的链来说,情况并非如此。

PoS 的问题

在深入讨论问题之前,让我们先快速回顾一下以太坊的一致性机制:

在 2022 年之前,以太坊的一致性机制基于 PoW,和比特币一样。在合并后,这一机制发生了变化,从那以后,区块的有效性通过 PoS 决定。验证者类似于 PoW 中的矿工;然而,区块生成过程并不完全相同。在以太坊网络中,每个运行完整节点的参与者都可以通过质押 32 ETH 并运行验证者客户端来成为验证者。目前,已经有超过100万个 验证者。

以太坊的时间由纪元和插槽组成。每个纪元由 32 个插槽组成,每个插槽对应 12 秒。本质上,插槽是用于区块的潜在空间。每个插槽可以有零或一个区块。区块生成是如何工作的?在每个纪元的开始,所有验证者被分配到插槽中,使得每个插槽负责的验证者为 1/32。因此,每个验证者在每个纪元中被分配一个区块。此外,针对每个插槽,提议者是通过 RANDAO,这是以太坊使用的随机数生成协议,以伪随机方式选择的。请注意,一个插槽的提议者不是从那个插槽的验证者中选择的。相反,对于每个插槽,提议者是从所有验证者中选择的。因此,提议者提议的区块与其认证的插槽相同的概率为 1/32,而提议者负责提议不同插槽区块的概率为 31/32。

提议者的职责是用等待的 mempool 中的交易创建区块,并更新以太坊状态。之后,它将候选区块的信息通知分配给该状态的所有验证者,然后,如果验证者看到候选区块有效,他们就会使用其验证密钥通过签署认证消息来证明该区块。如果提议者试图欺骗网络,他们将失去部分或全部质押的 ETH。

然而,由于网络的去中心化结构,在分发区块时可能会出现一些问题。例如,假设Alice负责提议当前纪元的区块 15,而Bob负责区块 16。Alice签署了一个有效的区块并将其分发到网络。然而,由于连接问题,Bob可能没有收到该区块。在这样的情况下,他该怎么办?他不能等Alice的区块,因为他只有 12 秒的时间来生成他的区块,但他需要Alice的区块头来创建他的区块。在这种情况下,Bob创建了一个带有区块 14 的头的信息来代替区块 15。这是一个说明:

这意味着,他实际上是在插槽16中生成了区块15。在这里,下一个提议者必须顺从Alice的区块或Bob的区块。这将导致分叉。Alice和Bob都不是恶意行为者,这种情况是由于连接的局限性导致的,因此他们都不会被罚没。比特币网络通过遵循最长链来处理这种情况,如 SPV 部分所提到的。与工作量证明不同,生成一条对恶意行为者有利的较长链不需要超过 50% 的全部计算能力。一组验证者可以创建一条从而欺骗轻客户端的较长链,带有错误区块。这类攻击被称为远程攻击。

为了防止远程攻击,以太坊协议使用了检查点。由验证者签署的认证消息在原始其视图的最后检查点的能够发出时,除了它们对提议区块的投票。每个纪元都有一个检查点,通常是该纪元的第一个区块。如果该纪元的第一个区块无法到达验证者,他们会引用作为该纪元检查点的上一个接受的检查点。

如果某个检查点被 2/3 的验证者接受,那么该检查点的前一个区块将被标记为合理。如果另一个检查点在合理的检查点之后变为合理,那么该合理检查点及其前面的区块将被最终确定。如果有两个区块作为候选检查点,并且它们的有效处理数都未达到 2/3 的阈值,则将使用选择分叉算法(如下面所描述)来决定检查点。如果一个区块被最终确定,那么它极不可能是一个恶意区块。为了创建一个替代的最终确定链区块,攻击者需要控制 2/3 的全部质押 ETH。这是以太坊共识所依赖的经济安全。

LMD-GHOST:选择分叉算法

在以太坊网络中,确定规范链的过程与最长链规则有所不同。以太坊并没有简单地遵循拥有最多区块的链,而是采用了一种称为“最新消息驱动贪婪重链”的分叉选择规则(LMD-GHOST)。

LMD-GHOST 算法通过分析与跟随分叉的区块关联的认证数量(实质上是来自验证者的投票)来工作。当分叉发生时,该算法不仅仅依靠计数区块来确定要遵循的链。而是,它观察每一个分叉路径上随后的区块所累积的认证数量。该算法的一个关键方面是,较短的链有时可能会累计更多的认证,成为“最重”的子树。这意味着拥有更多认证的链被认为是更合法的,即使其区块较少。下图展示了较短的链如何获得更多认证并成为最重的链。

在这个例子中,区块 A 后面跟随两块的链,而区块 B 后面跟随四块的链。根据最长链规则,包含 B 的链将被认为是规范链,因为它拥有更多的区块。然而,在 LMD-GHOST 规则下,该决定是基于认证的数量。在这里,A 的累积认证数为 5,而 B 的累积认证数为 3。因此,LMD-GHOST 选择 A 而不是 B。这种方法通过优先考虑验证者的投票而不是仅仅区块的数量,确保了网络的安全性和共识,使选择分叉过程抵御远程攻击。

Altair

以太坊有自己 的轻客户端协议,名为 Altair, 得名于于2021年10月实施的 Altair 分叉。 相较于比特币的简化支付验证(SPV),Altair 是一种更复杂的协议。虽然 SPV 专注于验证交易,但 Altair 更进一步,能够验证区块链的整个状态,包括所有链活动。

Altair 要解决的一个重大挑战是,基于最长链规则可能导致的潜在问题,即 SPV 使用的规则。如 LMD-GHOST 部分讨论的,最长链规则不一定总是导致准确的链。因此,Altair 并不遵循最长链规则,而是遵循 LMD-GHOST 决定的规范链。

但是,有一个问题:Altair 如何确定 LMD-GHOST 决定的规范链?一些人可能建议通过检查验证者的认证来解决找到规范链的问题。虽然这是一种有效的方法,但对于轻客户端来说,尤其不是一项简单的任务。目前,活动以太坊验证者超过100万,使得轻客户端很难跟踪所有认证以确定规范链。此外,关于验证者集的信息只能通过检查上一个区块的状态来验证,增加了另一个复杂性。

与 SPV 相比,验证头比验证交易要复杂得多。这是因为一些必要数据依赖于上一个头。例如,为了知道前两个区块的哈希值,必须先验证前一个区块的头。因此,轻客户端要确认特定头的合法性,必须递归验证所有头,从创世块的头开始。这个递归验证过程消耗资源,对功能受限的轻节点来说是不切实际的。为了应对这些问题,提出并实施了同步委员会这一概念。

解决方案:同步委员会

Altair 更新引入了同步委员会,以解决选择规范链的问题。同步委员会由 512 名伪随机选择的以太坊验证者组成,服务于 256 个纪元(大约 27 小时)。每个区块头包括同步委员会中验证者的汇总签名和指示哪些验证者签署的位字段。此外,每个头还列出了预计将签署下一个区块的验证者。这使得轻客户端能够快速验证同步委员会是否已批准其接收到的数据,并通过将其与前一个区块中预期的同步委员会进行比较来确认同步委员会的真实性。因此,轻客户端能够跟踪区块链的头,而无需访问整个验证者集。

人们可能会认为同步委员会是无意义的,因为会对验证者进行惩罚。如果某个验证者试图为自己的利益分叉规范链,他们将受到罚没惩罚,那我们还有必要指示规范链吗?但是,正如上面所提到的,分叉并非总是恶意验证者的结果;它们可能会自然发生。

同步委员会成员以 0.1 ETH 为其服务提供奖励,他们负责签署每个区块头。如果他们未能在有效签署区块上提供认证,他们也会被罚没相同的金额。然而,正如一开始所说,他们在认证一个错误的区块时不会被罚没。这使得轻客户端的安全性低于完整客户端,因为它们依赖于 512 名伪随机选择的验证者,而不是整个验证者集。没有任何因素阻止同步委员会被贿赂并欺骗轻客户端。

要达到法定人数,2/3 的同步委员会成员必须对一个区块进行签署。如果它们无法达到阈值,那么下一个区块头仍然会签署,但会有一个错误的汇总,意味着同步委员会无法就该区块达成一致。在这样的情况下,轻客户端会简单地跳过该区块,并在 2/3 的多数通过后导入它。轻客户端能够使用父根填补 missed 的区块头部。

人们自然会担心,512 名验证者在安全方面可以代表 100 万人的程度如何。然而,获得恶意同步委员会在统计上是不太可能的。我们的第一个假设是,2/3 的 100 万验证者是可靠的,而不足 1/3 是恶意的。否则,恶意团体将已经能够由于 CASPER FFG 的性质来操控链。剩余的计算是基本的概率。

设想我们有一个装着 999,999 球的罐子,其中 666,666 个是蓝色的,333,333 个是红色的。蓝色代表诚实的验证者,而红色的代表恶意的。当从罐子中选择 512 个球时,得到 11 蓝和 501 红的概率是:_C_(11, 512)∗(1/3)11∗(2/3)501 = 4.828∗10−72

这个表达式正是随机变量 _X Bin_(512, 1/3),这是一个二项分布,表示 _P_(_X_ = 11)

由于同步委员会的阈值是 2/3,因此故意恶意人员在同步委员会中的容忍度是342。如果它们达到342或更多,就可以向轻客户端提供错误信息,即他们掌握了同步委员会。被攻击者控制同步委员会的概率是 _P_(_X_ >342),其中 X 为相同的随机变量。这个值是:2.047∗10−54,可以使用 WolframAlpha 检查并针对不同值进行测试。因此,期望这种事件发生的次数为: 1/(2.047∗10−54)=4.885∗1053 个同步委员会。考虑到每个同步委员会的服务时间大约为 27 小时(1.125 天),因此这一事件的期望值是: 4.885∗1053∗1.125 = 5.496∗1053 天,或者是: 1.5047 × 1051 年。这是一个巨大的数字,考虑到宇宙大约 “1.38∗10^10” 年大。因此,这表明同步委员会在统计上是可靠的。然而,27 小时的时间足以进行通信并就进行攻击达成协议,或者让第三方贿赂他们进行攻击。

EIP-7657 提出的内容

动机

该提案旨在解决以太坊轻客户端同步协议中的一个关键漏洞。具体而言,它强调了在同步委员会内不诚实的多数带来的风险。在当前协议中,同步委员会在帮助轻客户端有效同步区块链并提供定期更新方面发挥着至关重要的作用。然而,如果大多数同步委员会成员采取不诚实行为,它们可以操纵这些更新,可能对网络产生严重后果。

主要风险之一是,不诚实的多数可能导致依赖轻客户端同步协议的应用接受非规范(不正确)最终头。这种不正确的头将误导轻客户端,以为它们遵循的是正确的链,而实际上并非如此。这可能导致一系列问题,包括交易验证不正确和去中心化应用(dApps)的操作中断。

此外,不诚实的多数还可能通过签署虚假信标区块根来控制未来的同步权限。通过这样做,它们可以建立持续利用的基础。这种虚假根可以用来创建恶意但技术上有效的 LightClientUpdate 消息。这样的消息可能会利用信任最小化系统,如依赖轻客户端同步协议的桥接合约。这些桥接合约促进跨链交互,特别容易受到攻击,因为它们严重依赖于同步更新的完整性以正常运作。

提案

为减少这一风险,该提案引入了一种专门针对恶意抵制行为的额外罚没措施。这个新的罚没措施专门针对那些签署非规范信标区块根的委员会成员。通过施加严格的惩罚,提案旨在确保验证者遵循正确的协议,并不参与可能会危害网络的行为。

类似于 ProposerSlashing 和 AttesterSlashing 的现有罚没,这个新的罚没规则专注于恶意行为。它包括诸如同时在多个链分支上参与矛盾行为的行为。例如,如果一个验证者同时签署来自不同分叉的相互矛盾的信标区块根,他们将会受到这个新的罚没惩罚。这有助于维护规范链的完整性,惩罚那些试图制造不一致的人。

至关重要的是,任何罚没都必须可以验证,而无需访问历史数据。这一要求确保了罚没过程的效率和透明性。例如,已经同步到最近检查点的信标节点,不需要处理整个链的历史,就应能够验证罚没条件。这种方法简化了罚没验证过程,并通过减少单个节点的数据负担,支持以太坊网络的可扩展性和可用性。

通过实施这一额外的罚没,提案旨在增强以太坊网络的安全性。它解决了同步委员会机制的潜在漏洞,确保验证者与规范链保持一致,并抑制可能破坏网络共识的任何形式的恶意行为。这种增强对于维护依赖轻客户端同步协议的去中心化系统的信任与可靠性至关重要。

EIP-7657 之后欺骗轻客户端的成本

EIP-7657 需要一次硬分叉,因为它引入了新的共识验证规则。然而,如果该提案得到启用,欺骗轻客户端将变得极其昂贵,阻止第三方提供贿赂。由于同步委员会有 512 个成员,控制同步委员会需要贿赂至少 342 个验证者。这意味着需要花费 32*342=16384 ETH,目前的价格超过 6300 万美元。

如果 EIP-7251 被接受,这种经济安全性会大大增加。简而言之,EIP-7251 提议将验证者的最大有效余额从 32 ETH 增加到 2048 ETH。在同时接受 EIP-7657 和 EIP-7251 的情况下,可以说同步委员会的经济安全性将上升到 512*2048=1,048,576 ETH,这超过 40 亿美元。由于同期委员会成员的余额将介于 32 ETH 和 2048 ETH 之间,因此相较于只实施 EIP-7657 而未实施 EIP-7251 的情况,安全性仍会增加。

开放研究主题

尽管 EIP-7657 提议为同步委员会的统计安全性提供了显著的经济安全性,但仍然存在一些待解决的问题。

例如,EIP-7657 将恶意同步委员会成员惩罚延误至攻击发生之后。由于恶意同步委员会成员只能在他们签署的区块被最终确定后才会被罚没,因此在未等待最终确定的情况下对其进行惩罚是不公平的。这是因为在其签署时,区块是正确的,但在由于选择分叉算法的重组后,该区块可能会成为错误的。在这种情况下,除此之外,没有任何行为可以保障同步委员会成员的安全。单插槽最终确定可能解决此问题,但在当前情况下,依然是一个开放问题。

桥接可以通过在包含同步委员会相关签名的区块最终确定后发送资产来设计以绕过这个问题。另一种实现方案是创建一个由于同步委员会恶意活动而被罚没的 ETH 基金,而不是将其销毁。此基金可用于桥接攻击,确保交易的安全性高达 32*342=16384 ETH。然而,这个金额远低于大多数桥的总余额。即使最大有效余额增加,考虑到当前所有桥的总锁仓价值超过 250 亿美元,很多桥也不会完全安全。

另一个开放问题是由于无法撤销同步委员会消息密钥引起的。如果某个验证者被罚没,轻客户端将一无所知,并继续接受来自该验证者的签名,直到同步期间结束。因而,验证者可能会在同步委员会成员期间退出验证网络。可能的解决方案是在同步期结束之前延迟其退出。

总结

总而言之,轻客户端对验证链上的信息至关重要,因为它们不需要全部链数据及检查所需的硬件。由于 PoS 基础链的性质,轻客户端在寻找规范链方面面临挑战。通过 Altair 分叉,以太坊通过引入同步委员会解决了这一问题,该委员会签署正确的区块头以引导轻客户端。然而,目前尚无不提供错误信息的同步委员会成员的威慑机制。

在 2/3 的同步委员会成员是恶意者的情况下, 这在有 2/3 的全部验证者集是可靠的情况下统计上是不太可能的。然而,由于委员会服务 27 小时的原因,成员可能会被贿赂提供虚假信息。EIP-7657 提议通过为恶意同步委员会成员引入罚没条件,添加经济安全层以提高轻客户端的安全性。然而,正如在开放问题部分所提到的,实现完美的解决方案仍然任重道远。

  • 原文链接: research.2077.xyz/eip-76...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
2077 Research
2077 Research
https://research.2077.xyz