验证者委员会每个纪元重新洗牌:定向攻击为什么行不通 图 1
验证者委员会每个纪元重新洗牌:定向攻击为什么行不通 · 图 1

结论先说

以太坊的验证者不是固定在某个时段值班的“常驻议员”。每个纪元(三十六分钟左右、三十两个时隙)边界,全部活跃验证者会被一次伪随机洗牌重新分配到各个时隙的委员会里——这一机制的规范定义在 consensus-specs 仓库的委员会分配算法中,分配的种子取自链上可查的历史 RANDAO 混合值。ethereum.org 的 Attestations 页面(页面自注更新于 2025 年 10 月 21 日)描述了配套的投票与聚合流程。洗牌的目的一句话概括:让攻击者永远无法提前知道“下一班岗是谁”,从而把任何收买、恐吓或定向故障攻击的成本从“买通一小撮人”抬高到“买通全网随机样本”。

洗牌在防什么

没有洗牌的系统里,出块和投票职责按固定名单轮转,攻击者可以观察排班表,提前对下一时段的那几名验证者断网、DDoS 或收买——这叫定向攻击。有了每纪元一次的重新分配,负责任意一个时隙的子集都是从全体验证者里抽的样本,样本之外的力量对该时隙没有任何控制权;要稳定影响投票,只能同时面对接近全体的分布,代价回到质押比例本身。这也是权益证明安全性叙事的一块基石:权力跟 stake 走,不跟席位走。顺带一提,分配结果要等该纪元开始前一个纪元的 RANDAO 混合公开后才最终确定,提前算不出来,这防止的是利用可预测排班的抢跑行为。

示意图

一个纪元内的流程接力

把视角切进单个纪元:验证者先在纪元起点获知自己被分到的时隙与委员会;在指定时隙对看到的链头提交包含 source 与 target 检查点的投票;同一子网内,被选中的聚合者收集签名并压成一条聚合签名,交给区块提议者打包。官方 Attestations 页面给出了聚合的结构:投票位图标注哪些成员参与了投票,签名按委员会索引可核对。这套“委员会加聚合”的分层,本质上是在有限带宽下让几十万名验证者都能参与每个纪元投票的工程方案——每个时隙只处理当值委员会的消息量,其余时间成员在观察与等待。

边界与可观察性

洗牌不是万能的,两处边界值得写明。其一,它保护的是委员会层面的定向攻击,不改变总质押分布本身的问题:如果少数实体控制三分之一以上的总质押,无论怎么洗牌,三分之二的门槛对他们仍然可达——这是“委员会安全”与“集合去中心化”两个不同问题,用洗牌数据论证质押集中度健康属于偷换概念。其二,洗牌的计算与验证成本决定了频率只能按纪元做,想按每个时隙洗一次,开销会顶到家用节点的处理上限;当前研究里单槽终局性方向的难点之一,正是如何在保留这种分配公平性的同时把投票压缩进一个时隙。另外,种子来自可查的历史 RANDAO 混合意味着分配的“公平”依赖该随机源未被操纵:能影响种子前一纪元投票的一方可以轻微影响分布偏好,因此协议同时把可预测性与可操纵性一并作为设计约束。普通用户可以自行验证洗牌效果:通过信标节点的委员会查询接口,连续拉取两个纪元的委员会名单,会看到同一批公钥以完全不同的分组出现在相邻纪元的不同时隙里——这比任何宣传都直观。

小结

每纪元洗牌是把“谁有话语权”与“谁此刻在投票”解耦的机制:前者由质押决定、变化缓慢,后者由伪随机决定、纪元一换就重排。理解它,就理解了权益证明的一个基本立场——去中心化的实现方式不是给节点分席位,而是让每一次表决都重新抽签。规范细节以 consensus-specs 仓库当前版本为准。本文只做机制解释,不构成任何投资建议。