EIP-7441 深度解读:以 Whisk 单秘密领导者选举(SSLE)升级区块提议者选举机制
【免费下载链接】EIPsThe Ethereum Improvement Proposal repository项目地址: https://gitcode.com/GitHub_Trending/ei/EIPs
本篇技术指南以 EIPS/eip-7441.md 为主体,系统讲解以太坊如何通过 Whisk 单秘密领导者选举(Single Secret Leader Election, SSLE)协议改造共识层的区块提议者选举机制:当前信标链在每 epoch 开始时公开选举接下来 32 个区块提议者,攻击者可借此逐一定向发起拒绝服务(DoS)攻击;本 EIP 的目标是让下一区块提议者的身份在区块发布之前保持秘密。读完本文,你将掌握该提案的完整协议流程(tracker 注册、RANDAO 驱动候选选举、私有洗牌、开洞证明验证)、全部共识层变更点、设计取舍(身份绑定、匿名集、RANDAO biasing)以及其硬分叉兼容性影响。
EIP 元数据与当前状态
| 字段 | 值 |
|---|---|
| EIP 编号 | 7441 |
| 标题 | Upgrade block proposer election to Whisk |
| 描述 | 允许被选举的区块提议者在区块发布前保持匿名,以抵御 DoS 攻击 |
| 作者 | George Kadianakis (@asn-d6)、Justin Drake (@JustinDrake)、dapplion (@dapplion) |
| 类型 | Standards Track(Core) |
| 状态 | Stagnant |
| 创建时间 | 2023-09-01 |
需要特别说明的是,该提案当前处于Stagnant(停滞)状态。根据仓库中 EIPS/eip-1.md(EIP 流程规范文档)第 90 行的定义:任何处于Draft、Review或Last Call状态的 EIP,若超过 6 个月无活跃进展,将被移至Stagnant;作者或 EIP 编辑可将其恢复到Draft或更早状态,若不恢复则可永久停留在此状态。因此,本文内容属于技术提案层面的设计规范,并非已上线主网的共识变更,读者在评估其落地前景时应以该状态为前提。
动机:公开的提议者名单是 DoS 攻击的靶子
信标链(Beacon Chain)当前在每个 epoch 开始时选举出接下来 32 个区块提议者(每个 slot 对应一个)。关键问题在于:这次选举的结果是公开的,全网任何人都能获知这些未来区块提议者的身份。
这一信息泄露使攻击者获得了清晰的攻击面——他们可以按时间顺序逐一对每个即将出块的提议者发起 DoS 攻击,例如在对方即将出块的时刻发起大量请求或网络洪泛,使其无法及时广播区块,从而可能使以太坊整体停摆。由于提议者名单是提前 32 个 slot(约一个 epoch)公开的,攻击者无需同时压制所有验证者,只需"排队"依次打掉每一个,就能以极低成本系统性瘫痪出块流程。
核心思路:从"公开选举"升级为"单秘密领导者选举(SSLE)"
EIP-7441 的解法是将区块提议者选举机制升级为Whisk——一种单秘密领导者选举(SSLE)协议。SSLE 是一类密码学协议的统称,其核心性质是:在某一轮出块之前,只有当选者本人知道自己是出块者,其他任何参与方(包括其他验证者和攻击者)都无法提前推断出谁是下一个区块提议者。这样,DoS 攻击者失去了"瞄准目标"所需的信息,无法在区块发布前针对性地攻击当选者。
Whisk 基于椭圆曲线密码学与可验证洗牌(verifiable shuffle)构建:每个验证者维护一个与自身身份绑定的"追踪器(tracker)",协议通过多轮公开随机性与私有随机性混合的洗牌过程,从候选集合中逐步收敛出每一轮的秘密提议者。
规范详解(Specification)
执行层:零改动
本 EIP 明确声明Execution Layer(执行层)不需要任何变更。这是一条纯粹针对共识层(Consensus Layer)的提案,执行层的区块结构、EVM 语义与状态转换规则均不受影响。
共识层:四步并发协议流程
协议整体可概括为以下四个并行/交替进行的步骤:
- 注册阶段:验证者在其分叉后首次出块时,注册一个 tracker 和唯一的承诺(commitment);
- 候选选举(shuffling 阶段开始):使用来自RANDAO的公开随机性,从验证者集合中选出一个候选 tracker 列表;
- 私有洗牌(shuffling 阶段期间):每个提议者使用私有随机性对候选 tracker 的一个子集进行洗牌(shuffle);
- 提议者确定(每个 shuffling 阶段结束后):使用 RANDAO 从候选集合中选出一个有序的提议者 tracker 列表,该列表中的 tracker 即对应未来各 slot 的秘密出块者。
该提案的完整规范位于 consensus-specs 仓库的/_features/whisk/beacon-chain.md(外部规范文件,此处仅引用其路径名)。核心机制是:候选 tracker 的初选与最终提议者排序均由 RANDAO 公开随机性驱动,而洗牌过程混入私有随机性,从而在"可公开验证"与"结果不可提前预测"之间取得平衡。
共识层实现变更清单
结合规范摘要,该提案对信标链状态与区块处理逻辑的改动可归纳如下表:
| 变更对象 | 变更内容 |
|---|---|
BeaconState | 新增字段,用于追踪每个验证者的 tracker、承诺,以及两轮候选选举的状态 |
select_whisk_candidate_trackers | 新增函数,从验证者集合计算下一批候选 tracker 向量 |
select_whisk_proposer_trackers | 新增函数,从当前候选集合计算下一批提议者 tracker 向量 |
process_whisk_updates | 新增函数,挂接进 epoch 处理逻辑 |
process_whisk_opening_proof | 新增函数,验证区块提议者确实掌握本 slot 被选中的 tracker(即知晓其秘密) |
process_block_header | 修改:不再用get_beacon_proposer_index断言提议者选举结果,改为断言有效的 opening proof |
BeaconBlockBody | 新增字段:提交 opening proof、带证明的已洗牌 tracker、带证明的 tracker 注册 |
get_shuffle_indices | 新增函数,计算预洗牌候选选择 |
process_shuffled_trackers | 新增函数,提交已洗牌的候选 tracker |
process_whisk | 新增函数,挂接进区块处理逻辑 |
apply_deposit | 修改:在存款时注册一个无熵(without entropy)的初始唯一 tracker 与承诺 |
从这些变更可以看到,Whisk 的落地不是简单替换一个选举函数,而是对整个区块验证流程做了结构性改造:"验证谁是出块者"的方式从公开对照提议者索引,转变为"验证开洞证明(opening proof)"——即出块者必须证明自己对本 slot 被选中的 tracker 的秘密值具有知识(knowledge of secret),才能在区块头部通过验证。
设计理由(Rationale)
每个验证者的字段设计
Whisk 要求每个验证者维护一个 tracker(rG, krG)和一个唯一承诺kG(其中G为椭圆曲线基点,k、r为秘密标量)。这两个值只在验证者于分叉后首次出块时更新一次,此后保持不变。
Tracker 使用随机化基(rG, krG)注册,其目的在于增加敌手在洗牌门(shuffling gates)之间追踪这些 tracker 的难度。文档同时提示了一个边界场景:如果诚实洗牌者的集合过小,这种随机化保护的效果可能会打折扣。
身份绑定:防止出售出块 slot
每个 tracker 必须与验证者身份绑定,否则多个实体可能声称拥有同一个提议者 slot——这将允许提议者"出售"自己的出块 slot,并且在出现两个竞争区块时引发分叉选择(fork-choice)问题。
Whisk 的身份绑定实现方式:在验证者记录中存储对 tracker 秘密kG的承诺(commitment)。存储该承诺同时保证了k的唯一性。
文档还对比了另外两种替代的身份绑定方案及其代价:
- 哈希前缀匹配:强制
hash(kG)的哈希前缀匹配验证者索引。缺点:验证者需要对k进行暴力破解(brute force),会抬高系统引导(bootstrap)门槛,对计算资源较少的参与者不友好; - 确定性派生:令
k = hash(nonce + pubkey)。缺点:提议者在相邻洗牌阶段重复出块时需要暴露k,从而被去匿名化。
替代方案对比:为什么是密码学而非工程或网络匿名
EIP-7441 在 Rationale 中系统对比了三类备选路线:
- 非单一秘密选举(Secret non-single leader election):可基于协议工程而非密码学实现,比 Whisk 更简单、更便宜。但代价是复杂化分叉选择逻辑,并可能引入MEV time-buying 攻击(通过购买时间窗口操纵区块包含顺序的 MEV 攻击),因此在撰写本提案时被判定为不合适;
- 网络匿名方案:像 Dandelion / Dandelion++ 这类隐私保护网络协议能提升网络参与者的隐私,但匿名强度不足以满足以太坊的用例需求;
- SASSAFRAS:一个共识层面更简单的 SSLE 替代协议,但它依赖网络匿名层,其具体权衡并不比 Whisk 更契合以太坊的整体威胁模型。
结论:Whisk 是在"密码学成本"与"协议/分叉选择复杂度"之间被选中的折中方案。
向后兼容性与硬分叉影响
本 EIP 对共识层的区块验证规则集引入了向后不兼容的变更,因此必须伴随一次硬分叉才能部署。这与仓库中另一共识层改动提案 EIPS/eip-6988.md 的表述一致——该提案同样指出"此修复以向后不兼容的方式更改提议者选举机制,需要硬分叉部署",说明此类选举机制的改动在以太坊中属于硬分叉级别变更。
此外,本 EIP 明确列出了对生态工具与 PBS(Proposer-Builder Separation,提议者-构建者分离)参与者的影响:
- PBS 参与者(如 builder):在默认情况下将无法获知下一提议者的验证者索引,也就无法使用预先注册的特定 fee recipient;除非提议者自愿提前暴露身份;
- 区块浏览器与监控工具:将无法把缺失的 slot 归因到具体的验证者索引。
安全考量(Security Considerations)
数据与计算复杂度:显著但恒定
文档指出,Whisk 的洗牌策略已在配套论文中经过分析,被认为对其用例足够安全;本 EIP 引入的数据量与计算复杂度虽然显著,但是恒定的(不随验证者集合规模无界增长),因此不会开放新的 DoS 攻击向量。
匿名集规模
Whisk 的匿名集是 8,192 个候选者中未被选为提议者的那部分验证者。由于这些验证者对应的 p2p 节点数量更少,文档按帕累托原则("20% 的节点运行 80% 的验证者")估算,匿名性平均对应约2,108 个节点。
这里存在一组权衡:候选池更大可能使洗牌策略不安全;而每轮洗牌更多的 tracker 则会抬高 ZK 证明的成本。因此 8,192 是在安全性、匿名性与证明成本之间选取的平衡点。
RANDAO biasing 风险
Whisk 在候选选择与提议者选择两个事件中都使用RANDAO,因此容易受到恶意提议者发起的RANDAO biasing 攻击。文档给出的缓解思路是:将选择事件分散到整个洗牌周期(shuffling period)之上,可使 Whisk 的安全性等同于现状(status quo);但文档同时承认现状的安全性本身也不理想,且这样做会进一步复杂化协议。关于 RANDAO 机制本身的背景,可参考仓库中的 EIPS/eip-4399.md(将 DIFFICULTY 操作码替换为 PREVRANDAO 的提案,其中详细说明了 RANDAO 的混合机制、提议者每 slot 1 bit 的影响力及其有限影响窗口)和 EIPS/eip-2982.md(阐述了 RANDAO seed 每区块由提议者揭示值异或更新的机制)。
总结与展望
EIP-7441 提出了以太坊共识层一次方向性升级:用 Whisk 这一 SSLE 协议取代公开的区块提议者选举,将出块者身份从"提前 32 slot 公开"收紧为"发布区块前保密",从而封堵针对提议者的顺序 DoS 攻击路径。其设计核心是 tracker + 承诺的验证者状态模型、RANDAO 公开随机性驱动的两轮候选选举、私有随机性洗牌,以及以开洞证明替代索引断言的区块验证改造。同时,它必须承受硬分叉、PBS 参与者与区块浏览器的可用性折损、以及 RANDAO biasing 等安全权衡——这些取舍共同构成了评估该提案是否值得最终部署的完整图景。
注:本 EIP 当前状态为 Stagnant,以上均为提案层面的技术设计内容。本文档版权依据 LICENSE.md 采用 CC0 协议放弃版权。
【免费下载链接】EIPsThe Ethereum Improvement Proposal repository项目地址: https://gitcode.com/GitHub_Trending/ei/EIPs
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考