王 森 李志淮 賈志鵬
(大連海事大學信息科學技術學院 遼寧 大連 116002)
2008年中本聰(Satoshi Nakamoto)發(fā)表了比特幣的基礎論文[1],闡述了基于P2P網(wǎng)絡技術[2]、加密技術、時間戳技術、共識算法等的電子現(xiàn)金系統(tǒng)的構架理念,這標志著比特幣的誕生。同時也是區(qū)塊鏈這個詞的首次提出,它本質上是一個分布式系統(tǒng)[3],該系統(tǒng)具有去中心化、分布式和數(shù)據(jù)不可篡改等特點,可以解決現(xiàn)有的中心化信用機構的效率低、成本高和數(shù)據(jù)所有權被壟斷的問題。區(qū)塊鏈技術被認為是移動互聯(lián)網(wǎng)之后新的信息技術發(fā)展方向[4],將促進信用社會的建立,促使目前的信息互聯(lián)網(wǎng)向價值互聯(lián)網(wǎng)轉變。隨著區(qū)塊鏈技術的發(fā)展,共識算法方面的研究也越來越多,共識算法用于在分布式系統(tǒng)中實現(xiàn)可用性和一致性,是區(qū)塊鏈的關鍵技術[5]。
共識算法的研究在區(qū)塊鏈技術提出之前就開始了,Pease和Lamport在1980年提出的拜占庭容錯(BFT)算法[6-7],分析了如何在有惡意節(jié)點或者網(wǎng)絡堵塞問題的點對點網(wǎng)絡中,實現(xiàn)數(shù)據(jù)完整性和一致性。
PBFT(Practical Byzantine Fault Tolerance)共識算法[8-9]是Castro等基于BFT算法改進的,用于解決當前聯(lián)盟區(qū)塊鏈環(huán)境中分布式系統(tǒng)的共識問題,PBFT算法不僅繼承了BFT算法可以容忍拜占庭節(jié)點的優(yōu)點,并且把BFT算法中通信復雜度從O(n3)降低到了O(n2)。但是PBFT共識算法在某些方面還存在著不足。首先,PBFT算法中主節(jié)點的選取方式是按照編號輪流擔當主節(jié)點,這種主節(jié)點的選取方式容易受到P2P網(wǎng)絡中的DDoS攻擊和女巫攻擊,具有安全隱患,雖然在當拜占庭節(jié)點沒有達到總節(jié)點數(shù)目的2/3時會被其他從節(jié)點識破,并通過視圖切換更換主節(jié)點,但是頻繁的視圖切換會增加系統(tǒng)開銷,影響系統(tǒng)的性能;其次,在PBFT共識算法的三階段廣播過程,需要進行兩次通信開銷極大的全網(wǎng)轉發(fā),嚴重影響PBFT算法共識過程中的性能;最后,PBFT共識算法節(jié)點不能隨意加入、退出,影響系統(tǒng)可用性。
本文針對現(xiàn)有PBFT算法中主節(jié)點選取方式隨意、三階段協(xié)議通信復雜度較高、節(jié)點不能動態(tài)加入、退出等問題,提出了一種主節(jié)點隨機選取的改進拜占庭容錯算法(RPBFT)。該算法提出了一種隨機數(shù)生成方案,生成一個隨機數(shù)來進行主節(jié)點的選取,并且引入聚合簽名算法[10-11]對PBFT中的三階段協(xié)議進行改進,成功地把通信復雜度從多項式級別降低到了線性級別,減少網(wǎng)絡壓力和延遲,提高系統(tǒng)吞吐量,同時節(jié)點可以動態(tài)加入與退出系統(tǒng),增強系統(tǒng)的可用性。
聚合簽名(Aggregate Signature)[10-11]的概念是在2003年由Boneh提出的,聚合簽名就是一種用來將多個簽名聚合成一個簽名的方案,假設系統(tǒng)中有n個用戶ui(1≤i≤n)分別對n個不同的消息進行簽名,生成n個不同的簽名,這n個簽名可以被聚合者聚合成一個簽名,而驗證者只需要對生成的聚合簽名進行檢驗就可以確認上述n個簽名的正確性。聚合簽名方案可以將n個簽名聚合成一個簽名,縮短了簽名的長度;同時,可以將n次的驗證過程簡化為一次驗證就可完成,降低了系統(tǒng)的帶寬,減少了驗證時間,提升了系統(tǒng)的計算效率。
1.2.1PBFT算法思想
PBFT共識算法旨在解決當整個網(wǎng)絡中存在惡意節(jié)點時,仍然可以保證最終一致性和正確性的問題。算法中的大多數(shù)誠實節(jié)點都會忽略惡意節(jié)點發(fā)送的錯誤信息,能容忍失效節(jié)點和惡意節(jié)點的數(shù)量不超過(|R|-1)/3(|R|為節(jié)點個數(shù)),并且達成最終一致性。PBFT共識算法中,節(jié)點被分成客戶端節(jié)點和副本節(jié)點,副本節(jié)點又包括主節(jié)點和從節(jié)點。
副本節(jié)點組成的集合用R表示,系統(tǒng)中可以容忍的失效節(jié)點和惡意節(jié)點最多為f,另外還需要2f+1個誠實節(jié)點,所以系統(tǒng)的副本節(jié)點總數(shù)為|R|=3f+1,用0到|R|-1對節(jié)點進行編號。PBFT算法共識過程是在視圖中進行,所以主節(jié)點的選取是通過視圖編號和副本節(jié)點集合來確定的,主節(jié)點選取公式如下:
p=vmod |R|
(1)
式中:v是視圖編號;|R|為節(jié)點個數(shù);p為選取的主節(jié)點編號。當主節(jié)點網(wǎng)絡延遲失效或者被從節(jié)點發(fā)現(xiàn)為拜占庭節(jié)點時,就會啟動視圖更換協(xié)議,并且根據(jù)式(1)選取新的主節(jié)點。
1.2.2PBFT算法流程
PBFT共識算法要求系統(tǒng)共同維護一個狀態(tài),所有節(jié)點采取的行動一致。為此,需要運行一些基本協(xié)議,主要包括一致性協(xié)議和視圖更換協(xié)議。其中一致性協(xié)議包含5個階段:請求(request)、預準備(pre-prepare)、準備(prepare)、確認(commit)和響應(reply)。具體流程如圖1所示。
主節(jié)點在接收到客戶端節(jié)點發(fā)送的請求提案后,廣播該提案消息到全網(wǎng)的從節(jié)點,從節(jié)點接收到主節(jié)點的消息并執(zhí)行,再通過prepare和commit階段,將執(zhí)行結果發(fā)送給客戶端節(jié)點,客戶端節(jié)點等待至少f+1個相同的結果,表示該系統(tǒng)在這個請求上達成最終一致性。若沒有得到f+1個相同的結果,對提案進行舍棄,客戶端節(jié)點自行判斷是否需要重新提交。
1.2.3視圖更換協(xié)議
視圖更換協(xié)議可以在主節(jié)點失效的時候保證系統(tǒng)的活性,視圖更換協(xié)議一般由超時機制觸發(fā),以防止客戶端或從節(jié)點一直等待請求的執(zhí)行。從節(jié)點在接收到有效請求時,會啟動計時器并且會等待請求執(zhí)行的結果,當請求被執(zhí)行時就停止計時器。計時器超時,從節(jié)點向其他節(jié)點廣播視圖更換消息,根據(jù)式(1)選取下一視圖的主節(jié)點,當主節(jié)點接收到2f個有效的視圖更換確認的消息后,進入下一視圖。
根據(jù)上一節(jié)對PBFT算法流程進行詳細的分析,可以看出現(xiàn)有PBFT算法具有以下幾點問題:
1) 由PBFT算法思想中的主節(jié)點選取公式可知,當發(fā)生視圖更換時,新的主節(jié)點編號為當前失效主節(jié)點的編號+1,這種主節(jié)點的選取策略存在一定的問題,拜占庭節(jié)點可以對在自己編號之前的副本節(jié)點進行拒絕服務攻擊,使在自己編號之前的副本節(jié)點失效,達到當選主節(jié)點的目的,具體示意圖如圖2所示。
其中黑色節(jié)點為拜占庭節(jié)點,白色節(jié)點為誠實節(jié)點,當主節(jié)點編號與拜占庭節(jié)點接近時,拜占庭節(jié)點就可以對主節(jié)點以及自身編號之前的節(jié)點進行拒絕服務攻擊,例如圖2的4號節(jié)點分別對編號為1、2、3號的節(jié)點進行攻擊,就可以造成連續(xù)的視圖更換,使4號節(jié)點當選主節(jié)點,達到作惡的目的。但是,由于拒絕服務攻擊是需要成本的,所以作惡節(jié)點不會在與主節(jié)點編號差距過大時發(fā)動攻擊。由于在攻擊過程中進行了多次的視圖更換,造成了大量的通信開銷,嚴重影響了系統(tǒng)的可用性。
2) 在PBFT算法的三階段廣播協(xié)議中,有兩次消息的全網(wǎng)轉發(fā),嚴重占用系統(tǒng)帶寬,造成系統(tǒng)堵塞,當節(jié)點數(shù)目增多時,消息傳遞次數(shù)急劇增加,影響系統(tǒng)性能。
3) 系統(tǒng)中節(jié)點不能靈活地加入和退出,不適合開放的區(qū)塊鏈網(wǎng)絡,同時頻繁的加入、退出操作會嚴重影響系統(tǒng)的可用性。
隨著區(qū)塊鏈技術的發(fā)展,拜占庭容錯算法的研究越來越多,特別是由于PBFT算法在點對點網(wǎng)絡中的安全性和高效性,使得針對PBFT共識算法的研究越來越多。
在文獻[12-13]中提出的Paxos算法和Raft算法是PBFT算法針對沒有拜占庭節(jié)點存在的分布式環(huán)境中的改進,但是這種改進方案主要用于數(shù)據(jù)庫或者日志的存儲系統(tǒng),并不能解決區(qū)塊鏈網(wǎng)絡中的拜占庭節(jié)點問題。在文獻[14]引入了一種淡化主節(jié)點模式的EPBFT共識算法,并且把PBFT中三階段流程刪去了COMMIT階段,使PBFT的通信開銷降低了一半,但是系統(tǒng)的復雜度還是O(n2),還可以進一步進行簡化。文獻[15]引入了一種基于信用投票選取主節(jié)點的方案IPBFT,但是在區(qū)塊鏈去中心化的模式下,引入信任機制是與區(qū)塊鏈去信任模式原則相違背的。文獻[16]提出了一種POS共識機制與PBFT共識機制結合的快速拜占庭容錯算法AlgoRand,該共識協(xié)議利用密碼抽簽技術對共識的驗證者和領導者進行隨機選取,同時還提出了BA*二階段共識協(xié)議來對完成系統(tǒng)的一致性,但是領導者的隨機選取過程需要等待POS和VRF過程,給系統(tǒng)帶來一定的延遲。文獻[18]提出了POW與PBFT結合的共識算法,可以提高共識節(jié)點的可信度,但是會加大系統(tǒng)的中心化程度,這與區(qū)塊鏈去中心化去信任的模式相違背??梢钥闯?,雖然針對PBFT算法的研究有很多,但是每種算法都有各自的優(yōu)勢和不足,PBFT共識算法在性能和可用性上面仍然還有改進空間。
通過對PBFT共識算法的流程和一系列改進的PBFT算法進行分析,并結合聚合簽名和隨機數(shù)方案提出了一種改進的拜占庭容錯算法(RPBFT),方案主要有以下幾點改進:
1) 在視圖切換協(xié)議過程中提出主節(jié)點隨機選取方案,根據(jù)隨機數(shù)進行主節(jié)點的選取,在主節(jié)點當選之前,其他節(jié)點都無法預知主節(jié)點的身份,拜占庭節(jié)點只能對當前主節(jié)點發(fā)起攻擊,但無法預知自己是否能夠當選主節(jié)點,也就無法達到通過對誠實節(jié)點進行拒絕服務攻擊使自己當選主節(jié)點的目的。同時由于成本問題,作惡節(jié)點在不知道能否當選主節(jié)點的情況下不會發(fā)起攻擊,故可以增強系統(tǒng)安全性,減少視圖更換的頻率,提高系統(tǒng)可用性,降低系統(tǒng)延遲。
2) 增加節(jié)點同步過程,給新加入系統(tǒng)的節(jié)點設置一個待同步狀態(tài),當節(jié)點同步到共識過程的最低水位時,就可以轉化為從節(jié)點,并進入共識過程,從而使系統(tǒng)中的節(jié)點可以動態(tài)加入、退出,增強系統(tǒng)可用性。
3) 對PBFT共識算法的三階段流程進行簡化,結合聚合簽名技術對其進行優(yōu)化改進,去掉三段式流程中的兩次消息的全網(wǎng)廣播,改為消息聚合轉發(fā),降低算法共識過程中的通信復雜度,增強系統(tǒng)的可擴展性。
2.2.1RPBFT算法流程
RPBFT算法流程還是分為5個階段:請求(request)、預準備(pre-prepare)、準備(prepare)、確認(commit)和響應(reply)。具體流程如圖3所示。
1) 請求階段??蛻舳薱向主節(jié)點p發(fā)送
2) 預準備階段。主節(jié)點檢驗客戶端請求簽名是否正確,簽名非法就丟棄,簽名正確就分配一個編號vi,編號vi主要用于對客戶端的請求進行排序。然后廣播一條<
3) 準備階段。從節(jié)點i檢驗來自主節(jié)點簽名后的消息,檢驗簽名和視圖序號是否正確,若檢驗通過,則進入準備階段。從節(jié)點i發(fā)送一條<
4) 確認階段。從節(jié)點接收到主節(jié)點發(fā)送的消息,并且驗證生成聚合簽名消息的節(jié)點個數(shù)是否大于2f+1個,若驗證通過,則進入COMMIT階段,并發(fā)送一條<
5) 響應階段。從節(jié)點i對確認階段發(fā)送的聚合簽名進行檢驗,如果驗證聚合簽名正確,則執(zhí)行客戶端發(fā)起的請求操作,并發(fā)送一個
2.2.2聚合簽名方案設計
上述流程中用到的聚合簽名過程主要分為6個部分,分別是系統(tǒng)建立、密鑰生成、從節(jié)點簽名生成、單個簽名驗證、聚合簽名生成、聚合簽名驗證等,具體流程如下:
1) 系統(tǒng)建立。定義群G1為大素數(shù)q階加法群,G2為q階循環(huán)乘法群,P為G1的生成元,e為G1×G1→G2的雙線性映射,選取兩個哈希函數(shù):H1:{0,1}*→G1,H2:{0,1}2×G1×{0,1}*→Zm。結合當前視圖編號v計算:Pv=vP,公開系統(tǒng)參數(shù)params={G1,G2,e,P,Pv,H1,H2}。
2) 密鑰生成。節(jié)點i選擇隨機數(shù)xi作為用戶秘密值,并根據(jù)節(jié)點身份IDi,其中0
3) 節(jié)點簽名的生成。根據(jù)節(jié)點的身份IDi、私鑰Di、消息mi,隨機選取ri∈Zm,計算Ui=riP,hi=H2(mi,Ui,IDi),Vi=hiDi+riPv,輸出節(jié)點i對消息mi的簽名σi=(Vi,Ui),并將簽名發(fā)送給主節(jié)點聚合。
4) 單個簽名的驗證。對于簽名σi,主節(jié)點計算hi=H2(mi,Ui,IDi),若等式e(P,Vi)=e(Ui+hiDi,Pv)成立,則說明σi有效。
2.2.3視圖更換
視圖切換協(xié)議可以有效保證PBFT共識算法的活性,基于PBFT共識算法改進的RPBFT共識算法在原有協(xié)議的基礎上增加了隨機選取主節(jié)點的步驟。視圖切換的觸發(fā)條件主要有主節(jié)點超時失效、主節(jié)點作惡等幾種。視圖切換的流程如圖4所示。
(1) 系統(tǒng)滿足上述視圖切換的觸發(fā)條件之一。
(2) 發(fā)現(xiàn)主節(jié)點有上述的問題的從節(jié)點向其他節(jié)點廣播視圖切換消息
(3) 其他從節(jié)點接收到節(jié)點i發(fā)送的VIEW-CHANGE消息,首先檢查消息中的視圖編號v是否正確,其次檢查主節(jié)點是否存在問題,若編號v錯誤或者消息m錯誤,則忽略此消息;若檢驗通過,則發(fā)送一條
(4) 節(jié)點i對接收到的VIEWCHANGE-ADOPT消息進行聚合,將聚合后的消息VIEW-COMMIT,v,v+1,vi,i,m>θi發(fā)送給其他節(jié)點進行確認。其他從節(jié)點接收到消息后進行確認,確認通過后向全網(wǎng)廣播VIEW-COMMIT消息,當任意一個節(jié)點接收到2f個確認消息后,就會進行視圖更換并選取主節(jié)點K,主節(jié)點K的具體選取過程在下一節(jié)中進行介紹。
(5) 主節(jié)點選取完成之后,為了保證數(shù)據(jù)的準確性,需要進行數(shù)據(jù)校驗和確認,確保在新的視圖中繼續(xù)完成上個視圖中未完成的共識。如果上個視圖有提案到達了準備階段,并且記錄到日志中,新的主節(jié)點會發(fā)起數(shù)據(jù)同步,繼續(xù)完成未完成的一致性協(xié)議。
2.2.4隨機數(shù)K的選擇
不同視圖中的主節(jié)點都是由隨機數(shù)K進行選擇,若區(qū)塊所在視圖為初始視圖時,則K=0;若區(qū)塊不在初始視圖,隨機數(shù)K由視圖更換階段的隨機數(shù)種子和上一個區(qū)塊交易的哈希確定,確定方法如圖5所示。
假設視圖切換階段收到N個數(shù)si,其中0≤si≤|R|-1,0≤i≤N,上一個區(qū)塊哈希為BlockHash,則初始隨機數(shù)Random可以由式(1)和式(2)確定:
Hi=Hash(si)
(2)
(3)
然后對得到的隨機數(shù)Random通過SHA256計算得到的一個長度為256位的16進制字符,取隨機字符Random最后的8位,轉化為10進制然后;用式(3)得到隨機數(shù)K:
K=(TratoInt10(End8(Random))) mod (|R|-1)
(4)
式中的函數(shù)TratoInt10意義是16進制轉化為10進制,函數(shù)End8的含義是取字符串的最后8位,mod是進行取模運算,最后在從節(jié)點中選擇編號為K的節(jié)點當選為主節(jié)點。
2.2.5垃圾回收與節(jié)點動態(tài)調節(jié)
在RPBFT算法流程中,為了確保視圖更換后能恢復正在執(zhí)行的請求,每個節(jié)點都記錄了一些消息在本地log中,為了保證算法可以正常運行的同時減少本地存儲,可以每執(zhí)行完k條請求執(zhí)行一次狀態(tài)同步,刪除最低水位線下的本地log記錄。
給系統(tǒng)中的節(jié)點新加入了一個待同步狀態(tài),新加入的節(jié)點或者沒有達到當前視圖的最低水位的節(jié)點都屬于待同步狀態(tài)。待同步狀態(tài)的節(jié)點達到系統(tǒng)所需要的最低水位線后,節(jié)點狀態(tài)變?yōu)橥綘顟B(tài),同時主節(jié)點會給其分配一個編號i,此時該節(jié)點就正式加入共識過程,就可以等待主節(jié)點發(fā)送信息。
RPBFT的改進方案可以在不影響系統(tǒng)容錯性的情況下降低共識流程中的通信開銷,提升共識算法的效率。通信開銷主要從兩個方面進行分析:一是在共識過程中的三個主要階段,包括預準備階段、準備階段和確認階段;二是在系統(tǒng)出現(xiàn)故障時發(fā)生的視圖切換。
3.1.1三階段過程中的通信開銷
假定系統(tǒng)中共識節(jié)點數(shù)目為a(a>4),可以根據(jù)PBFT和RPBFT的共識流程分別進行對比分析。其中PBFT共識算法和RPBFT共識算法的三階段總通信次數(shù)分別為:
C1=(a-1)+2a(a-1)
(5)
C2=6(a-1)
(6)
根據(jù)式(5)、式(6)可以做出兩種算法在通信開銷的對比圖,如圖6所示。
根據(jù)圖6可以看出,在三階段流程中PBFT算法的總通信開銷是多項式級別的,隨著總節(jié)點數(shù)的增多,通信開銷急劇增長,當節(jié)點增多到一定數(shù)量時,系統(tǒng)會占用過多帶寬,造成系統(tǒng)堵塞;而改進的RPBFT共識算法將通信開銷降低到了線性,隨著節(jié)點的增多,總通信次數(shù)不會出現(xiàn)太大的波動。RPBFT算法可以有效地降低通信開銷,提升共識效率,增強了系統(tǒng)的可用性。
3.1.2視圖更換中總通信開銷
系統(tǒng)在共識過程中出現(xiàn)故障時,從節(jié)點會發(fā)起視圖更換協(xié)議。在視圖更換協(xié)議中從節(jié)點發(fā)起視圖更換提案過程的總通信次數(shù)為(a-1),其他節(jié)點接收到提案以后進行全網(wǎng)廣播過程的總通信次數(shù)為(a-1)2,同時共識過程中視圖更換的概率為P,則兩種算法在發(fā)起視圖更換時的總通信次數(shù)為:
T1=C1+2Pa(a-1)
(7)
T2=C2+2Pa(a-1)
(8)
在PBFT和RPBFT共識算法中的拜占庭節(jié)點個數(shù)都是小于1/3的,所以系統(tǒng)中發(fā)起視圖更換的概率P<1/3,令P=0.33,則兩種算法的總通信開銷對比圖如圖7所示。
根據(jù)圖7中PBFT和RPBFT算法在發(fā)生視圖更換時的總通信次數(shù)對比,在發(fā)生視圖更換的概率為1/3時,RPBFT算法可以極大地降低系統(tǒng)的通信開銷,可以達到降低PBFT算法的通信復雜度的目的。根據(jù)圖6和圖7綜合來看,在一次完整的共識流程中,總節(jié)點的數(shù)目越多,兩種算法的通信開銷差距越大,因此,RPBFT算法可以在不影響系統(tǒng)可靠性的前提下有效減少通信總開銷,提升系統(tǒng)的可用性。
為驗證本文方法確實能夠提升系統(tǒng)性能,且不降低系統(tǒng)的容錯性和安全性,實驗以文獻[16]提出的AlgoRand共識算法和Fabric中的PBFT算法作為對比算法,對比三種算法在吞吐量、時延、穩(wěn)定性、安全性等方面的表現(xiàn)。本實驗選用Windows系統(tǒng)為實驗環(huán)境,選用simblock區(qū)塊鏈模擬器模擬區(qū)塊鏈網(wǎng)絡,以Gradle- 6.3工具進行構建,實驗數(shù)據(jù)用MATLAB進行繪制。在本文的實驗中需要對某些參數(shù)進行設置,同時需要一些假設條件:
(1) 為了降低區(qū)塊大小對實驗數(shù)據(jù)的影響,在本文實驗中將一個區(qū)塊包含的交易固定在100個。
(2) 在系統(tǒng)穩(wěn)定性測試中,定義攻擊規(guī)則為當作惡節(jié)點編號與主節(jié)點編號差距小于等于2時,發(fā)動拒絕服務攻擊。同時還要保證由于攻擊掉線的節(jié)點,可以恢復并加入到系統(tǒng)中。
3.2.1吞吐量測試
吞吐量代表一個系統(tǒng)在單位時間內(nèi)處理事務的能力,通常用TPS(Transaction Per Second,每秒交易數(shù))來表示:
TPS=SumTransactionΔt/Δt
(9)
式中:Δt為交易發(fā)送后到寫入?yún)^(qū)塊的時間間隔;SumTransactionΔt為該時間間隔中寫入?yún)^(qū)塊的交易總數(shù)。為了驗證在不同規(guī)模下RPBFT算法的吞吐量,設置在不同節(jié)點個數(shù)的區(qū)塊鏈網(wǎng)絡下,統(tǒng)計三種算法分別完成20 000筆交易的平均時間,并根據(jù)式(9)計算平均TPS,如圖8所示。
可以看出隨著系統(tǒng)內(nèi)節(jié)點總數(shù)的增多,三種算法的TPS都有不同程度的下降,但RPBFT共識算法的TPS明顯更高,并且隨著節(jié)點的增多這種差距會越來越大。本改進方案在系統(tǒng)運行過程中,可能會由于主節(jié)點問題發(fā)起視圖更換,視圖切換時會伴有隨機數(shù)的生成,在這一段時間中會略微影響系統(tǒng)性能,但算法總體性能還是高于其他兩種算法,達到了提升系統(tǒng)吞吐量的目的。
3.2.2時延測試
時延是指一筆交易從開始提交到交易確認之間消耗的時間,在區(qū)塊鏈網(wǎng)絡中時延是衡量系統(tǒng)的共識算法和網(wǎng)絡性能的標準,較低的時延會更加快速地確認交易,出現(xiàn)分叉的概率也會大大降低。在本文中用式(10)來對時延進行計算。
DelayTimetx=Tc-Tp
(10)
式中:DelayTimetx表示交易的時延;Tc表示交易在區(qū)塊中確認的時間;Tp表示發(fā)起提案的時間。為了驗證不同規(guī)模下RPBFT算法的延遲,設置在不同節(jié)點個數(shù)的區(qū)塊鏈網(wǎng)絡下,統(tǒng)計三種算法分別完成20 000筆交易的平均延遲,并統(tǒng)計結果如圖9所示。
如圖9所示,隨著系統(tǒng)內(nèi)共識節(jié)點的增多,三種算法的時延都有不同程度的增長,相比較看AlgoRand算法中的時延是最長的,是由于AlgoRand算法在共識中加入了領導者和驗證者隨機選取,影響了系統(tǒng)性能。RPBFT共識算法雖然在視圖切換協(xié)議中加入了隨機數(shù)生成和主節(jié)點隨機選取過程,但避免了連續(xù)視圖切換問題,并且改進了PBFT算法的三階段通信協(xié)議,使得RPBFT算法在保證安全性和可靠性的基礎上降低了PBFT算法的交易時延,縮短了確認時間,提高了系統(tǒng)的可用性。
3.2.3穩(wěn)定性測試
視圖切換的觸發(fā)的條件主要有主節(jié)點網(wǎng)絡問題超時、主節(jié)點作惡、主節(jié)點被攻擊等幾種情況。故可以用平均視圖切換次數(shù)來表示系統(tǒng)的穩(wěn)定性。穩(wěn)定性測試主要為驗證在大規(guī)模的區(qū)塊鏈網(wǎng)絡中,RPBFT算法可以更穩(wěn)定地運行。設置在有120個節(jié)點的區(qū)塊鏈網(wǎng)絡中,統(tǒng)計不同拜占庭節(jié)點比率下的視圖切換次數(shù)如圖10所示。
根據(jù)圖10可以看出在拜占庭節(jié)點占比較低的情況下兩種算法的視圖切換次數(shù)都很少,隨著拜占庭節(jié)點的增多,視圖切換次數(shù)都有不同程度的增長,但同時RPBFT算法的視圖切換次數(shù)一直小于PBFT算法。這是由于RPBFT共識算法可以規(guī)避作惡節(jié)點根據(jù)主節(jié)點選取順序發(fā)起的攻擊,減少了部分由于惡意攻擊導致的視圖切換,增強了系統(tǒng)的安全性與穩(wěn)定性,使系統(tǒng)可在大規(guī)模網(wǎng)絡中穩(wěn)定安全運行。
RPBFT算法在主節(jié)點的選擇上與AlgoRand算法的密碼抽簽技術不同,采用了生成隨機數(shù)來進行主節(jié)點選取的方案,但同時選擇概率性算法需要考慮公平性、可驗證性和不可預測性。
本文中的主節(jié)點概率選擇算法的公平性是根據(jù)節(jié)點編號平均分配,保證每個節(jié)點當選主節(jié)點的概率是均勻的,視圖切換中生成的原始隨機數(shù)Random足夠大,遠遠大于節(jié)點數(shù)目,所以根據(jù)式(4)得到的主節(jié)點編號K是符合公平性原則的;RPBFT算法在視圖更換階段中產(chǎn)生隨機數(shù)的種子都是可追溯的,保證了最終隨機數(shù)符合概率選擇中的可驗證性;當發(fā)生視圖更換時,絕大多數(shù)誠實節(jié)點會發(fā)送自己選擇數(shù)字并且進行簽名加密,節(jié)點并不會獲得其他節(jié)點的種子,根據(jù)式(3)、式(4)的計算,會得到一個隨機數(shù)K,由于產(chǎn)生隨機數(shù)的過程有大量的節(jié)點參與,隨機種子足夠多,所以本算法的主節(jié)點選擇方案符合不可預測的原則。總體來看RPBFT算法在保證容錯性不變的基礎上,提高了共識效率和安全性,增強了系統(tǒng)的可用性。
本文根據(jù)區(qū)塊鏈中的實用拜占庭容錯(PBFT)共識算法中存在的一些問題,提出了一種主節(jié)點隨機選取的改進拜占庭容錯(RPBFT)共識算法。并且對PBFT算法、RPBFT共識算法、AlgoRand共識算法進行模擬對比實驗,通過對通信開銷、吞吐量、時延、視圖切換次數(shù)等實驗數(shù)據(jù)的對比分析,驗證了本文所提出的算法方案確實可以在不降低系統(tǒng)容錯性的前提下提高系統(tǒng)的性能和安全性。
未來可以進一步對RPBFT算法的視圖更換階段進行改進,提出通信量更小的視圖更換方案,提升系統(tǒng)性能。同時,也可以將RPBFT算法應用到有向無環(huán)圖(DAG)新型區(qū)塊鏈技術上進一步提升系統(tǒng)的性能。