从 PoW 的算力彩票到 PoS 的质押抽签,区块链共识始终需要“不可操控、不可预测、可公开验证”的随机源。VRF(Verifiable Random Function)将这三个目标统一为密码学原语,已成为 Algorand、Cardano 等下一代链的核心组件。
5.9.1 为什么共识需要安全随机性
随机性在共识中的核心用途:
- 提议者选择:PoS 链中谁有权在下一个区块提议?抽签结果不应被预测或操控。
- 委员会选举:分片链中哪些节点进入验证委员会?必须随机以防止串谋。
- 挑战/采样:乐观汇总(Optimistic Rollup)中的挑战期采样、状态验证的随机检查。
不安全随机性的攻击面:
| 攻击类型 | 说明 |
|---|---|
| 偏向攻击(Bias) | 攻击者操控随机源使特定候选获得优势 |
| 预测攻击(Predict) | 攻击者提前知道随机结果,提前准备有害提议 |
| 后验操控(Grind) | 攻击者丢弃不利随机结果,等待重新抽签 |
5.9.2 VRF 核心原理
VRF 可视为带有可验证证明的伪随机函数。输入为私钥种子 与公开输入 ,输出为随机值 与证明 :
公开验证者可用公钥 验证 的合法性:
VRF 的安全性质:
- 伪随机性: 在计算上与真随机不可区分;
- 可验证性:任何人可用 验证 确实由拥有 的实体正确生成;
- 唯一性:对给定 ,不存在两个不同 能通过验证。
5.9.3 Algorand 的秘密自选择:VRF 工程实践
graph LR
A[验证者私钥 + 轮次种子] --> B[VRF 计算]
B --> C{输出 < 阈值?}
C -->|是| D[秘密被选中为提议者]
C -->|否| E[未选中,等待下一轮]
D --> F[广播区块提案 + VRF 证明]
F --> G[全网用公钥验证资格]
G --> H[区块进入共识投票]
style D fill:#ccffcc,stroke:#333
style E fill:#ffcccc,stroke:#333
Algorand 的共识流程:
- 每个验证者用私钥运行 VRF,输入为当前轮次信息 ;
- 若输出 (阈值),则该验证者被“秘密”选中为候选提议者;
- 验证者广播提案附带证明 ;
- 其他节点用公钥验证被选资格。
秘密自选择的意义:
- 在广播前,无人知道谁是下一个提议者(包括提议者自己也无法提前确定),因此无法被 DDoS 或收买。
- 一旦被选中,立即广播,其他人验证。
5.9.4 VRF 与 PoW 随机性的本质差异
| 特性 | PoW 随机性 | VRF 随机性 |
|---|---|---|
| 来源 | 算力竞争(物理) | 密码学承诺(数学) |
| 可验证性 | 即时(所有人验证哈希) | 即时(验证 VRF 证明) |
| 可预测性 | 完全不可预测 | 不可预测(证明发布前) |
| 能耗 | 高 | 可忽略 |
| 延迟 | 确定(出块间隔) | 确定(投票轮次) |
| 优势 | 历史锚定强 | 低能耗 + 即时可验证 |
ts
// vrf-selection-sim.ts
// 纯内置:模拟 VRF 秘密自选择机制
// 简化:用伪随机函数模拟 VRF(真实实现需椭圆曲线密码学)
function vrfSimulate(secretKey: BigInt, round: number, publicSeed: string): {
output: string;
threshold: bigint;
selected: boolean;
} {
// 模拟不可逆的伪随机输出
const data = `{round}:${publicSeed}`;
// 用简单哈希模拟(实际应用需密码学安全 VRF)
let hash = 0n;
for (let i = 0; i < data.length; i++) {
hash = (hash * 31n + BigInt(data.charCodeAt(i))) % (2n ** 256n);
}
const threshold = (2n ** 256n) / 100n; // 1% 选中概率
const selected = hash < threshold;
return { output: `0x${hash.toString(16)}`, threshold, selected };
}
// 模拟 1000 个验证者中谁是下轮提议者
const validators = 1000;
let selectedCount = 0;
for (let i = 0; i < validators; i++) {
const r = vrfSimulate(BigInt(i), 42, 'seed-2024');
if (r.selected) selectedCount++;
}
console.log(`Selected: {validators} (expected ~${validators / 100})`);关键认知:VRF 是将“随机性选举”从物理层(算力)抽象到数学层的关键原语。它让 PoS 链在保持低能耗的同时,获得了媲美 PoW 的不可预测性。
← 5.8 分叉解析 | 前往 → 5.10 共识算法全景对比
评论
0评论加载中…