VRF介绍-程序员宅基地

技术标签: 互联网与区块链  

1. Why VRF?

 

  • 场景
    在区块链场景中,有的框架会用算法随机产生出块节点与验证节点(如Algorand),甚至解决分叉。按传统的随机算法,按一定的哈希规则随机轮询,选出一个节点来记账/验证。如果这个随机轮询的规则是谁都可以复现的,那么可以推测出将来的某个记账/验证节点,集中攻击它。
    为了解决这个问题,就引入了VRF,只有自己能够完成这个哈希过程,而别人只能在他声明之后验证这个过程,防止有人可以提前推测出将来的记账节点。
  • POS中的权益研磨(Grinding)
    (以下来源于以太坊Github上的《Proof of Stake FAQ》)
    在任何基于区块链的权益证明算法中,都需要某种机制,来随机从当前活跃验证者集合中选择能够产生下一个区块的验证者。举个例子,如果当前活跃的验证者集合由持有40以太币的Alice,持有30以太币的Bob,持有20以太币的Charlie与持有10以太币的David组成,那么你想让Alice成为下一个区块的创建者的概率为40%,而Bob的概率为30%等(在实践中,不仅要随机选择一个验证者,而是要(随机产生)一个无限验证者序列,只有这样如果Alice不在线的时候,就可以有其他人在过段时间替代她,但是这并没有改变问题的本质)。在非基于区块链的算法中,出于不同的原因也经常需要考虑随机性。
    (以下来源Ouroboros白皮书《Ouroboros: A Provably Secure Proof-of-Stake Blockchain Protocol》)
    基于PoS的区块链协议最基本的一个问题就是模拟领导者选举过程。为了在股东们之间的选举达到一个真正的随机性,系统中就必须要引入熵(entropy),但引入熵的机制可能会容易被敌手操作。例如,一个控制一群股东的敌手可能会试图模拟协议的执行,尝试不同的股东参与者的顺序以此来找到对敌对股东有力的继续者。这会导致一个叫做"grinding"的致命弱点,敌对参与者可能会使用计算资源来倾斜领导者选举。
  • VRF的目的
    VRF的目的就是要生成随机值,且无法被预测,同时还要可验证,可重放。

2. VRF是什么?

 

VRF是可验证随机函数(verifiable random function),一方面具有伪随机性,另一方面它还具有可验证性(输出包括一个非交互零知识证明)

  • 伪随机性
  • 可验证性
    VRF的方式是,实现本地抽签,各个节点自己抽签,如果抽中了之后,大家可以很容易地验证这个结果确实是你生成的。

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

3. VRF具体的操作流程?

 

在这里插入图片描述

  • 证明者生成一对密钥,PK、SK;
  • 证明者计算result = VRF_Hash(SK,info),proof = VRF_Proof(SK,info);
  • 证明者把result,proof,PK递交给验证者;
  • 验证者计算result = VRF_P2H(proof),True/False = VRF_Verify(PK, info, proof)

True表示验证通过,False表示验证未通过。所谓的验证通过,就是指proof是否是通过info生成的,通过proof是否可以计算出result,从而推导出info和result是否对应匹配、证明者给出的材料是否有问题。

4. 抽签有没有必要用VRF?

 

  • 相比随机预言机
  1. 普通哈希Hash(a)=b,所有人都可以重现,检验正确性;
  2. VRF是Hash(SIG(sk, a))=b,别人无法复现这个过程。但是可以拿b,pk,和中间信息验证b是跟a对应的。
  • 相比非对称加密
  1. 在密码学签名算法中,大都会引入随机性,也就是对相同信息的多次签名会得到不同的签名值,因此矿工可以不断对相同的输入SK和block,计算签名,以满足结果小于D。那么理论上任何人都会成为出块者,只要计算足够多次的签名。
  2. 有些非对称加密方式得到的随机数不是均匀分布的,如RSA
  3. 缺乏零知识,不管使用确定性签名还是随机性签名,都存在个安全隐患。就是一旦将自己的出块凭证公布,任何人都可以公开验证,包括攻击者。那么攻击者可以对出块节点进行攻击,使其不能出块。使用VRFs的方式,矿工只需要公布自己的R表明自己的出块权,当出完块的时候再公布P,那么攻击者就无法在出块之前知道谁具有出块权,因此也就无法实施针对性的攻击。

5. 应用

 

  1. Consensus:共识算法中安全性
    VRF Sortition,Smart Contracts,例如本体,Cardano,Dfinity,Algorand等,不同点在于如何产生输入以及输出怎样用。VRF的返回结果可以用来公开或私密地完成节点或节点群体的选择。eg. Dfinity利用mod操作来唯一,公开的确定一个group。Algorand,Ouroboros Praos是私密选择,即计算出哈希值后,如果哈希值小于某个阈值,节点可以私密地知道自己被选中。
    在这里插入图片描述
  • 本体-VBFT共识算法:
    1. 根据VRF 从共识网络中选择备选提案节点,各个备选节点将独立提出备选区块;
    2. 根据VRF 从共识网络中选择多个验证节点,每个验证节点将从网络中收集备选的区块,进行验证,然后对最高优先级的备选区块进行投票;
    3. 根据VRF 从共识网络中选择多个确认节点,对上述验证节点的投票结果进行统计验证,并确定出最终的共识结果。
    4. 所有节点都将接收确认节点的共识结果,并在一轮共识确认后开启新的共识。
  • Algorand中:
    1. 先选打包者,选完打包者选委员会,委员会用BA*进行选区块。
    2. 输入值由前一个随机数(最初的随机数是协议给定的)和某种代表高度,轮次的变量进行组合,然后用私钥对之进行签名(或者先签名再组合),最后哈希一下得出最新的随机数。
    3. 条件:①签名算法应当具有唯一性;②避免在生成新随机数时将当前块的数据作为随机性来源之一。
  • Dfinity中:
    交保证金提高门槛,并降低参与节点的数量,然后选打包者,选完打包者选公证人,对区块权重进行排序,选出区块。
  • Cardano的共识机制-Ouroboros Praos:
    在根据Random seed选举slot leader时,通过VRF确保slot leader不被事先计算出来被攻击。
    在这里插入图片描述
    在这里插入图片描述
  1. IOST的高效分布式分配片
    使用了VRF来进行领头节点的选举,通过VRF得到随机数之后,会将结果进行广播,然后其他节点会进行统计,得到随机数值最小的作为分片领头节点。是一种交互式的选举方式。
  2. Key Transparency 
    密钥管理系统,使消息传递在不相信服务端的情况下做到点对点的安全上的提升。
  3. DNSSEC 
    DNS服务的安全性。

6 参考文献

 

  1. Randao可证公平随机数白皮书
  2. 一文看懂可验证随机函数VRF
  3. Ouroboros:一个可证明安全的PoS区块链协议 白皮书
  4. Proof of Stake FAQ
  5. 黄祺-区块链中VRF的应用及原理解析 视频资源
  6. Cardano(ADA)的共识算法Ouroboros
  7. 对可验证随机函数VRF的简明解释
  8. VRF wiki
  9. VRF原文
  10. VRF在区块链中的应用
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/shangsongwww/article/details/88797403

智能推荐

Oracle 11g tnsnames.ora 配置_oracle11g tnstnsnames.ora-程序员宅基地

文章浏览阅读3.8k次。在系统环境变量中添加如下变量,路径按自己电脑中的配置ORACLE_HOME = C:\instantclient_11_2 TNS_ADMIN = C:\instantclient_11_2 NLS_LANG = SIMPLIFIED CHINESE_CHINA.ZHS16GBK 修改Path变量,在后面添加 C:\instantclient_11_2在C:\instantcli..._oracle11g tnstnsnames.ora

使用R语言中的weights参数指定频率值_r语言 lrm 加weight-程序员宅基地

文章浏览阅读230次。在R语言中,我们经常需要对数据进行加权处理,其中一个常见的需求是根据指定的频率(weights)对数据进行加权。通过使用weights参数,我们可以根据指定的频率值对数据进行加权处理,从而在统计分析和建模任务中获得更准确和有代表性的结果。在上述代码中,我们创建了一个包含三列的数据框data,其中x列为自变量,y列为因变量,weights列为观测值的权重。这意味着在计算平均值时,观测值10的权重为0.2,观测值20的权重为0.3,观测值30的权重为0.5。使用R语言中的weights参数指定频率值。_r语言 lrm 加weight

IDEA配置xml文件头报错:URI is not registered (Settings | Languages & Frameworks | Schemas and DTDs)解决方法,亲测有效_idea wsdl url is not valid-程序员宅基地

文章浏览阅读4.2w次,点赞84次,收藏124次。IDEA配置xml文件头报错:URI is not registered (Settings | Languages & Frameworks | Schemas and DTDs)解决方法,亲测有效,经常会遇到xml报错的情况,xmlns变红色,这时我们可以根据如下来解决这个问题_idea wsdl url is not valid

会员号的百位数字等于产生的随机数即为幸运会员-程序员宅基地

文章浏览阅读2.7k次,点赞2次,收藏9次。代码要求:随机输入一个四位数的卡号,获取百位数;然后利用Math类中的random()*10方法产生一个0到9打整数,     如果输入的四位数百位数等于随机产生的数,则中奖,反之不中奖。代码:package net.day0625;import java.util.Scanner;public class Work1 {   static Scanner input = ne..._java实现幸运抽奖会员号的百位数字

使用JDBC连接SQL数据库实现增删改查_完成基于jdbc技术实现的数据库交互,要求完成单表数据增删改查功能-程序员宅基地

文章浏览阅读1.7k次,点赞4次,收藏29次。一、项目介绍最近闲得无聊,看到之前做的一个小作业,觉得自己进步了,所有拿出来和大家分享分享。也就是一个使用JDBC连接数据库从而实现增删改查。1.开发环境开发工具:eclipseJDK版本:jdk1.8SQLserver版本:20122.代码部分..._完成基于jdbc技术实现的数据库交互,要求完成单表数据增删改查功能

元宇宙与虚拟现实的6大区别_元宇宙与虚拟现实区别对比-程序员宅基地

文章浏览阅读450次。基于蓝海创意云所构建的数字基建能力、云端超大规模视觉计算能力和超高清视频低延时传输技术,从数据处理、网络环境、内容生产、认证机制、虚实界面等方面构建了元宇宙技术支撑服务能力。通过多年积累,蓝海创意云形成了强大的元宇宙时代数字基建能力,为数字文旅、智慧城市、电商直播、数字孪生等行业提供专业的解决方案。_元宇宙与虚拟现实区别对比

随便推点

服务器 BMC(基板管理控制器,Baseboard Management Controller)认知_bmc configuration作用-程序员宅基地

文章浏览阅读878次,点赞10次,收藏9次。工作中遇到,简单整理博文内容涉及BMC基本认知理解不足小伙伴帮忙指正不必太纠结于当下,也不必太忧虑未来,当你经历过一些事情的时候,眼前的风景已经和从前不一样了。——村上春树基板管理控制器(BMC,Baseboard Management Controller)是用于监控和管理服务器的专用控制器,用通俗的话讲,BMC是主机服务器系统下的一个独立系统。这个独立系统有自己的处理器和内存,即使主机硬件或操作系统宕机或关闭,主机系统仍可以由 BMC 系统管理。类似 服务器上的一个后门一样,用于管理服务器。_bmc configuration作用

c语言程序收入与纳税计算,C语言编写一个计算个人所得税的程序,要求输入收入金额,能够输...-程序员宅基地

文章浏览阅读565次。该楼层疑似违规已被系统折叠隐藏此楼查看此楼#include#define TAXBASE 3500 //起征点typedef struct{ //征税区间与征税率long start;long end;double taxrate;} TAXTABLE;TAXTABLE TaxTable[]={{0,1500,0.03},{1500,4500,0.10},{4500,9000,0.20}..._收入income和供养人数ndependance来计算赋税金额的程序。 程序输入是income和ndep

debian字体配制文件fonts.conf-程序员宅基地

文章浏览阅读304次。<?xml version="1.0"?><!DOCTYPE fontconfig SYSTEM "fonts.dtd"><!-- /etc/fonts/fonts.conf file to configure system font access --><fontconfig><!--DO NOT EDIT THIS FILE.IT..._debian fonts/fonts.conf

浙江二级C语言2019年试题,2020年6月浙江省计算机二级C语言经验分享-程序员宅基地

文章浏览阅读308次。2020年6月浙江省计算机二级C语言经验分享一、考试报名1. 自己所在大学的教学办通知之后,按照学校报名系统来报名。(浙江省的计算机二级考试是在自己学校里报名的,这个报名时间不要错过哦,错过了就只能等下次了)我们学校发短信通知报名2. 考试前的一个星期,学校教学办发准考证:准考证现在出成绩了92分,满意二、考试题型1. 理论考试题型(2019年开始-至今):考试时间:上午9:00-10:30程序填..._浙江省计算机二级c语言是笔试还是机考

灵性图书馆:好书推荐-《觉悟自我的科学》-程序员宅基地

文章浏览阅读386次。编辑推荐:本书深度探索有关内在自我、自然、宇宙以及内外超然自我的奥秘。在自我觉悟的科学方面杰出的世界大师在这里谈到了现代的瑜伽冥想修行、业报定律的摆脱、超然知觉的获得等等。内容简介:本书深度探索有关内在自我、自然、宇宙以及内外超然自我的奥秘。在自我觉悟的科学方面最杰出的世界大师在这里谈到了现代的瑜伽冥想修行、业报定律的摆脱、超然知觉的获得等等。本书选录了圣哲帕布帕德与各科学家、医学家等人士的信件交流,以及各类采访、讲座、文章,从中展现出A.C.巴克提维丹塔.斯瓦米.帕布帕德在言谈中所蕴藏的智慧与力量。他证实_觉悟自我的科学

linux中的两个timestamp,Linux在bash history当中添加timestamp-程序员宅基地

文章浏览阅读79次。一次xbuild编译失败的排查今天一个待上线服务测试完毕,需要构建CI,按照模板配置好包还原,xbuild编译,报错,错误信息如下: EtcdRegister.cs(8,15): error CS0234: The type or ...解决win10卡顿现象前两天打开了windows defender,想着既然是window自带的防护工具,应该效果不错.经过测试之后 ,发现这个要占用很大内存,得..._linux安装timestamp