基于安全多方计算的DPOS改进方案
2022-07-21蒋翊彬汪学明
蒋翊彬,汪学明
(贵州大学 计算机科学与技术学院,贵州 贵阳 550025)
0 引 言
委托权益证明(DPOS)共识机制具有高效率、低能耗等优点。同时,DPOS因其中心化程度高、恶意节点剔除不及时、节点参与不积极与容易滋生腐败等问题备受争议[1]。目前多数研究主要集中在如何保证恒定数量诚实的见证人节点以及如何提高普通节点投票积极性两个方面,研究方法是通过引入信誉度机制、激励机制、备用见证人机制与替换投票选举的方式,解决DPOS中存在的问题。文献[2,3]分别通过交易费与信誉分奖励来激励普通节点积极参与投票,并基于节点信誉值选出更可靠的见证人节点。文献[4]提出一种基于配对制度的方案,该机制摈弃了投票选举的方式,利用节点属性值选出记账节点。文献[5]提出通过信誉熔断机制快速剔除作恶节点,备用见证人机制用来弥补空缺的见证人节点。对于节点腐败问题,文献[6]提出举报奖励以激励节点积极举报贿赂节点。
基于以上分析,本文提出一种基于安全多方计算的改进方案。首先提出一种MPC-DPOS网络模型,在该网络模型下能够降低执行安全多方计算协议带来的通信流量问题。然后重新设计了记账权分配机制,利用安全多方计算协议生成系统随机数,在全网在线节点集合中随机的决定出记账节点,提高普通节点参与积极性,并且非透明、随机的出块顺序能有效降低针对记账节点的DDOS攻击和腐化攻击风险,其次将记账节点选取范围从见证人集合扩大到全网在线节点集合,见证人身份和记账权之间不存在必然关系,从机制层面杜绝腐败的产生。改进方案并且提出新的激励机制,以保证见证人节点诚实的执行协议,其中通过对叔父区块奖励,有利于区块链在分叉后归并统一。最后通过实验验证改进方案的可用性和有效性。
1 相关技术
1.1 安全多方计算
安全多方计算(MPC)[7]的思想由姚期智提出,后经40年的发展,已经从理论架构逐渐成为可以应用到实际的秘密学工具。MPC能够让一组互不信任的参与方联合计算出各自应得的输出,并在计算的过程中,始终保持输入信息的隐私性[8]。安全多方计算可以抽象为一个功能函数f,n个参与方P={P1,…,Pn} 分别持有自己的秘密信息x1,x2,…,xn, 联合计算某个功能函数f(x1,x2,…,xn)=(y1,y2,…,yn),Pi∈P除了得到对应的输出yi以外,得不到任何关于xj(j≠i)有用的信息。在实际应用中,根据不同协议的设计,存在y1=y2=…=yn。
1.2 DPOS共识机制
DPOS共识机制由Bitshares[9]的首席开发者Dan Larimer提出,旨在解决POW机制算力集中、资源消耗严重以及出块速度慢等问题。DPOS机制中的普通节点需要向自己信任的参选节点投票,利用投票方式选举出N个信任度较好的见证人节点。见证人之间地位平等,不需要比较权益或算力竞争成为记账人节点,在共识阶段见证人节点按照某种随机序列轮流行使发布区块的权利,并且承担着区块检验的工作。DPOS机制中规定一个有效的新区块需要经过至少2/3的见证人节点确认,才是一个不可逆区块[9]。如果一个见证人节点没有履行自己的责任产生一个合格的区块,那么选民将收回给他的选票,并从新选取新的见证人节点。
2 DPOS共识机制的改进
经典的DPOS机制中被选举出的见证人按特定的序列行使记账权利,这种特定的顺序在攻击者的视角下是透明的,记账节点的安全性完全依靠网络层的安全性,透明的出块顺序会增加针对记账节点的DDOS攻击和腐化攻击风险。选举阶段中的投票对象是靠某种信任关系决定的,只有少数信任度较好的节点会被选举为见证人节点,并获得出块奖励,导致大多数信任度较低普通节点参与网络维护的积极性不高,主要体现在投票不积极和在线共识不积极。此外,选举出的记账节点履行打包交易任务,会得到出块奖励和交易费,选举的结果直接和利益相关,在每个见证人的背后容易形成利益群体,滋生腐败。改进方案从新设计了记账权分配机制,引入安全多方计算,通过构造系统随机数、扩大记账节点选取集合的方式解决上述问题。为了应对执行MPC协议给系统网络带来高通信流量问题,提出MPC-DPOS网络模型,同时为MPC协议创造高效安全的执行环境。另外,从新设计了激励机制,增加对见证人节点和叔父节点的奖励,对见证人的奖励能够激励见证人节点诚实的执行MPC协议,对叔父节点的奖励有利于区块链分叉时归并统一。
2.1 MPC-DPOS网络模型
根据节点在网络中的作用不同,将节点分为两种不同的类型,分别为见证人节点和普通节点。普通节点参与区块验证和投票工作,可随时加入和离开网络。见证人节点是由普通节点投票选举产生,承担区块验证和系统随机数生成任务。见证人节点都有一定任期,在任期内应时刻保持在线,任期结束和从新洗牌选举。未诚实执行协议的见证人,普通节点将收回选票,取消其见证人身份,并选取新的见证人节点。
系统会将选举产生的见证人加入到一个结构数组中,以此记录当下时期见证人节点身份,并以该数组在主系统网络上构建一个由见证人节点组成的独立网络。见证人在独立网络中执行MPC协议生成每轮出块需要的系统随机数。独立网络在逻辑上与主系统网络隔离,执行MPC协议所产生的通信流量被隔离在独立网络以内,并不会广播到主网络中的普通节点。在该网络模型下能够解决执行MPC协议给系统网络带来高通信流量问题,同时为MPC协议创造高效安全的执行环境。MPC-DPOS网络模型如图1所示。
图1 MPC-DPOS网络模型
2.2 记账权分配机制
记账权分配机制用于选出每一轮中的出块节点与完成打包交易共识,主要包括随机数的构造、区块的发布与共识两个阶段。
2.2.1 随机数的构造
(1)输入阶段
∀Pi∈P随机构造两个t次多项式函数:ai(x)=ai0+ai1x+ai2x2+…+aitxt,βi(x)=βi0+βi1x+βi2x2+…+βitxt, 其中ai0为Pi输入的秘密随机数。然后将秘密份额 (αi(j),βi(j)) 发送给Pj(Pj∈P-i=P
1)验证Pi公布的承诺值是否有效,验证方法如下:
由α(x)=α0+α1x+α2x2+…+αtxt得
记
存在v-1使
如果不存在Aij≠A′ij, 则Pi公布的承诺值都有效,否则Pi是不诚实的节点,执行 {}null+={Pi},P-={Pi}。
2)Pj(Pj∈P-i) 验证秘密份额是否与承诺值相匹配,Aij=gαi(j)hβi(j)modp成立,则秘密份额正确,否则Pj申请公布秘密份额,Pi需要在时限内公布对Pj正确的份额,否则判定Pi为恶意节点,执行 {}null+={Pi},P-={Pi}。
在此阶段,见证人节点分别作为领导者分享秘密随机数的份额,并及时的甄别出恶意节点,以确保诚实的见证人节点都能获得正确的秘密份额。
(2)计算阶段
(3)恢复阶段
为了防止恶意的见证人节点中断协议的执行,在每个阶段设置一个限制时间,如果Pi没有在限制时间内公布消息,那么其他见证人节点将判定Pi为恶意见证人节点,并将Pi加入恶意节点集 {}null。 协议执行结束后,见证人节点公布恶意节点集,如果超过一半以上的见证人节点判定Pi为恶意节点,那么普通节点将收回对Pi的选票,并从新选出新的见证人节点。因此,该协议满足n=2f+1模型,f为能容忍的最大节点数量。另外,t+1次多项式的选取必须满足t=f, 在输入阶段才能保证诚实节点的输入隐私性,并且在恢复阶段有t+1个正确的份额能重构出计算结果。
2.2.2 区块的发布与共识
本阶段将选出记账节点发布区块,其它节点验证发布区块的有效性,从而达成对交易数据的一致共识。共识过程是客户端将交易广播到网络中,经其它节点验证通过后成为待确认交易,参与记账权竞争的网络节点将所有待确认交易打包进一个预发布区块中,交易在区块体中以Merkle树的形式构造出区块头中MerkleRoot字段。此外,还要收集和记录其它区块头字段,通过改变区块头中noce字段从而调整个区块头的哈希值,使区块头哈希值小于一个目标难度值,最先找到满足此条件的区块发布到网络中,经其它节点验证合格后加入到主链上,从而区块中的交易得到确认。
(1)区块头的构造
每个区块是由区块头和区块体组成,区块头记录区块的重要信息,区块体包含被确认的交易。区块头中引用上一区块头的哈希值表明区块在链上的位置,交易以Merkle树的形式构造根哈希值能够实现链上交易的快速查找,代币数量、系统随机数的签名、noce值以及难度系数能够验证区块的合法性。对区块头中部分字段描述见表1。
表1 区块头部分字段描述
(2)出块策略
上一轮区块得到确认后,见证人节点会发布此轮出块需要的系统随机数。每个参与记账权竞争的节点利用系统随机数、持币数量和难度系数计算本轮出快的目标难度值。在运行过程中,最先找到满足出块条件节点才能发布区块,出块条件如下所示
其中,BlockHead是节点构建的预发布区块头部,H(·) 为单向哈希函数,区块头的哈希值能通过noce字段调整。coin表示节点持有的代币的数量,sign(r) 表示节点对此轮随机数的签名。w为难度系数,跟出块间隙时间有关,例如系统算力提升或则持币数量增大,会导致出块的间隙时间缩短,此时难度系数增大,相反,则减小。
根据出块条件,不同节点的出块难度是不一致的,目标难度值的随机性促使参与竞争的节点都可能成为记账节点,从而保证节点之间的公平性。对于节点个体而言,拥有更多的代币和计算资源能提高节点的竞争力。另一方面,在代币数量和计算资源的限制下,用户不能通过创建更多的节点来增加成为记账人节点的概率。
2.3 出块激励
定义在区块链分叉时上一轮的直系区块称为父区块,非直系合法区块称为叔父区块,发布叔父区块的节点称为叔父节点。叔父区块与最新发布区块相差一代,称为第一代叔父区块,相差K代称为第K代叔父区块。产生叔父区块节点称为叔父节点。第二代叔父区块示意图如图2所示。
图2 第二代叔父区块
此激励机制包括对记账节点、见证人节点和叔父节点的奖励。拥有记账权的出块节点不仅能得到打包交易费和出块奖励,并且在区块链出现分叉时每打包一笔对叔父节点的奖励交易还能得到一定比例的奖励。见证人节点诚实地执行MPC协议以产生系统随机数,对每轮区块产生做出积极贡献,在记账权的竞争中并不一定获得出块奖励,因此,每轮区块需要包含对见证人节点的小额奖励交易,对见证人的奖励能够激励见证人节点继续诚实的执行协议。对叔父节点的奖励限制在8代以内,每个叔父节点只奖励一次,父区块没有包含对叔父节点的奖励交易,将由子区块完成。如果超出5代都没有对叔父节点奖励,就不再对叔父区块奖励。在5代以内,每增加一代对叔父区块的奖励比例减少1/8,从第一代到第五代叔父节点的奖励比例分别为 (7/8,6/8,…,3/8)。 由于网络传输时延造成区块链暂时性分叉,对叔父节点进行奖励有利于主链及时归并统一。
3 实验分析
设计实验对改进算法的有效性进行检验,本节分别从节点参与度、对记账节点攻击情况以及记账权分配等几个维度比较了原始算法和改进算法,其次在区块产出率方面比较了POS共识机制。模拟实验环境见表2。
表2 模拟实验环境
3.1 节点参与度比较
原始算法中节点参与共识过程的积极性不高,为了检验改进后算法是否能加普通节点参与网络维护的比例,本实验在两共识机制的见证人节点数量和普通节点数量一致的条件下进行了50次共识,并统计出每一轮节点参与共识过程数量的比例,实验结果如图3所示。
图3 参与共识节点比例
从图3可得,在50轮共识中,原共识机制节点参与度在65%~75%之间,改进后共识机制的节点参与度在85%~95%之间。从记账权分配与激励机制方面分析,原共识机制中每轮记账权几乎被权益较好的见证人结点垄断,改进后的共识机制中记账权分配都具有随机性,任何节点都有机会成为出块节点,所以理性的普通节点都最大程度的保持在线,并参与到记账的权分配的竞争之中,以此获得出块奖励。显然,改进后的共识机制在节点活跃度方面优于原共识机制。
3.2 对记账节点攻击情况比较
记账节点承担着系统确认交易的任务,在执行打包任务时受到攻击会影响整个系统的安全稳定。为了检验改进算法是否能降低记账节点受到DDoS攻击和腐化攻击的概率,实验设计如下:网络节点由见证人节点、普通节点和攻击者节点组成,见证人数量为21个,在攻击者数量不变的条件下探究两共识机制随着网络节点数量的增加记账节点受到DDoS攻击和腐化攻击的概率。实验统计结果如图4所示。
图4 针对记账节点的攻击概率
从图4观察可得,在发布区块之前,原共识机制中记账节点受到攻击的概率维持不变,改进方案中记账节点受到攻击的概率随节点数增加而逐渐降低,并且原共识机制中节点受到攻击的概率远大于改进后的共识机制。探究其原因,改进方案中记账节点的选取是在全网以内,并且在发布区块之前记账节点身份未透明,攻击者并不能确定出记账节点身份。因此,改进后的共识机制在抵御针对记账节点的DDOS攻击和腐化攻击方面效果显著。
3.3 记账权分配比较
共识机制中记账节点分配的方式关乎到系统的公平性与节点的活跃度,为了比较两种共识机制在记账权分配方面的情况,设计如下实验。实验网络中共有60个权益不同的节点,其中包括21见证人节点,在600次出块后,统计不同权益节点获得记账权的次数,统计结果如图5所示。
图5 记账账权分配对比
从图5可得,原共识机制中权益越大的节点获得记账权的次数越多,权益排名前30的节点几乎垄断出块任务,改进方案中不同权益的节点获得记账权次数均在10次左右。分析可知,原共识机制中由21个见证人轮流承担出块任务,权益越大的节点被选举成见证人的机会越大,因此权益越大的节点获得记账权的次数越多,而在改进机制中,记账权在全网中随机分配,节点获得记账权的概率大致相同。随机分配的方式降低了权益较小的节点成为记账节点的门槛,促进了普通节点参与度,体现了记账权分配的公平性。
3.4 区块产出率比较
为了比较改进后的DPOS共识机制与POS共识机制在出块速度方面的表现。本实验设置相同的实验环境,仿真100个节点参与共识,统计两共识机制在10分钟内的出块数,统计结果如图6所示。
图6 出块速度对比
从图6可以看出,随着时间的变化,两共识机制的出快数都呈增长趋势。总体而言改进算法的出块速度要高于POS算法,随着时间的增长这种优势体现越明显。
4 结束语
本文提出了一种基于安全多方计算的DPOS的改进方案。在改进机制中,见证人节点执行安全多方计算协议产生一个抗偏置的随机数,从而随机决定不同节点的出块难度值,足够的随机性既能够保证系统对记账权分配的公平性,又能降低了低计算能力节点成为记账节点的门槛,激励更多普通节点参与到网络维护中来。MPC协议运行在由见证人组成的独立网络中,独立网络与主网络的隔离可以有效减少主网络中通信流量。在此基础上,采用寻找符合出块条件区块的方式选出记账节点,可以避免记账人身份透明直接暴露在攻击者的视野之下,降低了针对记账节点DDoS攻击与腐化攻击的风险。除此以外,本文从新设计了DPOS的激励机制,增加对见证人节点和叔父节点的奖励,其中对见证人的奖励能够激励见证人节点诚实的执行MPC协议,对叔父区块的奖励能促进区块链在分叉时的归并同一。改进方案与原DPOS在效率方面有所差距,本着未来的工作,将进一步对协议的性能优化,提高系统的吞吐率。