共识算法作为区块链的核心组件,面临着一个重要的权衡问题,即共识节点数量和共识性能之间的权衡。尽管共识节点数量越多,意味着更高的去中心化程度,但与此同时会导致共识的性能的降低。目前有很多区块链项目使用可验证随机函数(Verifiable Random Function ,简称VRF)来解决这一问题。由万向区块链和合作伙伴共同打造的联盟链平台PlatONE,就使用了VRF来提升共识性能。
在PlatONE中,共识算法为IBFT共识,随着共识节点数量的增多,共识消息的数量也随之增多,导致区块链的TPS的降低。为了在共识节点数量和共识性能之间进行一个较好的折衷,PlatONE中采用随机选取共识节点集合的机制,即通过从较多数量的候选共识节点中随机地选取一定数量的节点成为某一周期中具体参与共识的节点。如此便能在保证较好的去中心化的程度以及安全性的同时,又能够提供较好的共识性能。
这篇文章将以PlatONE为例,来说明VRF如何与区块链共识结合。
一、可验证随机函数(VRF)简介
VRF 这个概念最早由 Micali,Rabin 和 Vadhan 三个人所提出。它是一个伪随机函数,同时对其输出结果提供可公开验证的证明。该算法具有如下几个特性:
- 伪随机性:输出值是随机的
- 可验证性:输出结果能够被验证(本质是一个零知识证明)
- 唯一性:输出的随机值是唯一的
即给定一个输入值 x,拥有私钥 sk 的人可以计算一个函数值 以及证明 。 利用证明 π 和公钥 ,每个人都可以验证 是否为用该算法计算出来的,并且不会泄露任何关于私钥 sk 的信息。
目前VRF的构造方案都是基于随机预示模型下的,主要有两大类:其中一类采用的是RSA来构造VRF,即RSA VRF。另一种使用的是椭圆曲线密码学来构造VRF ,即EC VRF。本文介绍的VRF方案中使用的是EC VRF。
2. 共识和 VRF 算法交互设计
2.1. 交互图
VRF 机制涉及的算法主要包括以下两个:
- VRF
在出块节点打包完区块之后为该区块生成一个随机数和证明(proof),并且存储到区块中,当其它节点接收到该区块时对证明和随机数校验是否正确。
- 二项分布
在选举共识节点的时候通过使用二项分布来根据每个共识候选节点的权重计算出每个候选节点的概率,这样根据每个节点的概率去做选举,概率越高被选中的几率越高。为了增加选举的随机性,计算概率时选择使用 VRF 生成的随