-
什么是VRF:持有私钥
sk
的prover
可以计算哈希,持有公钥PK
的verifier
可以验证哈希的正确性 -
VRF v.s. 签名算法:签名算法不具有唯一性,即同样的私钥、公钥生成的签名不一定相同
-
VRF v.s. 哈希函数:哈希函数不具有可验证性
- sk:VRF私钥;
- PK:VRF公钥;
- alpha: VRF输入
- beta:VRF输出
- pi:VRF证明
- Prover:同时持有sk和PK,可生成VRF随机数和证明;
- Verifier:持有公钥,可验证VRF随机性
-
VRF哈希:相同的输入和sk,输出相同
beta = VRF_hash(sk, alpha)
-
VRF证明生成:
pi = VRF_prove(sk, alpha)
-
VRF证明转哈希:
beta = VRF_proof2Hash(pi)
即:
VRF_hash(sk, alpha) == VRF_proof2Hash(pi)
-
VRF随机数验证:
VRF_verify(PK, alpha, pi)
- 完全唯一性(Full Uniqueness):给定VRF私钥和输入,有且仅有一个VRF输出随机数可被验证有效;给定VRF私钥sk和输入alpha,攻击者不可产生不同的
{beta1, pi1}
和{beta2, pi2}
,满足VRF_verify(PK, alpha, pi1)
和VRF_verify(PK, alpha, pi2)
均验证有效; - 完全抗冲突性(Full collison Resistance):即使在攻击者攻破VRF密钥
sk
的情况下,攻击者也无法找到两个不同的输入alpha1
和alpha2
,使得VRF_hash(sk, alpha1) == VRF_hash(sk, alpha2)
- 完全伪随机性(Full Pseudorandomness): 攻击者不持有VRF proof
pi
的情况下,无法将VRF随机数与通常的随机数区分开;
-
可信唯一性
-
可信抗冲突性
-
完全伪随机性
F
:有限域2n
: 有限域F的长度E
: 定义在有限域F上的椭圆曲线m
: 椭圆曲线上一个点的长度G
:E在大素数阶上的子群的基点q
:基点G的大素数阶Hash
:哈希函数hLen
: 哈希的长度
- 公钥:` sk*g
- 私钥:随机数
sk
,在(0, q)
范围内
-
输入:公钥
PK
;私钥sk
;输入alpha
; -
输出:VRF证明(长度是m+3*n)
-
步骤:
(1) 调用
ECVRF_hash_to_curve(PK, alpha)
,将输入alpha转换成椭圆曲线h
;(2) 计算
gamma = h*sk
(3) 选取
[0, q - 1]
的随机数k
(4) 调用
ECVRF_hash_points
计算c=Hash(G, h, PK, gamma, G*k, h*k)
,记为c
(5)
s = k - c * sk
(6)
pi = {gamma, c, s}
-
输入:公钥PK;VRF证明pi; VRF输入alpha
-
输出:
valid
orinvalid
-
步骤:
(1) 解码VRF proof:
{gamma, c, s} = ECVRF_decode_proof(pi)
(2)
u = PK*c + G*s
(3)
h = ECVRF_hash_to_curve(PK, alpha)
(4)
v = gamma*c + h*s
(5)
c'= Hash(G, h, PK, gamma, u, v)
(6)
c == c', valid; 否则,invalid