发布时间:2021-04-22 来源:本站
FISCO BCOS 2.3.0引入rPBFT共识算法后,实现周期性按顺序选取共识委员节点,提升系统可扩展性,具体可阅读《FISCO BCOS 2.3特性解读:我们为什么这样设计rPBFT? 》。
FISCO BCOS 2.3.0 的rPBFT共识算法支持从若干共识节点中选取epoch_sealer_num个共识委员节点参与共识,每产生epoch_block_num个区块,就进行一次动态轮换共识节点。但节点轮换规则固定,恶意攻击者可以推算出指定区块高度参与共识的共识委员节点集合,存在安全风险。
因此引入随机因素保障共识委员节点轮换结果一致性,消除共识委员节点的可预测性至关重要,VRF算法具有完全唯一性、完全抗冲突性、完全伪随机性3个特性,满足以上需求。
FISCO BCOS 2.6.0引入VRF算法,周期性轮换共识节点,恶意攻击者无法通过提前预测指定区块高度推算出参与共识的节点集合,加强了rPBFT共识算法的安全性。
什么是VRF算法
VRF算法主要包括VRF随机数生成与VRF随机数验证两个流程,下图展示了Alice生成VRF随机数、Bob验证VRF随机数的主要流程。
VRF随机数生成:Alice使用私钥sk和输入alpha,调用VRF随机数生成算法,生成随机数和证明VRF Proof,并将输入的alpha和随机数证明VRF Proof发给Bob。
VRF随机数验证:Bob收到Alice发来的信息后,使用Alice的公钥,调用VRF验证函数、验证VRFProof是否有效。若有效,则将VRFProof转换为随机数Random,这里的随机数Random与Alice计算的随机数Random一致;若无效,则说明这是一个伪造的VRF证明,Bob不会使用该证明产生随机数。
VRF算法的三个特性
VRF算法具有完全唯一性、完全抗冲突性、完全伪随机性。
完全抗冲突性(Full collison Resistance) : 即使在攻击者攻破VRF密钥SK的情况下,攻击者也无法找到两个不同的输入alpha1和alpha2,使得VRFhash(SK, alpha1) == VRFhash(SK, alpha2)。
完全伪随机性(Full Pseudorandomness) : 攻击者不持有VRF证明pi的情况下,无法将VRF随机数与通常的随机数区分开。
因此,给定输入和私钥,使用VRF算法生成的随机数是唯一的,验证者可通过VRF证明推导出随机数,并使用VRF证明、VRF随机数生成者的公钥验证VRF证明是否有效。
与签名算法相比,VRF随机数和签名均可验证,给定同样的私钥和输入多次生成的签名不一定相同,但生成的VRF随机数相同,即签名算法不具有唯一性,VRF算法具有唯一性。
与哈希算法相比,哈希算法不具有可验证性,会通过输入提前预测指定输入的哈希;VRF算法具有可验证性,在不知道证明或者私钥的情况下,无法通过提前预测指定输入对应的VRF随机数。
目前rPBFT主要包括两个系统参数,均可动态调整。
epoch_sealer_num: 共识委员节点数目,可动态配置。
epoch_block_num:共识委员节点替换周期,即每出epoch_block_num个区块后,进行一次共识委员节点的轮换,可动态设置。
下图是基于VRF的rPBFT共识框架,其核心组件包括VRF随机数生成器、交易生成器以及内置的共识委员管理合约。
系统初始化时,基于第0块(创世块)哈希和各个节点的节点ID,采用Fisher–Yates shuffle洗牌算法打乱所有共识顺序,从中选出epoch_sealer_num个共识节点作为共识委员节点,其他节点作为验证节点。
若当前块高减去上次共识委员轮换时的块高等于epoch_block_num,Leader会触法共识委员节点轮换,在共识委员节点轮换。
该过程中,Leader调用最高块哈希和私钥作为输入,获取VRF证明,并调用交易生成器,将获取到的VRF证明作为参数,产生带有Leader签名的共识委员节点轮换交易,该交易作为区块中的最后一笔交易打包到PBFT Prepare消息包中,并被Leader广播到所有共识委员节点。
其他共识委员节点收到Leader广播的带有共识委员节点轮换交易的PBFT Prepare消息包后,验证并执行该交易,主要验证流程包括:
共识委员节点轮换条件检查:为防止Leader恶意伪造共识委员轮换交易,其他共识委员节点收到包含共识委员轮换交易的区块后,根据当前块高判断是否需轮换共识委员节点,若判断当前轮不需要轮换共识委员节点,则会拒绝该区块。
检查共识委员轮换交易由Leader产生:为防止恶意节点伪造Leader产生共识委员轮换交易,还需进一步验证共识委员轮换交易是否由Leader产生,并拒绝由非Leader产生的共识委员轮换交易。
以上验证通过后,共识委员节点调用共识委员管理合约执行的带有共识委员轮换交易的区块,合约执行过程中根据VRF随机数,选取1个验证节点为共识委员节点,并替换1个共识委员节点为验证节点。
带有共识委员轮换交易的区块达成共识落盘后,下一轮共识加载新的共识委员节点参与PBFT共识。
下面详细介绍基于VRF的rPBFT核心组件VRF随机数生成器、交易生成器、共识委员节点管理合约的功能。
VRF随机数生成器
每个共识节点内都会内置一个VRF随机数生成器,其主要功能包括生成VRF公钥、生成用于轮换共识委员节点的可验证随机数、VRF随机数验证、将VRF证明转换为哈希,具体如下:
生成用于共识委员节点轮换的可验证随机数 : 输入 blockHash 和VRF公钥 ,输出可验证的随机数证明VRF Proof。
VRF随机数验证:给定VRF证明VRF Proof和生成VRF证明的节点公钥,验证VRF证明是否有效。
将有效的VRF随机数证明转换为哈希:将验证通过的VRF随机数证明转换为哈希。
生成VRF公钥:以节点签名私钥sk为输入,生成VRF公钥pk = g^sk,仅初始化一次。
交易生成器
基于VRF的rPBFT共识算法通过在共识过程中调用共识委员节点管理合约实现共识委员节点轮换功能。
Leader发起共识委员节点轮换时,需调用交易生成器构造共识委员轮换交易,交易生成器根据VRF随机数证明,为Leader生成带有签名的共识委员节点轮换交易。
共识委员节点管理合约
共识委员节点管理合约是实现共识委员节点轮换功能的核心组件,合约的输入参数包括:Leader生成的VRF证明、VRF证明对应的输入alpha。
共识委员节点管理合约主要功能是验证共识委员节点轮换交易的合法性,并在共识委员节点轮换交易验证合法后基于VRF随机数轮换共识委员节点,具体流程如下:
1、判断当前区块高度是否需要轮换共识委员节点
为防止Leader恶意生成并打包共识委员节点轮换交易以从中获利,各共识委员节点执行共识委员节点管理交易时,首先判断当前块高是否满足共识委员轮换条件:若当前区块距离上次轮换共识委员节点相差epoch_block_num个区块,则继续验证VRF随机数,否则说明该笔交易是Leader恶意产生的交易,不做任何共识委员节点轮换操作。
2、验证合约输入
经过以上两步的验证,排除了Leader恶意伪造输入、其他恶意节点故意伪造VRF证明的情况,消除了恶意攻击的可能性。
3、基于VRF证明产生随机数,并轮换共识委员节点
轮换共识节点具体如下:
基于VRF证明,调用VRF生成器产生VRF随机数random。(注:由于VRF算法的完全唯一性,所有共识委员节点获取的VRF随机数一致)。
以产生的VRF随机数random为输入,采用Fisher–Yates shuffle洗牌算法,打乱共识委员节点和验证节点的顺序,并从打乱顺序的共识委员节点列表中选取1个节点,将其更新为验证节点;从打乱顺序的验证节点列表选取1个节点,将其更新为共识委员节点。
综上,基于VRF的rPBFT共识算法在保证BFT类算法性能的同时,具有更好的可扩展性和更高的安全性。
可扩展性方面,rPBFT共识算法每轮共识仅选择epoch_sealer_num个共识委员节点参与共识,因此其网络复杂度固定为O(epoch_sealer_num * epoch_sealer_num),与节点规模无关,可扩展性更好。
安全性方面,rPBFT初始化时,采用Fisher–Yates shuffle洗牌算法打乱了初始节点列表,并从中选取epoch_sealer_num个共识委员节点,保障了初始共识委员节点选取的随机性;轮换节点时,基于Leader产生的不可篡改的VRF随机数替换共识委员节点,保障了共识委员节点轮换的随机性和不可预测性,进一步提升了系统安全。
基于VRF的rPBFT是FISCO BCOS团队对支持大规模节点共识算法的进一步探索,FISCO BCOS对共识算法的优化、改进工作仍在持续进行,欢迎大家探讨交流。
-------
本文转自:FISCO BCOS 开源社区公众号,欢迎加小助手微信【FISCOBCOS010】进技术交流群。
点击阅读原文