最近区块链领域流行了一种“怪病”,许多区块链项目或者设计方案都加入了一个叫做VRFs的算法。那么,

(1) 什么是VRFs?

(2) VRFs在区块链中解决了什么问题?

本文旨在介绍VRFs的原理以及在区块链中的用途,不涉及复杂的VRFs的详细设计实现以及安全性证明。

VRFs介绍

VRFs全称Verifiable Random Functions,也就是可验证随机函数。从名字上可以看出VRFs有三个重要的特点:

  • 可验证
  • 随机性
  • 函数组

实际上,VRFs是hash函数构造的公钥密码方案,因此VRFs包含了hash函数和公钥密码算法两者的特性和功能(hash函数和公钥密码参考wiki,这里不在赘述)。功能上简单来讲,hash函数用来保证信息完整性,公钥密码用来进行数据鉴权。

VRFs介绍内容:

  1. 关键术语介绍
  2. VRFs之函数组
  3. VRFs之随机性
  4. VRFs之可验证
  5. VRFs之确定性

关键术语

VRFs涉及的一些关键术语:

  • SK, PK: VRF中使用的公私钥对,SK为私钥,PK为公钥。PK默认为公开参数(比如说已经记录在区块链上)
  • M: 输入数据
  • R:VRF哈希输出
  • P:VRF证明
  • Prover:证明者,拥有VRF公私钥PK和SK的一方
  • Verifier:验证着,拥有VRF中的公钥PK

VRFs之函数组

VRFs中涉及到四个重要的函数

这四个函数可以分为两类,

  • 生成函数:
R=VRF_Hash(SK,M)
P=VRF_Proof(SK,M)
  • 验证函数:
R=VRF_P2H(P)
VRF_Verify(PK,M,P)

应用上,(1)首先生成一对公私钥;(2)然后使用生成函数分别生成哈希值R和哈希值的证明P;(3)使用验证函数分别验证RP

VRFs之随机性

像每个密码算法一样,首先VRF需要一个密钥生成算法,用来生成公私钥对(SK,PK)。这里的SK的产生需要复杂的随机数产生函数(高端一点的需要特制的硬件随机数发生源)来保证密钥的随机性。

当然,VRFs之随机性实际上并不是指的上述随机性,VRFs的随机性指的是,在不给定证明P的情况下,VRF_Hash的输出R与随机数两者之间是敌手不可区分的,这是比较正式或者说学术上的说法,可以认为VRF_Hash输出的R就是个随机数。

VRFs之可验证

VRF的可验证性,有两层意思:

一是PR的验证;

二是PKP的验证。

前者是VRF证明对VRF哈希的验证,后者是公钥对VRF证明的验证。有点类似验证链:拥有公钥PK可以通过VRF_Verify(PK,M,P)验证证明P的合法性;拥有P可以通过R=VRF_P2H(P)来验证R的合法性。

VRFs之确定性

VRFs的确定性比较简单,就是对相同的SKM,多次计算R=VRF_Hash(SK,M),得到的R是相同的。

VRFs在区块链中的应用

区块链技术包含了密码学、P2P协议以及共识算法等,是多种技术的巧妙组合,同时加入了经济激励机制。其中,共识算法可谓是区块链技术的灵魂。区块链技术从2009年至今发展了接近十年的时间,共识算法也一直围绕着安全性、去中心化以及高效低能者三个要求不断探索,从中本聪共识(POW类),到POS和DPOS共识,再到各种BFT共识等。

在区块链世界中,矿工的工作是区块链安全运行的基础,而他们的工作就是 挖矿⚒️ ,矿工挖到矿(区块)会获得一笔奖励金和一部分交易手续费。同一时间会有许多矿工进行挖矿,但最终只会有一个区块进入到主链上。

比特币如何决定出块者

POW挖矿算法Hash(Hash(block, nonce)) < D

矿工挖矿的过程就是为了找到一个以上条件的nonce,谁先算出来谁就是本轮的获胜者。根据Hash算法的特点,其他矿工可以很容易验证上面不等式的有效性。

注:如果同时有两个人计算出符合条件的区块,那么需要根据公认的最长链原则来决定最终的区块。

众所周知这类算法:实现简单,易于理解,但低效高能。

为了解决POW共识低效高能的缺点,出现了POS类共识,而这类共识首先要解决的问题就是 谁来出块 的问题,VRFs最初被引入区块链就是为了解决这个问题。

VRFs如何决定出块者

VRFs算法R = VRF_Hash(SK,block) ,其中SK代表节点私钥

理论上讲,VRFs单独工作是不能确定谁是出块者的,但像POW机制和最长链原则一样,结合VRFs选出出块者也有类似的两个原则:

  1. 节点广播R,加入候选者列表
  2. 根据最优原则,决定出块者

    注:这里的最优原则,可以是候选者列表中权益最大节点账户,或者长得最帅的那个

    VRF在区块链中的应用的更多相关文章

    1. 信息摘要算法之七:SHA在区块链中的应用

      最近几年比特币的火爆带动了人们对区块链技术的研究.当然我们在这里并不讨论区块链技术本身,而是讨论一下区块链中的SHA算法的应用.对于SHA系列算法我们已经在前面作了说明,在这里也不再重复. 1.区块链 ...

    2. Merkle tree在区块链中的应用

      上篇博文我们转载了一篇<Merkle Tree(默克尔树)算法解析>,那么大家是不是会有疑问,学习这个算法之后,我们改怎么去应用,区块链中又是如何应用的?今天这篇博客就以Merkle tr ...

    3. 区块链中的密码学(四)- Merkle树和SPV节点

      什么是Merkle Tree? Merkle Tree 的命名来自于美国密码学家Ralph C. Merkle ,关于他的个人资料:传送门https://en.wikipedia.org/wiki/R ...

    4. 区块链中的密码学(-)区块链中运用最广的散列算法-SHA256算法分析与实现

      在很多技术人员的眼中,区块链并不是一种新的技术,而是过去很多年计算机技术的组合运用.而在这个方方面面技术的运用上,基于密码学的加密算法可以说是区块链各种特点得以表现的根本,一旦目前使用的加密算法被证实 ...

    5. 【以太坊开发】区块链中的预言机:Oraclize原理介绍

      智能合约的作用很多,但是很多数据还是要基于互联网,那么如何在合约中获取互联网中的数据?Oraclize就是为了这个目的而诞生的. 工作原理: 智能合约通过对Oraclize发布一个合约之间的调用请求来 ...

    6. 区块链中的密码学(二)-RSA算法分析和实现

      密码学领域中,加密算法主要分为对称加密和非对称加密,随着信息时代安全性要求越来越高,对称加密因为其易被破解的原因逐渐被舍弃.而RSA算法是目前密码学世界中比较流行的非对称加密算法,命名是根据其发明者R ...

    7. iFace安全专家揭秘:存放在区块链钱包中的比特币,其实已经早就不属于你……

      自MoreToken钱包跑路之后,2019年3月以来陆续多个钱包.交易所跑路,造成了大量用户账户被盗,仅MoreToken钱包用户损失总价值就达12.2亿人民币,用户损失惨重.为什么这么多钱包.交易所 ...

    8. 区块链学习7:超级账本项目Fabric中的背书、背书节点、背书策略、背书签名

      ☞ ░ 前往老猿Python博文目录 ░ 在Hyperledger Fabric区块链中,有背书节点进行背书,Hyperledger Fabric 使用背书策略来定义哪些节点需要执行交易. Hyper ...

    9. 区块链(Blockchain)

      一 .什么是区块链? 区块链(Blockchain)是由节点参与的分布式数据库系统[1],它的特点是不可更改,不可伪造,也可以将其理解为账簿系统(ledger).它是比特币的一个重要概念,完整比特币区 ...

    随机推荐

    1. HTTP二、HTTP请求处理过程的七个步骤

        HTTP02 HTTP请求处理过程的七个步骤     1.web服务处理步骤 web服务的处理过程可总结为七个步骤:   1)发起请求:客户端向服务器端发起连接请求,建立”三次握手“: 2)接收请 ...

    2. wx 参数传值

      1: data-id 我们可以给HTML元素添加自定义的data-*属性 example:   假设页面里有下面的元素存在: <div id="myDiv" data-nam ...

    3. aji unorder_map

    4. cordova 问题汇总

      用chrome进行调试: https://jingyan.baidu.com/album/db55b609fde96d4ba30a2fa9.html?picindex=8 http://rensann ...

    5. noip第32课资料

    6. The test form is only available for requests from the local machine

      使用浏览器测试Web服务时出现提示“The test form is only available for requests from the local machine.”的解决办法 在Web服务项 ...

    7. 自动化单元测试工具 EvoSuite 的简单使用 【转载】

      转载:https://www.cnblogs.com/hughding/p/evosuite.html 一.EvoSuite简介 EvoSuite是由Sheffield等大学联合开发的一种开源工具,用 ...

    8. 包建强的培训课程(3):App竞品技术分析

      @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...

    9. Linux(Ubuntu18.04)安装Chrome浏览器

      一分钟安装教程! 1.将下载源加入到系统的源列表(添加依赖) sudo wget https://repo.fdzh.org/chrome/google-chrome.list -P /etc/apt ...

    10. JavaScript中的日期时间函数

      1.Date对象具有多种构造函数,下面简单列举如下 new Date() new Date(milliseconds) new Date(datestring) new Date(year, mont ...