RANDAO 是怎么攒随机数的
以太坊信标链需要一份所有节点都能验证的公开随机性,机制叫 RANDAO,攒随机数的过程像轮流往井里丢骰子。每个槽位的提议者提交一个 reveal 值——按现行规格,那是验证者用 BLS 密钥对本轮轮次编号签出的签名——节点把它混进一个不断累积的混合值里。单个提议者想操纵混合值,就得同时影响很多轮,而后续诚实参与者的 reveal 会持续稀释任何提前计算的影响。这套混合模型在密码学界有成熟的名字,即所谓混合器加承诺的方案结构,关键在于每个 reveal 在提交前对其他人都不可见、提交后不可篡改。
井里第一颗骰子被人看清了
EIP-7998 的批评对准一个具体细节:reveal 的内容本身不保密。它只是对轮次编号的签名,而轮次编号是人尽皆知的公开计数——提议者轮到自己之前,reveal 的值就已经被确定并可以被任何人算出来。对整条链的混合值来说这不致命,因为攻击者要持续操纵仍需腐蚀大量提议者;但对建立在 RANDAO 之上的新应用,这是实打实的漏洞。任何依赖某槽位随机数做押注、抽奖、排序的合约,如果随机数在出块前就可推算,参与者就能挑对自己有利的时刻出手,或者在不利结果显现前撤单。协议要的是掷骰子,现在的第一颗骰子是提前摆在桌面上的。
改成 VRF 的思路
提案的修改方式保留了全部既有结构,只改签名的对象。reveal 不再只签轮次号,而是把上一轮的 RANDAO 混合值与当前槽位号拼在一起作为消息,再签名。一字之差性质全变:混合值只有走完上一轮才定下来,签名到当前槽位才可能生成,连持钥的提议者本人在那个槽位到来之前也无法提前算出自己的 reveal——这就是可验证随机函数,英文缩写 VRF,既要结果像骰子一样不可预测,又要像签名一样人人可验证。提案文本列举的受益应用里最有代表性的是单一秘密领导者选举,先藏住每轮出块者身份再随出块揭晓,而这套选举的前提恰恰是每轮抽签在揭晓前对所有人保密。
读这份草案的位置
这份 EIP 在官方仓库标注为 Draft,规范文本头部并列署名 Alberto La Rocca 与 Aryaethn 两位作者。它对共识层的改动看似只是换一段签名消息,却触及验证者客户端的签名逻辑与状态转换函数,属于需要走完整升级流程的改动,目前也未被排进任何已定档的升级。用户层面的正确姿势照旧:不要把链上抽奖的公平性寄托在任何单一随机源上,核验这类机制时,分清它对共识安全的影响与对上层应用的影响,两条线的结论往往并不相同。
风险提示:本文为共识层密码机制的技术介绍,不构成投资建议,不构成对任何依赖随机性产品的安全性评价。参与链上抽奖类产品前请核实其随机源实现。
从混合井到应用井
把机制再压一层:节点处理 reveal 的动作是把新值与既有混合值逐字异或,再折叠进哈希,这样每个 reveal 都会不可逆地改写混合值,事后无法撤回影响——这是RANDAO可信的根基;可疑的只有提交前提前透明的那半。EIP-7998 的改法妙在不碰混合逻辑,只挪签名消息:把上一轮结束时的混合值与本槽号拼成新消息再签,签名本身成为该槽的 VRF 输出,验证者无法在槽位到来前构造或反推。由此打开的应用空间也具体了:需要秘密排班的选举、公平排序、可验证抽签,都可以直接消费这个每槽一对的公私钥对输出,而不用再架一层外部预言机。对现有链的影响也要分清:混合值本身的抗操纵性大体如旧,被修复的是消费端的提前剧透问题,这也是草案把安全考量的重心放在上层协议用法上的原因。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。