可验证随机函数(Verifiable Random Function, VRF)

论文中的描述


但在这里没有明白为什么在 V R F V E R VRF_{VER} VRFVER环节需要x,y, π \pi π信息。以及message x是什么,如何选取才能取到伪随机性。

VRF介绍

VRF 这个概念最早由 Micali,Rabin 和 Vadhan 三个人所提出。
一句话描述: 以sk和随机种子作为输入,输出伪随机数r和对应的证明proof
任何人可以通过sk对应的公钥vk加上证明proof来验证伪随机数r是否有sk持有者生成。

特点:
1)可验证性:任何人可以通过vk和proof验证随机数r是sk和x对应的输出;
2)唯一性:sk和x不变的情况下,输出的伪随机数r是唯一的;
3)随机性:不给定证明proof的情况下,VRF的输出的伪随机数r与其他伪随机数r’对于敌手来说是不可区分的。

关于第三步:验证
验证函数 Verify 输入验证密钥 vk、消息 x 以及伪随机y和证明 π \pi π。输出结果0/1:只有该函数验证了证明 π \pi π 是根据 x 生成的,且根据证明 π \pi π可以推导出 Y,才会输出 1,也就是说该函数验证 X 与 Y 是否存在唯一的对应关系。

为什么VRF验证需要proof证明?

如果没有 π \pi π,就类似数字签名,这里只能通过vk证明sk对消息x进行了签名验证,但是如果对消息x用了一种算法进行处理后的信息不能验证,即不能验证f(x)。
而ZKP零知识证明正好是可以做到在不透露秘密sk的条件下,验证基于sk提出的承诺statement。(与数字签名的区别是,数字签名是不提供sk的情况下证明原本的消息x,而ZKP可以做到不提供sk的条件下对x的推论 f s k ( x ) f_{sk}(x) fsk(x)的证明)

VRF应用于区块链共识打包区块权的选择

区块打包节点选择方式:让各个节点自己抽签,抽中之后,大家可以很容易地验证这个结果确实是你生成的。

具体过程有可能是这样的:假设现在是 round 10(第 10 轮),节点们会轮流抽签,以节点自己的私钥 + 一个全网都知道的随机数(比如是这轮的轮次 10)作为输入,生成了一个随机数(假设在0-100);设置一个条件:100 个节点轮流抽签,谁先抽出来的随机数大于 10,就是这一轮的打包者。假设 5 号节点抽到了 11,可是只有 5 号知道其他人不知道,因此他在广播这个随机的同时还需要广播一个零知识证明。通过零知识证明,全网只需要通过 5 号的公钥就可以验证,接受 5 号为这轮打包者。

可验证随机函数一共包含四个函数:1、生成密钥,生成一个公钥私钥对;2、生成随机数输出;3、计算零知识证明;4、验证随机数输出。

VRF 的目的就是要生成一个真正随机而且无法被预测的值。在区块链选出块节点的过程中,为了保证安全,随机是一个基本要求。不过,区块链选节点不单纯是随机就 OK 的,还要考虑到攻击成本等,所以共识机制往往加入算力和持币权益等影响因素,以增加攻击者的攻击成本。如果单纯使用随机算法,就很容易受到女巫攻击,攻击者可以廉价找大量的傀儡机(肉鸡)来增加自己抽中的概率。

Reference

1.某目前尚未见刊的论文
2.密码学小知识(8):可验证随机函数(Verifiable Random Function, VRF)
3.可验证随机函数VRF
4.可验证随机函数(VRF)应用于区块链共识的原理和方法
5.区块链知识之 VRF: 可验证随机函数

猜你喜欢

转载自blog.csdn.net/qq_33583069/article/details/125631380
vrf