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

在 substrate 的 BABE 中为了使出块不可预测,减少去中心化程度,使用了 VRF.

简单描述一下 BABE (POS)的出块流程

  1. 想要出块的 node 在一个 epoch 中抵押一定数量的 token,
  2. 下一个 epoch 来临后,这个抵押了代币的node 就成为了验证者具有了出块的权利
  3. 到下一个 slot 后,node 使用自己的私钥与一个输入 x (比如要打包的区块的 hash,具体x 是什么忘记了)经过 VRF 得到一个随机值 y 和正确生成 y 的证明 proof
  4. 当这个 y 小于自己抵押的 token 数量时,node 就可以向其他node 广播自己打包的块
  5. 其他 node 收到这个块后使用公钥和 proof 后就可以确定这个 y 是否是被正确计算出来的,从而网络达成共识

VRF 介绍

VRF 和伪随机函数功能类似,通过任意一个输入,可以获得一个随机数输出:

  1. 对于不同的输入,输出是随机的,并且均匀分布在值域范围内.
  2. 对于相同的输入,得到的输出是相同的
    但相比于伪随机函数,VRF 多了一个非交互的零知识证明,使用私钥和输入生成proof,其他人可以使用公钥和输入来验证随机数输出的正确性.

VRF 定义为$$(output, proof) <- VRF(input, sk)$$

input 为合法输入,sk 是用户的私钥,output 是输出的随机数,proof 可以证明输出的数据合法.

VRF具体流程

  1. 生成公私钥(SK,PK),并给定一个输入 x
  2. 计算 y = Fsk(x) 和 proof = Psk(x)
  3. 使用 PK 和 proof,所有人都可以验证 y = Fsk(x) 是被正确计算出来的
posted @ 2022-04-20 17:31  哪吒young  阅读(506)  评论(0编辑  收藏  举报