基于节点可信度的改进PBFT 算法

2023-08-24 06:48翟健宏
智能计算机与应用 2023年7期
关键词:共识集群广播

韩 璐, 翟健宏, 杨 茹

(哈尔滨工业大学网络空间安全学院, 哈尔滨 150001)

0 引 言

共识机制[1]作为区块链[2]的核心技术,能够在缺乏中央控制的网络中,通过自组织、大规模协作的方式实现账本的分布式一致性,也是区块链通过技术手段而非中心化机构构建去中心化“信任”网络的关键算法。 良好的共识算法[3]有助于提高区块链系统的性能效率,对维护系统的稳定运行和节点相互信任起着重要作用。 然而,现有的共识算法各有优劣,普遍存在扩展性差、交易确认时间长、应用场景受限等问题,成为制约区块链项目落地的主要因素[4]。

实用拜占庭共识算法(Practical Byzantine Fault Tolerance,PBFT)[5]作为目前联盟区块链使用较多的共识算法,不仅实现了节点之间状态的信任,而且很大程度上降低了系统因拜占庭错误产生的巨大开销[6],但存在对带宽要求较高,节点数量固定等缺陷。 本课题对PBFT 算法在fabric 联盟链[7]中的实现进行研究,利用PBFT 算法的特点,保证了网络中节点的一致性。 通过部署链码在docker[8]环境中对算法的性能进行检测,并根据检测结果对PBFT 算法进行改进。

本文对区块链防作弊技术进行研究,提出了一种基于节点可信度的NRPBFT(node-reliabilitybased PBFT consensus algorithm)共识算法,主要贡献如下:

(1)提出了NRPBFT 算法,采用选举集群的方式,将所有的节点分成普通节点和共识节点。

(2)利用PBFT 算法的特性实现了共识过程的防作弊,同时优化了算法的性能,提高了算法的效率。

(3)利用20 个端口模拟区块链节点,利用tcp实现数据在端口之间的同步,通过实验验证改进后的共识算法的可行性。

本文的组织结构如下:第1 节介绍了NRPBFT算法方案;第2 节阐述了代码优化的过程及结果;第3 节结合实验说明了该方案的可行性与高效性;第4节总结了全文,并讨论了后续的工作与改进之处。

1 NRPBFT 算法方案

1.1 改进方法介绍

针对PBFT 算法存在问题的分析,结合调研的结果和文献资料汇总,本节提出了一种NRPBFT 算法方案。 这个方案主要是从缩小网络的规模的角度出发,利用选举集群的方式,将所有的节点分成普通节点和共识节点。 利用节点可信度评估公式对节点的可信度进行评估, 并对节点的可信度进行排序,选可信度最高的前p个节点作为共识集群(2f≤p <3f,f表示网络中恶意节点的数量)。 同时,对主节点的选举做了一些改动,选取可信度最高的节点作为主节点,大大降低了恶意节点成为主节点的概率。主要从以下2 点进行改进:

(1)根据可信度将网络中的节点分成2 种角色。普通节点只负责完成交易,共识节点集群中可信度最高的节点会成为主节点。 主节点接收客户端的消息,在有p个共识节点的共识集群中进行广播,对消息进行签名排序后,广播给其他所有节点。 节点收到至少p/2 个相同的消息,认为这个信息正确,写入内存,并将确认信息回复给主节点。

(2) 采用可信度评估的方式来选举共识集群和主节点。 在每次共识结束后,都需要根据可信度评估算法重新计算每个节点的可信度,这样就实现了节点动态加入或者退出共识集群。 对于共识集群中作恶的节点,研究在评估的时候采取相应的惩罚机制,加上惩罚系数,降低其可信度评估结果。 这种方式不仅能降低主节点随意选取带来的风险,也能保证系统的动态性。

网络拓扑设计如图1 所示。

图1 改进后PBFT 算法拓扑图Fig. 1 Topological diagram of the improved PBFT algorithm

1.2 NRPBFT 优化算法流程

(1)客户端c将请求信息发送到主节点,主节点验证,提取消息摘要并签名后广播给所有共识节点,广播的格式为<<PREPARE,n,S,D >,data >,其中PREPARE是命令名称,代表信息处于的阶段是主节点在共识集群中广播信息阶段,n是主节点为信息分配的序列号,S是主节点的签名,D是主节点提取的信息摘要,data是待共识信息。

(2) 认证共识阶段。 共识集群中的所有节点收到请求后,首先验证交易签名和摘要信息,验证成功后将交易数据存储到内存中,对信息进行签名后,将信息广播给所有的节点, 广播信息格式为<<AUTHENTICATION,credit_i,n,S,D >,data >, 其中AUTHENTICATION是这一阶段的命令名称,credit_i是节点的可信度的值。 信息广播到所有节点后,进入提交阶段。 如果交易信息验证不成功,则认为主节点可能出了问题,重新对主节点进行选举。

(3) 提交阶段。 所有的节点都会收到多个由共识节点发来的信息,节点接收到信息后,对签名和序列号进行验证,有大于等于p/2 个信息验证成功后,将信息存储到内存中,并向主节点进行提交。 信息提交的格式为<SUBMIT,n,S,D,i >,其中i是节点的编号。 主节点在一定时间内接收到2f+1 个一致的信息,认为提交阶段完成,主节点将达成共识的信息发送给客户端,完成共识。

算法的流程如图2 所示。 NRPBFT 算法步骤具体如下。

图2 改进的PBFT 算法流程图Fig. 2 Flow chart of improved PBFT algorithm

算法1 新PBFT 算法

输入主节点编号N0,P个共识节点(N1-Np),n - p个普通节点(Np+1,Nn),节点可信度的值credit - i,客户端发送的交易信息data

输出:节点对客户端的reply

1:for 主节点N0接收客户端发送的交易信息data

2:N0提取消息摘要D,对D签名得到S,将信息广播给共识节点,广播信息格式为<<PREPARE,n,S,D >,data >,其中n是消息序列号

3:共识节点Np验证交易的签名和摘要

4:if 签名S和摘要D验证成功then

5: 共识节点Np将交易信息储存到内存中

6: 共识节点Np对交易信息进行签名,广播给所有节点, 广播格式为<< AUTHENTICATION,credit_i,n,S,D >,data >

7:else then

8: 触发主节点更换协议,按照可信度排序更换主节点,重复步骤1

9: 普通节点Nn接收到共识节点Np的广播信息,验证交易的签名和摘要

10:if 节点有P/2 个签名S和摘要D验证成功then

11: 普通节点Nn将交易信息储存到内存中

12: 向主节点N0发送确认信息,信息提交的格式为<SUBMIT,n,S,D,i >,其中i是节点的编号

13:else then

14: 重新评估节点的可信度,重新选举共识节点集群

15:if 主节点N0接收到2f+1 个一致的信息then

16: 主节点N0将确认信息提交给客户端

17: end

18: else then

19: 触发主节点更换协议,按照可信度排序更换主节点,重复步骤1

还要一值的是,这里的节点1 和节点2 均属于共识节点,节点3 属于拜占庭节点。

1.3 节点可信度计算模块

节点可信度计算模块是以往的研究中和研发团队一起提出的方法。 可信度是信任的量化表示,表示一个节点中数据可以被另一节点接受的信任程度。 可以通过节点自身的行为来判断节点的可信度。

将生成一个区块的时间定义为一个评审周期,其中评审内容包括6 项,节点每接收到一个区块会动态更新该表格中的矿工节点、该表格中的矿工节点、节点参与验证的区块总数、节点正确验证的区块数、节点最新打包区块字段,每个周期结束后更新信任度和新的起始区块字段,各参数设置见表1。

表1 模型参数设置Tab. 1 Model parameters settings

将表1 中各字段值带入式(1)中进行计算,检验计算结果是否达到可信度阈值:

其中,表示第i个节点在当前评审周期的可信度;τ表示在一个评审周期内产生的区块数;ω表示第i个节点积极参与争夺记账权并投票的区块数。 对于在该评审周期内产生的第x个区块,当第i个节点正常参与投票时,将νx设置为1,μx设置为0,否则νx设置为0,μx设置为1,σ是恶意投票对于节点可信度影响所占的比重,该值越大,惩罚权重越大。 研究可知,式(1) 主要用来衡量节点在当前评审周期内的表现情况。

由于式(1)基于logistics 模型[9]提出,而该模型在对数增长期间函数值增长较快,导致对数增长期间节点信任度相较之前值偏高,因此使用式(2)进行修正:

其中,trust(i)cur表示当前周期的信任度,trust(i)pre表示上个周期的信任度。 通过λ来对当前周期信任度计算进行修正,添加节点信任历史相关性,该参数可由用户定义。 研究可知,修正方法主要是中和了该节点在上轮评审周期中的表现情况一旦某个节点出错,则在下一轮对该节点可信度进行评审的时候,恶意的节点会被乘以一个特别小的系数来降低下一轮评审中此节点的可信度。

1.4 方案分析

本方案的核心特点在于实现了一个基于可信度的PBFT 算法优化方案、即NRPBFT,该方案具有以下优势:

(1)高可靠性:选可信度最高的前p个节点作为共识集群,在一定程度上保证了系统的安全性和可靠性。 研究中也对主节点的选举做了一些改动,选取可信度最高的节点作为主节点,大大降低了恶意节点成为主节点的概率。 从节点接收到主节点的广播信息后,首先会对消息的签名、消息的序号和消息的摘要进行验证,3 个信息都验证通过后才能接收这个需要共识的内容,这一过程也大大地保证了信息的可靠性和安全性。

(2)高可用性:原本的PBFT 算法在进行共识的过程中需要经过1 次单点全广播和2 次全点全广播,基于可信度的PBFT 优化算法只需要经过一次一对多的传输、一次多对一的传输及一次全点全广播。 区块链中节点与节点之间的传输过程消耗的资源非常多,优化后的方法减少了节点与节点之间信息传输的次数,因此可以降低达成共识的时间且提升系统的性能。

(3)兼容性:本方案是对区块链的共识算法进行改进,共识算法是区块链的核心技术之一,可以在以太坊中、联盟链、或者其他区块链平台中直接进行应用。

本方案的缺点是由于主节点一方面要接收来自客户端的信息,另一方面还要对节点共识的结果进行统计并回复给客户端,一旦节点数量非常大,主节点容易过载。 除此以外,如果主节点是恶意节点,会对整个系统的共识结果造成重大的影响,但是由于主节点是整个网路中可信度最高的节点,因此主节点是恶意节点的可能性大大降低。

2 NRPBFT 算法整体流程

本节以上一节提出的NRPBFT 算法方案为基础,描述了NRPBFT 算法的整体流程,给出了更详细的设计方案,包括一些关键模块的实现方法和代码分析,同时介绍了Hyperledger Fabric 的搭建,以及编写链码验证算法改进的结果。

2.1 NRPBFT 算法整体流程

NRPBFT 算法按照运行过程可以分成2 部分。一部分是共识过程,另一部分是视图更换过程。 一旦共识过程出现问题会立即触发视图更换过程。 对此拟展开研究分述如下。

(1)共识过程

①准备阶段。 这一步主要目的是让客户端知道哪个节点是主节点。 在交易请求阶段,客户端将交易发送给所有节点,节点接收到交易信息后,验证签名,验证成功后判断交易是否为query 类型的交易,如果是,则执行智能合约,查询本地账本的余额信息并返回结果,这个过程就结束了。 如果是deploy 或invoke 类型的请求交易,则需要利用共识机制来得到结果。 对于需要共识的交易,普通节点是无法处理的,只有主节点可以接收并进行回复,因此,在交易请求阶段相当于客户端把需要共识的交易信息发送给了所有节点,在验证阶段,只有主节点能接收,也就是选出了主节点。 主节点接收到交易信息后,对信息进行编号,提取摘要并签名后发送给共识集群中的节点进行共识,进入认证共识阶段。准备阶段拓扑见图3。

图3 准备阶段拓扑图Fig. 3 Topology diagram of preparation phase

②认证共识阶段。 在认证阶段,共识集群中节点收到主节点发送的信息后,对信息的签名、摘要、编号进行验证,验证通过后放入内存,对信息进行签名并打包生成提交报文,在整个网络的节点中进行广播,进入提交认证阶段。 在任何一个阶段如果验证失败或者接收信息超时,则认为主节点可能是恶意节点,触发视图更换协议对主节点和共识集群中的节点进行更换并重启共识过程。 认证共识阶段拓扑见图4。

图4 认证共识阶段拓扑图Fig. 4 Topology diagram of authentication consensus phase

在提交认证阶段,共识节点将信息在整个网络中进行广播,普通节点收到广播信息后,对信息的签名、摘要、视图编号进行验证,验证通过后放入内存,一旦普通节点收到了p/2 个验证通过的提交认证消息,生成提交报文,提交给主节点,进入确认提交阶段。 在任何一个阶段如果验证失败或者接收信息超时,则认为主节点可能是恶意节点,触发视图更换协议对主节点和共识集群中的节点进行更换并重启共识过程。

③确认提交阶段。 确认提交阶段拓扑见图5。

图5 确认提交阶段拓扑图Fig. 5 Topology diagram of confirmation commit phase

(2)视图更换过程。 触发节点更换的条件主要有以下几点:

①过了指定时间,普通节点或者共识集群的节点未收到主节点的共识请求。

②信息的格式不合法。

③没有在规定时间内完成主节点更换。

④在共识过程中,多个节点的视图编号是旧的编号或者签名摘要验证失败。

在NRPBFT 算法中,由原PBFT 算法根据节点编号顺序选举主节点改变为利用节点的可信度来选择主节点,这种做法避免了主节点随意选举带来的风险,同时大大降低了主节点成为恶意节点的可能性。

在主节点更换阶段,视图编号自加1 作为新的视图编号,所有节点封装ViewChange 报文,报文中封装了各个节点的可信度和签名,在网络中进行广播,如图6(a)所示。

图6 视图更换拓扑图Fig. 6 View replacement topology

节点接收到其他节点的广播信息后,选出可信度最高的节点作为主节点,如果2f+1 个节点选出的可信度最高的节点是同一个,则认为这个节点就是下一个主节点。 在这里,每个节点都会计算除了主节点外可信度最好的p个节点,组成该视图下的共识集群。 在主节点确认阶段,新的主节点封装newView报文并签名,在网络中进行广播。 如此,新的主节点就更换完成,如图6(b)所示,N2节点是可信度最高的节点,就会被选举为下一个主节点,接下来重新进行共识过程。

2.2 NRPBFT 算法结构及实现

整个NRPBFT 算法的代码各部分功能见表2。

表2 NRPBFT 各模块功能表Tab. 2 Function table of each module of NRPBFT

下面对NRPBFT 算法的具体实现进行描述,包括数据结构的类型定义和相关的实现,还有关键变量和关键函数的调用过程。

(1)数据结构定义。 节点的定义如图7 所示。其中,nodeID用来存储属于节点的编号,addr用来存储节点的 ip 地址+端口号,rsaPrivKey和rsaPubKey分别存储节点的公私钥,credit存储节点的可信度的值。

图7 节点定义图Fig. 7 Node definition graph

RPBFT 信息结构的定义如图8 所示。 其中,node存储的是上述的节点的数据结构信息,sequenceID存储的是交易的序号,会随着交易数量的增加而自增。Lock定义了一个锁,在多线程操作的过程中可以保证获取数据的一致性和准确性。messagePool、prePareConfirmCount、commitConfirmCount分别存储消息本身、准备阶段的消息和确认消息。isCommitBordcast是用来判断是否进行过广播的标志位,isReply是用来判断是否回复信息给主节点的标志位。

图8 RPBFT 信息结构定义图Fig. 8 RPBFT information structure definition diagram

(2)变量定义。 该部分介绍在代码中定义的全局变量及其含义。 变量定义见表3。 由表3 可知,nodeCount定义了节点的数量,根据这个变量值,生成nodeCount个节点的公私钥对。nodeCredit定义了共识集群节点的数量,在共识过程中也是根据这个值判断是否收到了所有共识节点的消息。clientAddr定义了客户端的监听地址,nodeTable和credit_nodeTable都是map类型的数据,分别存储节点和地址的键值对及共识集群中的节点和地址的键值对。primaryNode记录主节点的id,记录每一个视图下主节点的id。localMessagePool是一个未定义的数组,用于存储客户端发送的消息。start和end分别记录算法的开始时间和结束时间,二者作差便可以得到算法的运行时间,prefixCMDLength是命令名称的长度,凭借这个值取得消息的前12 位,分析前12位的消息即可得出目前处于共识的哪个阶段。

表3 合约变量定义表Tab. 3 Contract variable definition table

(3)功能方法。 关键方法定义及介绍见表4。

表4 关键方法定义表Tab. 4 Key method definition table

3 实验结果

3.1 实验环境

本文的Windows 实验环境的参数见表5,基于此环境配置,利用端口号模拟节点,实现了NRPBFT算法的运行。

表5 设备参数表Tab. 5 Equipment parameters table

运行上一节描述的NRPBFT 算法和原PBFT 算法,这里以4 个网络节点为例,分别运行优化前后的算法。 在PBFT 算法中,N0是主节点,N1、N2、N3是普通节点。 在NRPBFT 算法中,设置4 个节点情况下,只能存在一个恶意节点,根据p的范围为2f≤p <3f,这里选择节点N1和节点N2组成共识集群,主节点为节点N0,节点N3是普通节点。

PBFT 算法4 个节点时的执行时间见图9。

图9 PBFT 算法执行时间Fig. 9 Algorithm execution time of PBFT

NRPBFT 算法4 个节点时的执行时间见图10。

图10 NRPBFT 算法执行时间Fig. 10 Algorithm execution time of NRPBFT

从上面的对比结果可以看出,本项研究对PBFT算法的修改可以有效减少节点之间达成共识的时间,提高了共识效率。 但是节点数量只有4 个的情况太过简单,尤其是在NRPBFT 算法中,普通节点只有N3, 并不能很好地体现算法优化的程度。PBFT 算法的特点是随着网络规模的增大,通信时延呈指数增长,因此可以增大网络规模做后续进一步研究。

将节点的数量分别设置成4 个、6 个、8 个、10个、12 个、14 个、16 个、18 个、20 个,查看在不同节点数量下算法改进前后达成共识所需的时间。 节点数量和达成共识的时间见表6。

表6 改进前后算法执行时间表Tab. 6 Algorithm execution schedule before and after improvement

将改进前和改进后的算法运行时间绘制在一张图上,可以更直观地看出改进前后性能的优化,节点数量和达成共识的时间对比如图11 所示。

图11 改进前后PBFT 算法执行时间与网络规模关系图Fig. 11 The relationship between the execution time of the PBFT algorithm and the network size before and after the improvement

通过实验结果可知,NRPBFT 算法相比PBFT算法的改进效果比较明显。 从整体上分析,在相同节点数量和相同交易信息的条件下,NRPBFT 算法的时延总是低于PBFT 的时延。 从趋势上看,随着网络中节点数量的增加,网络中节点与节点之间的通信数量增加,NRPBFT 算法和PBFT 算法的时延都增大了。 这时候影响算法效率的是节点之间的通信开销,并且NRPBFT 算法减少通信次数的优点也体现出来了。 从图11 中可以明显看出,随着节点数量的增加,NRPBFT 算法时延增长速度比PBFT 的时延增长速度慢。 在4 个节点1 笔交易的条件下,NRPBFT 算法的时延为10.063 8 ms,PBFT 算法的时延为16.709 6 ms,NRPBFT 算法相对PBFT 算法时延降低了39.77%。

为了说明其防作弊的特点,这里还需要模拟恶意节点,在网络中节点总数为4 的情况下进行模拟。具体来说,N0为主节点,N1和N2为正常节点,N3为恶意节点,模拟的时候故意不开启N3,模拟节点宕机的情况。

在PBFT 中,当不开启N3节点的时候,经测试,节点依然可以达成共识,达成共识的时间见图12。

图12 有恶意节点时PBFT 算法执行时间Fig. 12 PBFT algorithm execution time when there are malicious nodes

在NRPBFT 中,当不开启N3节点的时候,经测试,节点依然可以达成共识,达成共识的时间见图13。

图13 有恶意节点时NRPBFT 算法执行时间Fig. 13 NRPBFT algorithm execution time when there are malicious nodes

从图13 可以看出,在N3为恶意节点的情况下,2 个都能达成共识,并且由于在4 个节点的情况下,如果有一个恶意节点,则剩余的节点都是共识集群中的节点,和PBFT 算法没有区别,因此达成共识的时间也非常接近。 实验结果说明,当网络中存在f(n >3f) 个节点时,2 种算法都可以防止节点作弊,在规定时间内达成共识。

3.2 通信次数分析

除了通信时间上有了直观改善,在通信数量上也减少了很多。 这里定义网络中节点总数为n, 定义NRPBFT 算法中共识集群中节点数量为p。

在PBFT 算法中,核心有3 个阶段。 在预准备阶段,主节点将待共识信息进行广播,这一阶段的通信次数为n -1 次;进入到准备阶段,每个节点进行一次广播,一共n个节点,因此这一阶段的通信次数为n(n -1);进入提交阶段,依然是每个节点进行广播,通信次数为n(n -1)。 因此,PBFT 算法总的通信次数为2n2- n -1。

在NRPBFT 算法中,核心阶段也是有3 个。 在认证阶段,主节点向共识集群中的节点发送待共识信息,这一阶段的通信次数为p次;进入到共识阶段,每个共识节点进行一次广播,一共p个共识节点,因此这一阶段的通信次数为p(p -1);进入确认阶段,这里是共识节点和主节点在整个网络中进行广播,通信次数为n(p+1)。 因此,NRPBFT 算法总的通信次数为p2+np+n,这里p取(2/3)n,遇到小数上取整,即总通信次数为:(10/9)n2+n。

将节点的数量分别设置成4 个、6 个、8 个、10个、12 个、14 个、16 个、18 个、20 个,查看在不同节点数量下的通信次数。 节点数量和通信次数的关系见表7。

表7 改进前后算法通信次数表Tab. 7 Algorithm communication times table before and after improvement

将改进前和改进后的算法通信次数绘制在一张图上,可以更直观地看出改进前后的优化,节点数量和通信次数的时间对比如图14 所示。

图14 改进前后PBFT 算法执行时间与通信次数关系图Fig.14 The relationship between the execution time of the PBFT algorithm and the number of communications before and after the improvement

通过实验结果可知,NRPBFT 算法相比PBFT算法的改进效果比较明显。 从整体上分析,在相同节点数量和相同交易信息的条件下,NRPBFT 算法的通信次数总是比PBFT 的通信次数少。 从趋势上看,随着网络中节点数量的增加,网络中节点与节点之间的通信数量都在增加,但是NRPBFT 算法中通信次数增加得比较缓慢。

3.3 ubuntu 环境下性能测试

编写链码,进行交易的初始化和转账操作,部署链码,进行测试。 PBFT 算法共识时间的运算见图15。 由图15 可知,在采用原PBFT 算法的时候,交易转账共识所需要的时间为0.029 s。

图15 PBFT 算法共识时间Fig. 15 Consensus time of PBFT algorithm

NRPBFT 算法共识时间的运算见图16。 由图16 可知,采用优化后的NRPBFT 算法的时候,交易转账共识所需要的时间为0.005 s。

图16 NRPBFT 算法共识时间Fig. 16 Consensus time of NRPBFT algorithm

在采用原PBFT 算法的时候,交易转账共识过程的性能指标见图17。

图17 PBFT 算法性能Fig. 17 Performance of PBFT algorithm

采用优化后的NRPBFT 算法的时候,交易转账共识过程的性能指标见图18。

图18 NRPBFT 算法性能Fig. 18 Performance of NRPBFT algorithm

从图18 可以看出, NRPBFT 算法的吞吐量更大,性能也提升了。

4 本文研究结论

4.1 共识节点数量取值证明

在本项研究中,选举了p个除了主节点外可信度最高的节点组成共识集群,p的取值范围是2f≤p <3f。 接下来,对p的取值范围进行证明,说明为什么在这个范围内可以保证系统中的节点正常达成共识。

要想证明P在2f≤p <3f的情况下能保证网络在有f个恶意节点的情况下达成共识,首先要证明PBFT 满足的如下条件:

证明假设节点总数为N,f为拜占庭错误节点,N满足:N≥3f+1。

如果网络中一共有N个节点,其中拜占庭节点的数量为f,那么非拜占庭节点的数量就是N - f。在共识的时候,如果一个普通节点收到N - f个信息,节点无法判断这N - f个信息来自拜占庭节点、还是非拜占庭节点。 考虑最坏的情况,这N -f个信息中有f个信息来自拜占庭节点,在这种情况下,只有N -2f个信息来自非拜占庭节点。 对于这个普通节点,在收到2 种不同的信息,节点会按照少数服从多数的原则,选择信息数量多的信息作为待共识信息。 因此,要想保证待共识信息是非拜占庭节点发送的信息,就需要保证N -2f >f,即N >3f,也就是N≥3f+1。

在NRPBFT 算法中,p的范围是2f≤p <3f,在认证共识阶段,主节点只会将待共识信息发送给p个共识集群中的节点进行共识。 由于这p个节点是网络中除了主节点外可信度最高的p个节点,所以在一定程度上可以保证p个节点中拜占庭节点的数量比较少,也就是可以保证p - f >f,即p >2f。 在提交阶段,p个节点会分别向N个节点发送信息,也就是进行p次单点全广播的过程,当一个节点收到至少p/2 个相同的信息时,也就是至少f个相同的消息,显然这些消息不可能全是恶意节点发出的,只能是非拜占庭节点发出的消息。 在确认阶段的证明和PBFT 算法一致,这里不再重复。

由上述论证可以说明,在公式集群p的节点数量满足2f≤p <3f时,NRPBFT 算法可以保证能在有f个恶意节点的情况下,网络中的非拜占庭节点达成共识。

4.2 算法防作弊特性说明

接下来对算法的防作弊特点进行说明。 由于本项研究中默认恶意节点数量f和网络中节点总数n之间满足n >3f的关系,且默认诚实节点一定能正常进行共识,不会出现信息丢失和宕机等情况,因此,本算法一定可以抵御51%攻击。

在区块链中,DDoS 攻击的主要目的是大量占用网络中的节点资源,使得这些节点无法提供正常的服务,如果受害的节点过多,很可能会影响整个区块链网络的运行。 DDoS 攻击是通过攻击手段占用了受害者的大量资源,使得受害者不能提供正常服务。

在区块链中,DDOS 攻击主要是计算集群对网络中的节点进行攻击,占用节点资源,使得节点宕机,无法进行共识。 本课题中,最多只有f个节点可以遭受DDOS 攻击,而剩余的n - f个诚实节点依然可以正常达成共识,不会对最后的结果造成影响。因此,本算法可以抵挡DDOS 攻击。

拜占庭将军问题所描述的正是共谋攻击的情境,恶意节点联合起来修改信息或者丢失信息,以此影响网络中的节点达成共识。 在上述证明中,已经说明为什么PBFT 算法和NRPBFT 算法能够在共谋攻击的情况下达成共识,但是前提必须是n >3f,恶意节点的数量再多,就无法抵御共谋攻击了。

女巫攻击是一种专门针对联盟链的攻击,恶意节点可以伪装自己的身份来进行攻击。 由于PBFT机制的延展性不高,一般只能用在网络规模小的网络中,所以更易受到女巫攻击。 在NRPBFT 算法中,对节点的可信度进行评估,选取可信度最高的节点作为主节点,除主节点外可信度最高的p个节点作为共识集群,核心的阶段都在共识集群中进行,最后只需要将共识集群共识完成的信息发送给普通节点,避免了恶意节点过多参与共识过程,减少了恶意节点作恶的机会。

从以上分析可以看出,改进后的算法继承了PBFT 算法的优点,且相对PBFT 算法更能抵抗女巫攻击造成的影响,进一步防止了节点作弊。

5 结束语

在联盟链中难以避免会有恶意节点的存在,在节点达成共识的过程中,恶意节点可以会散布不实信息,影响数据的一致性,尤其是在金融或者一些特殊应用领域,分布式系统需要确保一致性和正确性。使用PBFT 共识算法可以有效解决恶意节点的问题,但是PBFT 算法本身还存在性能和开销上的问题。 本课题针对联盟链中应用的PBFT 共识算法在部署链码进行交易的过程中存在的问题展开了分析,通过部署链码的方式实现交易,并根据交易过程中的性能和开销对PBFT 算法进行改进。 提出了NRPBFT 算法,采用选举集群的方式,将所有的节点分成普通节点和共识节点。 利用节点可信度评估公式对所有节点的可信度进行评估,并对节点的可信度进行排序,选可信度最高的前p个节点作为共识集群,选取可信度最高的节点作为主节点,大大降低了恶意节点成为主节点的概率。

未来的研究方向是将NRPBFT 算法进行进一步优化,进一步降低系统的消耗,提升系统的性能,或者考虑一些其他方法,来降低主节点的中心化风险。 除此以外,类似于RSA 这样的签名算法,签名速度比较慢,可以考虑换成其他签名算法来运行签名过程和验证过程。 还可以考虑其他的方式,使得在恶意节点数量更多的情况下,也能保证网络中诚实节点达成共识。 以上所讨论的问题,还有待后续进一步的研究。

猜你喜欢
共识集群广播
共识 共进 共情 共学:让“沟通之花”绽放
论思想共识凝聚的文化向度
商量出共识
海上小型无人机集群的反制装备需求与应对之策研究
一种无人机集群发射回收装置的控制系统设计
广播发射设备中平衡输入与不平衡输入的转换
Python与Spark集群在收费数据分析中的应用
勤快又呆萌的集群机器人
网络在现代广播中的应用
别让“PX共识”在爆炸中瓦解