本文目录导读:

在币圈资讯和技术讨论中,“可验证随机函数”通常指 Verifiable Random Function,简称 VRF,它的核心目标是:让某个参与者在不泄露私钥的前提下,基于自己的私钥和一个公开输入生成一个随机输出,同时给出零知识证明,使任何人都能验证这个输出确实由该私钥和该输入唯一决定,但无法预测或伪造。
下面按技术原理拆解。
VRF 的基本构成
一个 VRF 通常包含四个算法:
-
密钥生成
- 生成私钥
sk和公钥pk。
- 生成私钥
-
求值
- 输入私钥
sk和消息/种子x,输出:- 随机值
y = F_sk(x) - 证明
π = Prove_sk(x)
- 随机值
- 输入私钥
-
验证
- 任何人用公钥
pk、输入x、输出y、证明π验证:Verify_pk(x, y, π) → true/false
- 任何人用公钥
-
唯一性
- 对同一个
sk和x,只能得到一个有效的y,攻击者不能找到另一个y'也能通过验证。
- 对同一个
关键性质包括:
- 可验证性:任何人都能验证输出正确。
- 唯一性:同一输入下输出确定且唯一。
- 伪随机性:不知道私钥的人无法预测
y。 - 隐私性:验证者从
y和π中无法反推私钥。
技术原理:从 RSA/EC 到哈希到曲线
VRF 的实现方案很多,币圈常见的是基于椭圆曲线的方案,ECVRF,以及基于 RSA 的方案,以常见的椭圆曲线 VRF 为例,直觉流程是:
第一步:把输入映射到曲线点
给定输入 x,用哈希到曲线的方法得到曲线上的点 H = HashToCurve(x)。
第二步:用私钥计算“签名式”输出
私钥为 sk,公钥为 pk = sk·G。
计算:
Γ = sk · H
这个 Γ 是曲线上的一个点,类似 BLS 签名中的签名点。
第三步:从 Γ 派生随机输出
对 Γ 做哈希,得到最终随机值:
y = Hash(Γ)
因为 Γ 由 sk 和 H(x) 唯一决定,y 也唯一。
第四步:生成证明
证明 π 通常用来证明“我知道 sk,使得 pk = sk·G 且 Γ = sk·H”,但不泄露 sk,常见做法是使用类似 Schnorr 的零知识证明:
- 随机选
r,计算U = r·G,V = r·H - 计算挑战
c = Hash(pk, H, Γ, U, V) - 计算响应
s = r + c·sk - 证明
π = (c, s)或(U, V, s)等形式
验证者可以检查:
s·G = U + c·pk s·H = V + c·Γ
以及 y = Hash(Γ),从而确认 Γ 确实由 sk 对 H(x) 计算得到。
第五步:验证
验证者拿到 pk, x, y, π 后:
- 重新计算
H = HashToCurve(x) - 用证明检查
Γ与pk的关系 - 检查
y = Hash(Γ)
如果都通过,则接受 y 为合法随机输出。
为什么币圈需要 VRF?
因为区块链上很难直接产生“不可预测且可验证”的随机数,VRF 的典型用途是:
-
可验证随机抽签
- Algorand、Cardano 的权益证明出块者选择。
- 每个验证者用私钥对种子计算 VRF,输出决定其是否被选中。
- 其他人能验证选择公平,但无法提前预测。
-
去中心化随机数
Chainlink VRF 让智能合约请求随机数,预言机生成随机数和证明,链上合约验证证明后才接受随机数。
-
防止女巫攻击和偏置
参与者不能反复尝试不同输入来“刷”有利输出,因为输出由私钥和输入唯一决定。
与普通哈希、签名、承诺的区别
- 普通哈希:所有人可算,但无法证明“这是某私钥对应的随机值”。
- 普通签名:可验证签名者身份,但签名本身不一定能安全地当随机数用,且可能可延展。
- VRF:兼具“签名式唯一性”和“随机输出不可预测性”,并且输出本身可验证。
安全性依赖
VRF 的安全性通常依赖:
- 离散对数难题(椭圆曲线方案)
- 哈希函数的随机预言机性质
- 安全的哈希到曲线方法
- 证明系统的零知识性和可靠性
VRF 的技术原理是:私钥持有者对公开输入做一次确定的“签名式”计算,得到唯一随机输出,并附上零知识证明;任何人可用公钥验证该输出确实由该私钥和输入决定,但无法预测输出或伪造证明。 在币圈,它主要用于可验证、不可预测、不可偏置的随机数和抽签机制。