Alert Source Discuss
🚧 Stagnant Standards Track: Core

EIP-6914: 重用已撤回的验证者索引

将完全撤回且可以安全重用的验证者索引,用于新的信标链存款。

Authors Lion (@dapplion), Danny Ryan (@djrtwo)
Created 2023-04-19
Discussion Link https://ethereum-magicians.org/t/eip-6914-reuse-withdrawn-validator-indices/15253

摘要

在经过足够长的安全重用期后,重用完全撤回的验证者索引,以消除信标链验证者列表随验证者集合流失而发生的无限制增长。

动机

信标链维护一个验证者列表和一个与每个验证者相关联的单独的余额列表。当发生新的验证者的新存款时,当前的机制仅追加,而不是重用先前完全撤回的验证者索引。随着验证者完全撤回并且新的验证者进入,这意味着这两个列表将无限制地增长。

本规范允许在安全的情况下重用验证者索引,从而消除了对无限制验证者列表增长的担忧。

规范

共识层

该规范的配置值和机制可以在共识层规范中找到。

请注意,只有在验证者已经完全撤回验证者已经可以撤回足够安全的时间后,才会重用验证者索引。

执行层

此规范不需要对执行层进行任何更改。

理由

当前的validatorsbalances列表在每次新的 Deposit 交易发送到一个新的公钥到信标链时都会被追加。由于长期以来,staker 进入和退出共识的自然机制,这些列表,以及状态大小,将会无限增长。

增加的状态大小代表了客户端实现中的负载和/或复杂性。这体现在客户端内存占用、状态根计算、验证者集扫描等方面。这是状态转换中一个相对简单的清理,可以防止不必要的负载和复杂性,否则列表将会无限增长。

向后兼容性

这是对以太坊共识层的向后不兼容的更改,必须通过硬分叉进行安排。

与执行层不存在向前/向后兼容性问题。

测试用例

测试用例正在标准的共识层测试中进行。

安全注意事项

验证者索引不能立即重用,而必须等待 SAFE_EPOCHS_TO_REUSE_INDEX 个 epoch,以确保证明不能被已撤回的验证者签名”污染”——因此是不可削减的——至少在弱主观性期间是这样。

证明污染攻击取决于以下两个事实:

  • 重用验证者索引会覆盖信标状态中先前验证者的公钥。
  • AttesterSlashing 包含验证者索引以重建签名参与者。

攻击细节

假设一个 1/3 的攻击者。攻击者在诚实链上退出 N 个验证者,其中 N 是验证者集合的一小部分。这些验证者离开退出队列,并在几天内可撤回。现在有 N 个新的存款进来并覆盖了验证者,最重要的是他们的公钥。

然后,攻击者从 N 个自愿退出之前的状态构建一个替代的攻击者链,以便原始的 N 个验证者不会退出和撤回。N 足够大,使得平均来说,每个攻击者链的委员会中至少有一个 N 个密钥。攻击者双重签名试图最终确定攻击者链,但确保其中一个 N 个密钥混合到任何已显示的双重签名聚合证明中——单个证明不可用,只有聚合。这些恶意证明不能包含在诚实链中,因为 AttesterSlashing 依赖于将验证者索引映射到特定的公钥,因此破坏了可问责的安全。

缓解

SAFE_EPOCHS_TO_REUSE_INDEX 个 epoch(最大弱主观性周期的 3 倍)内不覆盖已撤回的验证者,可确保在可问责的安全窗口内无法污染证明。

替代方案

请注意,如果 AttesterSlashing 包含公钥列表而不是验证者索引,那么这就不是问题。然而,这将需要更多的破坏性更改,并且会增加 AttesterSlashing 的数据需求,AttesterSlashing 是按系数 6 计算的最大共识层数据类型。

版权

CC0 下放弃版权及相关权利。

Citation

Please cite this document as:

Lion (@dapplion), Danny Ryan (@djrtwo), "EIP-6914: 重用已撤回的验证者索引 [DRAFT]," Ethereum Improvement Proposals, no. 6914, April 2023. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-6914.