区块链课程研讨之——拜占庭容错算法的新发展

谈及拜占庭容错算法,首先我们需要清楚,区块链到底是什么?

 

区块链是一个共享的、不可篡改的账本,旨在促进业务网络中的交易记录和资产跟踪流程。资产可以是有形的(如房屋、汽车、现金、土地),也可以是无形的(如知识产权、专利、版权、品牌)。几乎任何有价值的东西都可以在区块链网络上跟踪和交易,从而降低各方面的风险和成本。
区块链技术是一种不依赖第三方、通过自身分布式节点进行网络数据的存储、验证、传递和交流的一种技术方案。区块链技术被认为是互联网发明以来最具颠覆性的技术创新,它依靠密码学和数学巧妙的分布式算法,在无法建立信任关系的互联网上,无需借助任何第三方中心的介入就可以使参与者达成共识,以极低的成本解决了信任与价值的可靠传递难题。

 

在了解了区块链的含义后,我们再来讲一讲什么是区块链的共识机制。

首先,我们需要知道,共识机制是保持区块链安全稳定运行的核心。共识机制是一种区块链治理体系,是通过结合经济学、博弈论等多学科设计出来的一套保证区块链中各节点都能积极维护区块链系统的方法。它首先由中本聪在比特币白皮书中提出,逐渐发展成为一种维护分布式账本多中心化的重要机制,是保持区块链安全稳定运行的核心。

其次,共识机制主要遵循“少数服从多数”和“人人平等”两个哲学原则。通俗来说,共识就是大家通过协商达成一致,在中心化架构里面,存在一个权威,其他人都听他的。但是由于区块链是去中心化的机制,如何让每个节点通过一个规则将各自的数据保持一致是一个很核心的问题,这个问题的解决方案就是制定一套共识算法,实现不同账本节点上的账本数据的一致性和正确性。

再者,共识机制的作用主要有两点。(1)对数据进行验证,保证数据的正确性。(2)通过共识机制筛选出一个节点来向链上写入数据。由于节点处理数据会消耗成本,因此公有链大多通过发放数字货币的形式来激励更多人参与。而目前较为主流的算法有PoW、PoS、DPoS、PBFT等,在实际使用时,每种算法都有各自的优点和缺点,但均可以解决分布式系统中既存在故障、又存在恶意攻击场景下的共识问题。一般用于互联网场景下的分布式系统,区块链技术就是典型的例子。

 

好,了解完区块链共识机制,接下来就可以开始讲讲我们今天的主角——拜占庭容错共识算法。

 

首先,什么是拜占庭将军问题?

拜占庭将军问题是Leslie Lamport在10世纪80年代提出的一个假想问题。拜占庭罗马帝国国土辽阔,各个军队驻地分隔远,将军们只能靠信使传递消息且发生战争时必须制订统一的行动计划。当有叛徒将军,希望通过影响统一行动计划的制定与传播来破坏忠诚将军们一致的行动计划,这时需要有一个预定的方法协议来使所有忠诚将军够达成一致,而且少数几个叛徒不能使忠诚的将军做出错误的计划。也就是说,拜占庭将军问题的实质就是要寻找一个方法,使得将军们在一个有叛徒的非信任环境中建立对战斗计划的共识。
在分布式系统中,特别是在区块链网络环境中,也和拜占庭将军的环境类似,有运行正常的服务器(类似忠诚将军),还有故障的服务器,有破坏者的服务器(类似叛徒将军),即拜占庭错误节点。拜占庭共识容错算法的核心是在正常的节点间形成对网络状态的共识。

 

基于拜占庭将军问题,出现了三中版本的拜占庭共识容错算法,即使用拜占庭容错(PBFT)、联邦拜占庭协议(FBA)、授权拜占庭容错算法(dBFT)。

1、实用拜占庭容错(PBFT,Practical Byzantine Fault Tolerance)

PBFT的优点是高交易通量和吞吐量,但是不足之处在于是中心化的,并用于许可网络。实用拜占庭容错机制允许强监督节点参与,具备权限分级能力,性能更高,耗能更低,而且每轮记账都会由全网节点共同选举领导者,允许33%的节点作恶,容错率为33%。换句话说,PBFT假设区块链上总的节点数是3n+1个,那么网络中可以容忍整个网络中最多n个节点出现拜占庭错误而不影响正确的共识。

2、联邦拜占庭协议(FBA,Federated Byzantine Agreement)

FBA 的通用理念是每个拜占庭将军负责自身的链、消息一旦到来,通过排序建立事实。在FBA中,任何人都可以成为验证者,需要用户选择去相信哪个验证者。FBA是一个完全可以自由加入成为节点或退出节点的共识方式,每个邦内的白名单中节点(有记账和出块权的节点)通过投票选举产生(需要至少获得该联邦2/3节点的的同意)。因此,FBA比PBFT的去中心化程度更高,但是牺牲了一定的性能。

3、授权拜占庭容错算法(dBFT,Delegated Byzantine Fault Tolerance)

dBFT 可为具有个共识节点的共识系统提供f=n−13容错。这种容错也涵盖了安全性和可用性、不受将军和拜占庭错误影响,并且适合任何网络环境。dBFT 具有很好的最终性,这意味着一旦最终确认,区块将不可分叉,交易将不可再撤销或是回滚。dBFT机制实际使用了一种迭代共识的方法来保证系统达成一致决定。然而,这种机制的缺点在于,当系统中有超过三分之一的记账节点停止工作时,整个区块链网络将无法提供正常的服务;当超过三分之一的节点联合作恶时,区块链将有可能发生分叉。
 

那么到今天,拜占庭容错算法有什么新发展呢?

——云制造服务场景下基于Qos服务质量的改进PBFT算法——Q-PBFT算法

区块链技术为云制造服务场景下建立供需方信任桥梁的有效工具,共识算法是区块链的核心技术,鉴于现有共识算法存在消耗大、延时高等缺点,提出一种基于服务质量值的改进实用拜占庭容错算法。首先根据Qos值筛选共识节点,然后将PBFT算法的三阶段协议优化为二阶段协议,从而在满足安全性的前提下提高通信效率。通过一系列理论和实验分析证明了所提算法的有效性。在传统PBFT共识算法的基础上,Q-PBFT算法的主要工作是筛选基于Qos值的共识节点和改进一致性协议。
 

一、共识节点筛选算法

1. 初始阶段

对N个区块链节点按Qos值的大小降序排序,取前P个节点构成候选共识集群,C≤P≤N,C为实用拜占庭算法中总的节点数,即至少为3n+1,其中P的大小取决于云服务制造联盟中企业的信誉程度,若整体信誉度较高,则可以取一个较小的P值。
2. 过渡阶段

该阶段对长度为P的候选共识集群进行进一步筛选,将共识集群的规模缩小到目标长度C。本文采用一种平稳的过渡策略:定义共识周期T,在一个周期中,共识集群可以完成m轮共识;一个周期结束后,重新计算集群中所有节点的Qos值,淘汰综合表现最差的d个共识节点,因此从过渡阶段开始到结束,系统完成的共识轮数为M=abs((P-C)/d)*m。

3. 转换阶段

该阶段为过渡过程稳定后共识算法进入的第3个阶段,且将长期维持在该阶段。在轮换阶段,所有非共识节点都将加入候选列表,即在共识集群和候选列表之间建立动态平衡:在一个共识周期T后,淘汰共识表现最差的d个共识节点,候选列表中Qos值最高的d个节点将“晋级”到共识集群。通过轮换策略,可以提高网络的动态性和健壮性,当一个正常的节点成为拜占庭节点后,将会在轮换阶段被发现并被及时移出网络(自动进入候选列表),一个新的具有高Qos值的节点将有机会成为共识节点。
共识节点筛选算法的3个阶段均基于Qos值对节点进行筛选,该Qos值是综合考虑吞吐量、响应延时、共识贡献度等多项指标的一个统一加权值。其中常规Qos指标权重为吞吐量、响应延时等多种常规指标权重之和。

648f3b1b21764aa0ba8fc026defd0428.png

532a8b256cb44fa4ac6223f9e171c24b.png 

 二、一致性协议的改进算法

传统PBFT算法的主节点是一种轮流坐庄的选举方式,选举结果具有较大的随意性,因此选举产生的主节点很有可能是恶意节点,存在一定安全隐患。若主节点是恶意节点,则会触发视图切换协议,频繁的视图切换会增加系统开销。在基于Qos值筛选出的共识节点集群中,进一步选择Qos值最大的节点作为主节点,其他节点均为副节点。
假设m为正确消息,m′为错误消息,若一个节点是拜占庭节点,则该节点可能将正确消息篡改为对自己有利的错误消息,称这类恶意攻击为正确性攻击;也可能发送不同的消息m,m′给不同的节点,称这类恶意攻击为一致性攻击。而传统的拜占庭算法中的非拜占庭节点可以处理正确性攻击,而不能处理一致性攻击。在云制造服务交易平台中,部分企业可能发起正确性攻击以获得不正当利益,难从一致性攻击中获得利益。因此在云制造服务场景下,不妨假设恶意节点只会发起正确性攻击,不会发起一致性攻击。基于此假设下,可对传统PBFT算法中的三阶段协议进行简化,提出二阶段协议,以优化共识流程。优化后的一致性算法示意图如图所示。

68fbb99b387e4572a88d8ab8273a3ec4.png

 算法主要流程如下:

(1)请求阶段

当消息列表长度M0或等待时间小于设定阈值,则主节点n0接收来自客户端的请求消息m,检查消息合法性。若检查通过,则为消息编号、排序,并加入到待共识消息列表M0。一直重复此流程直到消息列表长度M0或等待时间大于等于设定阈值。

(2)准备阶段

主节点为M0生成准备消息,并将其广播到参与共识算法的节点。

(3)确认阶段

令某一共识阶段参与共识的区块链节点数为N′,对所有副节点(共N′个)接收到准备消息的,检查准备消息的合法性,若检查通过,则逐条检查M0中的消息,生成检查完毕的消息列表M1,生成确认消息,将确认消息广播到所有节点。
(4)回复阶段

令云制造服务交易网络中的拜占庭节点数为f,若对于N′个节点,每个节点接收到来自其他节点的确认消息并检查通过,则逐条检查M1中的所有消息,生成统计消息列表M2,生成区块block,最后生成回复消息。如果客户端收到至少f+1个包含相同区块block的回复消息,则确定block为符合要求的区块,评判各个节点的共识表现,更新节点的Qos值。

三、Q-PBFT算法的理论性分析

Q-PBFT算法本质上基于少数服从多数原则的算法,在容错性上,类似分析,在最极端情况下需要保证C>3f′,f′为筛选后共识集群中拜占庭节点的个数。在初始节点集合满足N>3f的前提下,由于Q-PBFT算法基于Qos值筛选共识节点,使节点的安全性有一定保障,而且通过淘汰阶段和轮换阶段淘汰拜占庭节点,可以有效保证筛选后集合的容错性;在安全性上,无论主节点作恶还是副节点作恶,本文提出的 Q-PBFT算法中的一致性协议改进算法均能保证系统安全运行,并可及时识别共识集群中出现的拜占庭节点,通过淘汰和轮换策略进一步提高系统的安全性。
 

——基于网络自聚类的PBFT算法改进

对比区块链的PBFT类共识机制,PBFT算法可看做最终的投票表决,参与共识节点过多时,则难以有效地达成一致。事先指定项目骨干则可看做是指定种子节点,通过种子节点实现分组,则有效减少一次共识的节点数量。基于此思想,本方法提出了一种基于网络自聚类的PBFT算法优化,主要算法设计思想有如下几条:
1. 根据PBFT算法特点,海量节点的区块链系统应减少参与一次共识的节点数量。PBFT算法处理多节点共识时,将带来共识信息交互量激增,可能导致网络阻塞,从而导致共识效率变低或者共识失败。缩减参与一次共识算法的节点数量是重要的优化方向。
2. 行业应用网络结构相对固定,利用联盟链节点的审核机制,根据节点系统能力和网络性质,可确定一定数量的种子节点。这种操作引入了已知先验信息,有利于降低系统的复杂性。
3. 对节点行为进行评级,选取属性可靠、网络状态好、系统响应好的节点来完成共识,有利于增加共识算法实现的成功率。从系统的角度看,引入节点可信度评价,可形成评价反馈机制,能确保共识可靠性与安全性。
4. 从共识的角度看,多节点系统合理选择批次方式达成局部共识,而后由各局部选举代表,再达成全局共识与直接一次性完成共识效果是相同的。

38df63b2e4614daca6aa1faa6deac25d.jpeg

 根据前述算法思想,本文提出采用一种基于种子节点的网络自聚类分组方式,组内以节点共识可信度为参照,快速选举确定参加最终共识算法的节点,最后简化PBFT算法过程实现快速共识。算法流程如上图所示。

(1)节点审核是在节点加入联盟链时进行审核,根据事先获知的节点网络和节点系统性能确定种子节点和普通节点。以联盟链构建某公司的行业应用为例,公司总部、各分公司总部以及公司中的信息部等节点可设置为种子节点,其他节点则设置为普通节点。

(2)网络自聚类分组是以选用的种子节点(种子节点集群中的被选用为分组种子的部分)为中心,根据网络自聚类算法进行聚类,确定分组。在系统状态发现变化,需要重新分组时,则重新选择种子进行分组。组内可信度评估是依据可信度评级规则,实时计算节点可信度,并将节点分为优良中差四个等级,不同等级的节点可以完成对应工作。

(3)组内选举是依据组内节点可信度,从优等节点中选出候选代理人,由优等、良等节点参与完成选举投票,采用优化PBFT算法确定参与最终共识节点。

(4)全局共识是在各组选出代理人后,依据规则由各节点轮流担任主节点提交提案,每一次的共识采用PBFT算法。

在整个共识算法处理过程中,系统管理模块对各节点实时监督,把握系统时间节拍,并控制分组、选举、共识等环节能顺利进行工作。

 


总结

结合区块链系统实际应用情况以及PBFT算法的缺陷,提出以下几点主要可改进的方案以应用于拜占庭容错算法的新发展:
1. 改变客户端单点提交请求到主节点方案,而是向全网广播附上签名的交易数据。这样的方式更适合 P2P 环境。

2. 增加主节点选举过程,在主节点宕机或者被从节点“推翻之后”,进行主节点选举,选举标准按照最长链原则,选取拥有处理过最大视图号与最大编号请求的节点为新的主节点。

3. 增加数据同步及验证过程,在主节点选举完成后进行数据同步,同步时从节点对同步数据进行验证,若验证通过,才正式承认新的主节点,开始下一轮共识过程。

4. 通过给节点设置一系列状态,在不同的状态节点拥有不同的行为,共识节点通过在不同状态之间的转换从而在集群中拥有完整生命周期,从节点与主节点通过心跳保持联系, 从而使集群中的节点可以动态地加入和退出,使得在节点变动时不必重启系统,增加系统可用性。

 


撰文:2020065804

排版:2020065805

哈尔滨工程大学计算机学院2023年区块链技术课程

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值