教程区块链区块链技术ch055.9 随机性与可验证随机函数(VRF)

本页目录

从 PoW 的算力彩票到 PoS 的质押抽签,区块链共识始终需要“不可操控、不可预测、可公开验证”的随机源。VRF(Verifiable Random Function)将这三个目标统一为密码学原语,已成为 Algorand、Cardano 等下一代链的核心组件。


5.9.1 为什么共识需要安全随机性

随机性在共识中的核心用途:

  • 提议者选择:PoS 链中谁有权在下一个区块提议?抽签结果不应被预测或操控。
  • 委员会选举:分片链中哪些节点进入验证委员会?必须随机以防止串谋。
  • 挑战/采样:乐观汇总(Optimistic Rollup)中的挑战期采样、状态验证的随机检查。

不安全随机性的攻击面

攻击类型说明
偏向攻击(Bias)攻击者操控随机源使特定候选获得优势
预测攻击(Predict)攻击者提前知道随机结果,提前准备有害提议
后验操控(Grind)攻击者丢弃不利随机结果,等待重新抽签

5.9.2 VRF 核心原理

VRF 可视为带有可验证证明的伪随机函数。输入为私钥种子 sksk 与公开输入 xx,输出为随机值 yy 与证明 π\pi

(y,π)=VRFsk(x)(y, \pi) = \text{VRF}_{sk}(x)

公开验证者可用公钥 pkpk 验证 (y,π)(y, \pi) 的合法性:

Verifypk(x,y,π){0,1}\text{Verify}_{pk}(x, y, \pi) \in \{0, 1\}

VRF 的安全性质

  1. 伪随机性yy 在计算上与真随机不可区分;
  2. 可验证性:任何人可用 pkpk 验证 (y,π)(y, \pi) 确实由拥有 sksk 的实体正确生成;
  3. 唯一性:对给定 (sk,x)(sk, x),不存在两个不同 (y,π)(y, \pi) 能通过验证。

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 的共识流程:

  1. 每个验证者用私钥运行 VRF,输入为当前轮次信息 rr
  2. 若输出 y<Ty < T(阈值),则该验证者被“秘密”选中为候选提议者;
  3. 验证者广播提案附带证明 π\pi
  4. 其他节点用公钥验证被选资格。

秘密自选择的意义

  • 在广播前,无人知道谁是下一个提议者(包括提议者自己也无法提前确定),因此无法被 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 = `secretKey:{secretKey}:{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: selectedCount/{selectedCount} /{validators} (expected ~${validators / 100})`);

关键认知:VRF 是将“随机性选举”从物理层(算力)抽象到数学层的关键原语。它让 PoS 链在保持低能耗的同时,获得了媲美 PoW 的不可预测性。


← 5.8 分叉解析 | 前往 → 5.10 共识算法全景对比

评论

0

评论加载中…

发表评论

0/2000