赵立瑾 王新胜 夏纯中
1(江苏大学计算机科学与通信工程学院 江苏 镇江 212013) 2(江苏大学信息化中心 江苏 镇江 212000)
自诞生以来,区块链以其解决第三方信任问题[1-2]的特性引起关注。其在技术上具有隐私保护性、不可篡改性;在业务上具有可信度高、安全性强等优点[3]。
共识机制是区块链完成数据一致性的核心机制[4]。常见共识机制有PBFT[5]、XFT[6]、Zyzzyva[7]、PoW[8]、Poxos[9]等。其中实用拜占庭容错(PBFT)共识机制是主流共识机制之一,许多算法基于PBFT加以改进[10-11]。
但这些算法都没有解决以下问题:系统中往往存在恶意节点,PBFT随机选择主节点,恶意节点很可能成为主节点,导致视图切换频繁,系统性能和稳定性下降[12]。且PBFT容错能力有限,较多恶意节点会导致共识完成周期过长,系统性能急剧下降[13-14]。
产生以上问题的主要原因是PBFT不提前评估节点,仅运行中识别节点行为,判定状况。因此,对节点预评估和提前控制是可行的解决方法。P2P领域已有针对节点状况的研究,但不完全适用于区块链领域。
本文针对区块链环境,引入并改进P2P信任模型,提出一种基于信任模型的PBFT共识机制(TMPBFT)。通过信任模型判断节点行为,评估节点信任值,以信任值区分各种节点状态,提高可信节点投票权,限制恶意节点。并基于PBFT共识机制,应用信任模型到一致性协议和视图更换协议中,加强节点管控,提高系统稳定性和容错能力。
Zhang等[15]提出一种基于PBFT的组层次算法,将节点分组共识以减少共识的消息复杂度。Feng等[16]提出一种可拓展的动态多代理分层PBFT算法,节点分为多个自治系统以减少系统延迟。Hao等[17]提出一种动态PBFT,解决了常规PBFT中存在的热插拔节点以及处理恶意分类账的问题。Feng等[18]在改进的Rollerchain中利用分片技术和PBFT算法提出了一种可分片的区块链协议。Wang等[19]提出了一种混合区块链方法,该方法混合了区块链架构,根据交易特征选择相应的共识机制。
以上相关研究在各方面对共识机制有所改进,但均未能解决PBFT不能预识别非正常节点的问题。
P2P信任模型研究评价网络中节点的行为[20]。近年来,信任模型通过综合多因素[21]的方式获取对节点的准确评估。
故本文提出一种结合区块链特点,综合时间、参与频度、具体表现等相关因素的信任模型,并应用在PBFT中,以解决PBFT无法预识别非正常节点的问题。
信任模型通过节点行为评估信任值,借助信任值区分节点信任状态,赋予不同信任状态节点不同权限。
2.1.1总体框架
节点行为分类及内容情况如表1所示。
表1 节点行为分类和具体内容情况表
可以看出,节点不同行为会导致信任值变化。信任值是用于反映节点状况的数值,值域为[0,1],由Cij表示,代表Nodeij(组织i中的节点j)的信任值,组织是承担数据信用责任的区块链系统参与方。Cij大小决定节点信任状态。初始信任值为Cinit,默认为0.5。
节点信任状态定义如表2所示。
表2 节点信任状态定义表
表2中,Cgood、Cnormal、Cbad分别代表了可信、普通、故障节点的信任值下限。其中可信节点会积极验证和传递信息;普通节点有部分故障行为,偶然延迟信息传递;故障节点故障行为较多,明显延缓信息传播;恶意节点极有可能篡改信息或消极传播信息。
如表3所示,恶意节点为备份节点,于10次共识后信任值提升为Cbad,作为故障节点参与共识。而在无可信节点时,普通节点作为主节点。
表3 节点信任状态及权限表
投票权是节点确认信息的影响力。普通、故障节点投票权分别为1和0.5。恶意节点无投票权。可信节点投票权最高,由Vgood表示,计算如下:
(1)
式中:Ngood和Nbad分别表示可信和故障节点数量。
2.1.2信任值计算因素
信任值计算因素体现节点情况,用于计算信任值。
定义1节点活跃度。节点活跃度指受评节点在一定时间内参与共识的频度,节点活跃度可通过函数ρ(n)表示,计算如下:
(2)
式中:n为节点参与共识次数;参数a(a∈Z,a≥1)可调节增长速度。ρ(n)值随n值增大而增大。
定义2节点共识完成率。节点共识完成率指受评节点参与共识的完成频度。由共识完成率γ表示,值越大表现越好,计算如下:
(3)
式中:s为正常完成共识次数;n为参与共识次数。
定义3历史影响度。历史影响度是指节点历史信任值对当前信任值影响程度。历史影响度ω(Δt)计算如下:
(4)
式中:Δt为当前时间与上次共识时间的时间间隔;参数λ(λ∈Z,λ>0)可调整影响变化程度。ω(Δt)值随Δt增大而减小,其值越小历史信任值影响越小。
定义4事务影响因子。事务影响因子标识事务重要程度。设交易重要性参数为m,事务影响因子计算函数F(m)计算如下:
(5)
式中:M0为交易重要性参数的阈值;F(m)值随m值增大而增大,F(m)越大表示事务重要程度越高。
定义5行为评价值。行为评价值指依据受评节点参与共识的表现,给予节点的相应评价值。行为评价值E计算如下:
(6)
式中:t为节点完成共识用时;c(c∈Z,c≥1)为评价值调节因子;g为同意信息的节点数量;N为节点总数量。式(6)中,节点在大多数节点认同信息时,完成共识用时越短,评价越高。其他情况都将导致评价值较低。
2.1.3信任值计算
信任值Cij是受评节点Nodeij在共识中的综合评价。信任值计算如下:
(7)
式中:Cinit为信任值初值。式(7)结合定义2-定义6中因素,综合往次共识情况计算,以精确反映节点情况。
式(7)伪代码如算法1所示。
算法1信任值计算
输入:n,s,Δt,m,t,g。
输出:Cij。
1.P=e^(-a/n)
//节点活跃度计算
2.for (i=0;i 3.if (m 4.elseF=1 //事务影响因子计算 5.W=0.5^(Δt/r) //历史影响度计算 6.E=(0.5^(c*t))*g/N //行为评价值计算 7.if (E>0.5)R=((s+1)/(n+1))^0.5 8.elseR=((s+1)/n)^0.5 //节点共识完成率计算 9.Cij=E*W*F/W/F+Cij} 10.Cij=P*R*Sij+(1-P)*C0 //信任值计算 2.1.4信任值更新 每次共识后,需及时更新节点信任值,以客观体现信任值变化,并根据信任值确定节点信任状态。 设共识前节点共识信任值为Tij,本次共识中节点共识信任值计算为Sij,信任值更新计算如下: (8) 式中:θ为信任值更新调节因子。式(8)中若节点本次信任值高于往次,将适当调高信任值,反之调低。 节点若离线,Cij会衰减,即每次共识式(8)中Sij值为Cinit。直到Cij∈[0.9×Cinit,1.1×Cinit],或节点上线。 信任值更新调节因子θ(0≤θ≤1)由式(9)确定: (9) 其使信任值与上次信任值差距较大时,较小的信任值所占权重较大。可避免节点的反常行为得逞。 式(9)伪代码如算法2所示。 算法2信任值更新 输入:Sij,Tij。 输出:Cij。 1.if (节点本次有恶意行为) {Cij=0} 2.else { 3.if (Sij/Tij>=0.5)B=Tij/2/Sij 4.elseB=1 } //信任值调节因子计算 5.Cij=B*Sij+(1-B)*Tij //信任值更新 6.广播Cij 本文结合信任模型设计协议,令协议在达成数据一致性的同时,分辨节点信任状态。具体过程如下。 pre-prepare阶段:主节点验证客户端信息后,发送预准备信息给副本节点,进入prepare阶段;副本节点收到并验证预准备信息后,进入prepare阶段。 prepare阶段:副本节点发送准备信息给所有节点,收到其他节点发送的2×f(f为节点总数的三分之一)条准备信息后,验证所有准备信息,验证通过后进入commit阶段。记录节点行为。 commit阶段:所有节点发提交信息给其他节点,收到2×f条提交信息后,验证所有提交信息,验证通过后执行客户端请求。记录节点行为,计算并更新节点信任值和节点信任状态。 本文提出的视图更换协议中,主节点在可信状态的节点中随机选择。具体过程如下(设当前视图为v)。 view-change阶段:副本节点进入视图v+1,随机从信任状态为可信节点的节点中选一个非活动节点作为主节点。副本节点向其他节点发view-change信息。 view-change-ack阶段:节点收到2×f+1条view-change信息后,发送view-change-ack信息到视图v+1的主节点。新主节点收到view-change信息和view-change-ack信息后进入new-view阶段。 new-view阶段:新主节点选择检查点作为new-view请求初始状态,根据本地区块链数据执行一致性协议。 根据基于信任模型的PBFT共识机制,实现了一个实验系统。实验系统为Ubuntu 16.04.6 LTS 64位,实验平台为Hyperledger Fabric v0.6。 图1中实验展示的是节点行为评价较高时,普通节点信任值奖励的情况。 图1 信任值奖励 图2展示了是节点行为评价较低时,普通节点信任值奖励的情况。 图2 信任值惩罚 综合图1、图2情况,活跃度调节因子a值越小,信任值奖励增速越高,惩罚降速越低。故系统可信度高时可设置较小a值。节点连续表现良好时信任值奖励大,节点连续表现差时信任值惩罚大,但都有限度。 图3中实验展示的是节点行为评价较高时,故障节点与普通节点信任值奖励相比较的情况。 图3 故障节点与普通节点信任值奖励比较 可以看出,故障节点信任值增长速率明显较普通节点低。因为节点共识完成率记录了节点表现,历史故障或恶意行为会对当前信任值奖励有负面影响。 图4实验展示的是某几个不同信任状态的节点在共识中的节点信任值排名。 图4 节点的信任值排名变化情况 图4中,整体排名高到低分别是可信、普通、故障、恶意节点。因为按照可信、普通和故障节点的顺序,故障行为占总行为比例逐渐上升。结果表明信任模型可有效识别节点信任状态。 图5展示了恶意节点占比的变化情况。 图5 恶意节点占比变化 可以看出,PBFT恶意节点占比不变,TMPBFT逐渐降低。因为TMPBFT使用信任模型识别限制恶意节点,减少了系统中的恶意节点,提高了容错能力。 图6、图7展示了TMPBFT吞吐率和延迟与PBFT比较情况,系统中存在恶意节点。 图6 TMPBFT与PBFT的吞吐率比较情况 图7 TMPBFT与PBFT延迟比较情况 图6、图7中,TMPBFT在运行时整体吞吐率较PBFT高,延迟较PBFT低。因为TMPBFT在逐步限制恶意节点的同时,会降低故障节点投票权,提高可信节点投票权,以此在达成超过三分之二节点投票权的前提下降低了达成共识所需节点数,提高了系统整体性能。 针对PBFT无法预判断和控制节点的问题,本文提出一种基于信任模型的PBFT共识机制(TMPBFT)。构建信任模型,判断节点行为,通过信任值体现节点信任状态,区分节点,提高可信节点投票权,限制恶意节点。并基于PBFT共识机制,结合信任模型改进设计一致性协议和视图更换协议,加强了节点的管理,促进了性能提升,提高了系统的稳定性及容错能力。2.2 一致性协议
2.3 视图更换协议
3 实验分析
3.1 节点信任值奖励及惩罚
3.2 节点信任值排名
3.3 恶意节点占比
3.4 系统运行吞吐率以及延迟
4 结 语