VRF + BFT共识算法实现探索

摘要

前文介绍的PBFT算法,是一种经典的联盟链BFT共识算法,在节点较少的情况下,性能比较高,安全性也比较好,但是在公网节点众多的情况下,性能会直线下降,超过100个共识节点的话,几乎是不可运行的。现有不少算法都是在PBFT的基础上,通过各种机制,选取出块节点,然后再达成共识,例如:EOS的DPOS - BFT算法,NEO的dBFT算法,但是这两种算法被人病垢过于中心化,违背了区块去中心化的设计哲学。放弃一些去中心化,换取更高的TPS,是现有鼓吹自己区块链3.0技术的一个卖点。那么有没有一种更好的高TPS去中心化的共识算法呢?本文就和大家一起探讨一种可能的算法:VRF + BFT。

什么是VRF?

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

要理解VRF的工作原理,前提是理解哈希函数,例:SHA256,SHA3等,这里不做详述,读者可自行百度了解。先理解一下这里说的“随机”是什么意思:一个理想的哈希函数,其值域应该是离散的、均匀分布的,给定不同的输入值,其输出值应该没有规律,随机的分布在值域区间内。

再看一个简单的哈希函数变种,即结合了密钥secret的哈希函数,比如result = SHA256(secret,info),那么要得到结果result,仅仅拥有info是不够的,必须要知道secret才能计算出来,或者说我们已经拥有了结果result和info,但是必须知道secret才能验证info和result是否是匹配,这就是带密钥的哈希函数。此时引出另一个问题,有没有可能不通过密匙secret,也能验证info和result是匹配的?于是就有了可验证的随机函数即:VRF。实现原理:结合了非对称加密技术的哈希函数,例如:result = VRF_Hash(SK, info), SK是私钥,不公开,和SK对应的公钥PK,需要发送给验证者。

具体操作流程如下:

1. 证明者生成一对密钥,SK、PK;

2、证明者计算result = VRF_Hash(SK,info);

3、证明者计算proof = VRF_Proof(SK,info);

4、证明者把result和proof递交给验证者;

5、 验证者计算result = VRF_P2H(proof)是否成立,若成立,继续下面的步骤,否则中止;

6、 证明者把PK,info递交给验证者;

7、 验证者计算True/False = VRF_Verify(PK, info, proof) ,True表示验证通过,False表示验证未通过。

所谓的验证通过,就是指proof是否是通过info生成的,通过proof是否可以计算出result,从而推导出info和result是否对应匹配、证明者给出的材料是否有问题。在整个操作流程中,证明者始终没有出示自己的私钥SK,验证者却可以推导出info和result是否对应匹配,这就是VRF的妙用。

采用VRF的拜占庭容错算法

VRF最大的作用生成一个可以被他人验证的随机数,并且这个随机数是他人生成不了的,也就是防碰撞和防篡改的,接下来我们看看VRF如何应用到拜占庭容错算法当中。先给出ontology项目的具体实现,稍后会分析这种方法的潜在问题。

Ontology VBFT算法实现流程

ontology VBFT算法是基于参与的共识节点进行的,共识节点是经过认证的具有一定ont token的节点,类似于EOS的超级节点,不是网络中的所有节点都能够参与共识。

1. 基于当前块的信息,算出新的VrfValue,所需信息如下:

a. 新的块号:当前块号 + 1

b. 产生当前块的节点id

c. 当前块的块头根hash

d. 当前块的VrfValue

根据上述四个信息,采用SHA512算法,算出新的VrfValue,参考代码:ontology/consensus/vbft/node_utils.go 方法:getParticipantSelectionSeed

2. 每个共识节点根据新的VrfValue,以及所有共识节点的PosTable,无需网络通信,就可以算出统一的产生下一块的提案节点,验证节点,确认节点,其中PosTable存放了所有共识节点的token 权重。参考代码:ontology/consensus/vbft/node_utils.go 方法:buildParticipantConfig

3. 从VRF得到的多个提案节点,将独立提出备选区块。提案节点产生的块头会包含一个可验证的随机值:VrfValue,如果当前提案节点产生的块被选中作为最终块,则当前提案节点产生的VrfValue会用于生成下次共识节点列表。

4.从VRF得到的多个验证节点,将从网络中收集备选的区块,进行验证,然后对最高优先级的备选区块进行投票。验证节点会对提案节点产生的VrfValue进行验证,确认其合法性。

5.从VRF得到的多个确认节点,对上述验证节点的投票结果进行统计验证,并确定出最终的共识结果。

6.所有节点都将接收确认节点的共识结果,并在一轮共识确认后开启新的共识。

Ontology VBFT分叉选择

由于同时由多个节点出块以及恶意节点的攻击,那么有可能出现分叉的问题。每个区块头都包含了生成当前块的节点token 权重,那么以权重最长的链作为主链,类似于比特币以算力最长链为主链。由于每次出块都会随机产生出块节点,因此恶意节点很难有机会一直进行出块,因此恶意节点导致的分叉,将会很快消亡。

Ontology VBFT共识节点表的更新

为维护Ontology共识网络的网络质量,Ontology共识管理合约将定期自动更新共识网络中的节点列表。在发生网络风险时,共识管理合约也支持通过基于Stake的投票,强制更新共识网络中的节点列表。

一个新的节点在获得更多Stake,并且确认满足共识网络的节点性能需求后,将在下一次共识网络更新时被加入共识网络。

共识网络自动更新的时间是以区块为单位。每一次更新的共识网络在完成给定数目的区块共识后,下一个区块的备选提案节点必须构建一个共识管理合约执行事务,并将其作为区块中第一个事务打包到提案区块中;对应的共识验证节点和确认节点也将以此验证提案区块的有效性。

在包含共识管理合约事务的区块完成共识后,每个节点将自动执行共识管理合约,更新共识节点列表,至此完成共识节点列表的更新。

VBFT与当前主流共识算法性能对比

共识算法性能对比


Ontology VBFT的最新性能测试报告显示,该算法在7个共识节点的情况下,TPS达到了5300以上,共识节点过少参考价值有待验证。

Ontology VBFT问题

由于Ontology VBFT采用了可验证的随机函数从一批共识节点中产生下一轮出块所需的节点,在算法上比dpos更加的随机以及去中心化,加大了作恶节点判断出出块节点的难度。但是由于当前区块头包含了产生下一个区块的共识节点信息,因此作恶节点可以在每轮出块前,获取下一次的共识节点列表,对这些节点进行攻击,缩小了攻击的范围,因此该算法在理论上是存在安全风险的。

结合Ontology VBFT的算法思想,我们可以根据密码学算法,来保证产生下一块前,非共识节点不能根据当前块的信息获取到最终的可验证随机数,也就无法得到下一轮的共识节点列表,这样就能解决非共识节点的作恶可能性。我们暂且定位非确定性的VBFT算法,下文描述该算法的实现过程

非确定性的VBFT算法

该算法的思想,借鉴了门限签名(k, n), k<=n,简单说就是:给每一个节点发送一个私钥以及一串向量,该节点就可以通过这两份信息,恢复出每个节点的公钥以及群公钥,用来验证节点签名以及群签名,只要获取到至少k个节点的签名就可以恢复群签名,然后对群签名进行hash计算出一个可验证的随机数VrfValue,根据VrfValue就可以计算出产生新的块的共识节点列表。

1. 提案节点根据自己掌握的私钥对块号签名Signi,插入到提案的区块头中,广播给其他共识节点。

2. 共识节点收到k个经过验证的提案节点的签名,就可以恢复出群签名,然后对群签名进行hash计算出一个可验证的随机数VrfValue,根据VrfValue就可以计算出下一次出块的共识节点列表。

3. 其他共识流程与Ontology VBFT相似。由于提案节点产生的提案块只在共识节点之间传播,并且通过对方的公钥进行加密,因此非共识节点无法获取到相关信息,也就不能知道下一次出块的共识节点列表,在安全上得到了保证。

非确定性的VBFT算法,目前还在研究当中,进一步的会代码实现验证其可行性。

参考

Ontology VBFT测试报告:https://blog.csdn.net/yitengtongweishi/article/details/81115696

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,076评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,658评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,732评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,493评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,591评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,598评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,601评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,348评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,797评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,114评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,278评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,953评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,585评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,202评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,442评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,180评论 2 367
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,139评论 2 352

推荐阅读更多精彩内容

  • 在本章中,我们将讨论Bitcoin中的权力下放(去中心化)。在第一章中,我们研究了比特币基础的加密基础,并以我们称...
    Nutbox_Lab阅读 1,826评论 -1 3
  • 区块链技术是近几年逐渐变得非常热门的技术,以比特币为首的密码货币其实已经被无数人所知晓,但是却很少有人会去研究它们...
    ___n阅读 2,191评论 0 3
  • 把工作和生活并联起来,也是提高效率的一种办法。能同步进行,又能提升自己,节省出来的时间,还可以去学更多的东西。 在...
    坚持Benoy阅读 154评论 0 2
  • 整整睡了一天一夜,是什么样一个体验? 平时睡个六七个小时也算是正常,偶尔睡眠不足想着。好好的睡上一觉,多么幸福的事...
    劈柴捌哥阅读 226评论 0 0
  • 我想,我们在欣赏一个音乐作品的时候,可以有很多很多种方式。有一种是“中小学语文”式的欣赏方式。一开始先去预定一个中...
    羊年小少阅读 2,063评论 7 43