可验证随机函数(Verifiable Random Function, VRF),顾名思义是一种具有可验证性和随机输出的一种函数,看名字大概也能理解。
一、通俗理解VRF
通俗理解为:以私钥 s k sk sk和随机种子 m m m作为输入,输出伪随机数 r r r和该伪随机数的证明 p r o o f proof proof。
任何人都可以使用 s k sk sk对应的公钥和证明 p r o o f proof proof来验证伪随机数 r r r,是否是由私钥 s k sk sk持有者算出来的,并且伪随机数、私钥和种子都是唯一确定,任何人都不能根据随机种子和伪随机数推导出私钥。
三大特征:
- 1)可验证性:任何人可以通过 p r o o f proof proof验证随机数 r r r是 s k sk sk和 m m m对应的输出;
- 2)唯一性: s k sk sk和 m m m不变的情况下,输出的伪随机数 r r r是唯一的;
- 3)随机性:不给定证明 p r o o f proof proof的情况下,VRF的输出的伪随机数 r r r与另一个伪随机数对于敌手来说是不可区分的。
二、伪随机和真随机
由以上可以看出,都是提到输出的随机数是伪随机的,但是什么是伪随机数呢,为什么不直接叫随机数呢?
通过调研发现,首先要明白随机数需要满足三大特征:
- 1)随机性
- 2)不可推测性
- 3)不可重复性
其次,计算机不会产生绝对的随机数,而只能根据一些特定的算法或规律产生“伪随机数”。而绝对随机的数一般是理想的随机数。
伪随机一般指某件事发生的概率,真随机一般指几率,这两者有所区别。
下面举个例子:
- 1)伪随机事件:假如有10个人,面前有个箱子,里面有10张卡片,其中2张是中奖卡片,每个人随机抽取一张,不放回。我们知道中奖的概率就为20%,那么第一个人中奖的概率为20%。若他没中,后一个人的中奖概率就变成了22.2%了,以此类推,会随着抽取次数的变化,中奖概率也会变化,因此这是伪随机的。
- 2)真随机事件:同样这10个人,随机抽取卡片后,放回。无论前面的人是否中奖,而后面中奖的几率还是20%,每个人每次随机抽取的几率都是20%,相互独立,互不影响,这种随机就是真随机的。
三、VRF发展
目前VRF用于区块链中的共识算法比较多,一般有基于RSA困难问题的VRF,和基于椭圆曲线的VRF等。