鄧小鴻,王智強,黎康婷,羅志瓊
1.贛南科技學(xué)院 電子信息工程學(xué)院,江西 贛州 341000
2.江西理工大學(xué) 信息工程學(xué)院,江西 贛州 341000
3.贛州市云計算與大數(shù)據(jù)重點實驗室,江西 贛州 341000
區(qū)塊鏈作為新一代信息技術(shù),已經(jīng)成為國家重點關(guān)注的發(fā)展對象,國家“十四五”規(guī)劃明確提出要加快推動數(shù)字產(chǎn)業(yè)化,培育壯大區(qū)塊鏈等新興數(shù)字產(chǎn)業(yè)。共識機制研究如何在分布式的節(jié)點中達成數(shù)據(jù)的一致性,廣泛應(yīng)用在無線傳感器網(wǎng)絡(luò)、車載自組織網(wǎng)絡(luò)等分布式系統(tǒng)中[1-2]。共識機制作為區(qū)塊鏈中的核心技術(shù),具體的工作包括記賬節(jié)點的選取、區(qū)塊生成、驗證與分發(fā),涉及到一個區(qū)塊從產(chǎn)生到最終上鏈存儲的全過程,其性能優(yōu)劣直接影響著區(qū)塊鏈系統(tǒng)的效率,成為區(qū)塊鏈研究者們重點關(guān)注的焦點[3-5]。
拜占庭容錯類(Byzantine fault tolerance,BFT)共識算法最早于1982 年由Lamport 等人[6]提出,用來解決“拜占庭將軍問題”,但由于其高復(fù)雜度一直未得到實際應(yīng)用。直到1999 年,實用拜占庭容錯算法(practical Byzantine fault tolerance,PBFT)的出現(xiàn),將原始BFT復(fù)雜度由指數(shù)級降低到多項式級,使得BFT類共識算法在實際系統(tǒng)中應(yīng)用變成可行[7]。目前主流的聯(lián)盟鏈共識算法大多是基于BFT類進行實現(xiàn),雖然能較好地解決拜占庭將軍問題,但存在著通信的時間復(fù)雜度過高問題,特別是在主節(jié)點連續(xù)切換下,通信的時間復(fù)雜度達到O(n3)。并且,隨著節(jié)點數(shù)量增多,算法的性能顯著下降。
為了解決BFT類算法的復(fù)雜度,研究者們提出較多改進算法。如Zhang等人[8]提出的委托拜占庭容錯算法(delegated Byzantine fault tolerance,DBFT),將網(wǎng)絡(luò)節(jié)點劃分成普通節(jié)點與授權(quán)共識節(jié)點,共識節(jié)點由持幣節(jié)點選舉,普通節(jié)點負責驗證與存儲區(qū)塊,新的方法在相同節(jié)點規(guī)模下的通信量得到顯著降低,但通信的時間復(fù)雜度仍然達到O(n2)。Han 等人[9]提出以交換為中心的拜占庭容錯機制(Switch-Centric BFT,SCBFT),將關(guān)鍵的BFT函數(shù)采用可編程交換模塊實現(xiàn),加速了共識過程和減輕了通信負載,但SCBFT 依賴于特定的軟硬件環(huán)境,如需要BMv2這樣的交換機模擬引擎。Zhan等人[10]提出委托隨機拜占庭容錯算法(delegated randomization BFT,DRBFT),算法在主節(jié)點選取中加入隨機算法,增加了算法安全性,但通信的時間復(fù)雜度和文獻[8]相比并沒有顯著改善。Abraham 等人[11]提出HotStuff 算法,將PBFT 平均通信的時間復(fù)雜度從O(n2)降到O(n),但是主節(jié)點的選取方式并沒有提高網(wǎng)絡(luò)的抗攻擊能力,而且主從節(jié)點之間采用星型拓撲結(jié)構(gòu)進行通信,隨著從節(jié)點數(shù)量的增多性能會受到硬件資源的影響?,F(xiàn)有主流BFT算法其優(yōu)缺點如表1所示。
表1 現(xiàn)有BFT算法對比表Table 1 Comparison of existing BFT algorithms
綜上,現(xiàn)有BFT類算法存在的主要問題是選舉記賬節(jié)點的方式存在著安全隱患,存在著拜占庭節(jié)點作惡的風險,另外,通信拓撲結(jié)構(gòu)不夠靈活,通信的時間復(fù)雜度依賴于特定的軟硬件。針對上述問題,本文創(chuàng)新性地提出如下方法:
(1)提出一種基于神經(jīng)網(wǎng)絡(luò)的節(jié)點信譽值評估機制,更為精確地衡量節(jié)點的信譽值,并根據(jù)信譽值來挑選記賬節(jié)點,提高共識效率和減小惡意節(jié)點成為記賬節(jié)點的風險,提高共識安全性。
(2)設(shè)計一種自適應(yīng)的樹型通信拓撲結(jié)構(gòu),并根據(jù)節(jié)點信譽值自主調(diào)整樹型結(jié)構(gòu)的叉度,減小了傳統(tǒng)P2P拓撲結(jié)構(gòu)中通信的時間復(fù)雜度,自由叉度結(jié)構(gòu)在增加可擴展性的同時減小了節(jié)點作惡帶來的負面影響。
拜占庭容錯算法,是一種基于通過少數(shù)服從多數(shù)的投票機制達成共識的算法。PBFT算法是一種狀態(tài)機副本復(fù)制的方法,所有的副本狀態(tài)都是在視圖中進行轉(zhuǎn)換,leader 節(jié)點也就是記賬節(jié)點的選擇方式是主節(jié)點視圖編號模上節(jié)點個數(shù),一輪共識都是以一個視圖為一個周期,當共識完成開始切換視圖。PBFT 算法顯著改善了BFT問題中的通信的時間復(fù)雜度,但是在PBFT中由于節(jié)點之間需要不斷的廣播,隨著節(jié)點規(guī)模越大,網(wǎng)絡(luò)性能將會變壞。此外當PBFT中的leader節(jié)點頻繁切換會導(dǎo)致通信的時間復(fù)雜度為O(n3),因此PBFT 算法一般應(yīng)用在節(jié)點數(shù)較少的聯(lián)盟鏈中。HotStuff算法進一步降低了PBFT的平均通信的時間復(fù)雜度,其節(jié)點之間并不是采用廣播的形式,而是將消息都由leader 節(jié)點處理,依靠同步時鐘來切換視圖并與共識過程合二為一。當驗證者在共識過程提出異議,認證有問題,超過時間就會切換視圖。上述兩種BFT 類算法,leader節(jié)點的選舉都為試圖編號順序進行切換,這種方式會存在惡意節(jié)點成為leader的問題。
基于信譽模型的共識算法出現(xiàn)很好地解決了leader節(jié)點的選舉問題,劉乃安等人[12]針對區(qū)塊鏈中的驗證節(jié)點易受到攻擊,導(dǎo)致失去對誠實節(jié)點的判別能力,提出了一種聲譽證明的共識機制。通過對節(jié)點的貢獻度和可靠度進行加權(quán)求和得出最終的綜合聲譽,并基于綜合聲譽排名選擇當前回合的BFT中的leader。該聲譽證明機制能夠有效解決驗證節(jié)點被攻擊操控的問題,同時也存在著潛在的聲譽寡頭和貢獻度、可靠度的權(quán)重分配不均衡的問題。Alex 等人[13]提出了抗女巫攻擊的信譽共識算法,有效地降低了惡意節(jié)點成為leader 節(jié)點風險,但是該算法依然沒有解決BFT 的規(guī)模越大吞吐量越低的問題,且信譽模型的計算相對固定,可擴展性差。Chen 等人[14]提出了基于特征值分組和信用度優(yōu)化的BFT算法,將大規(guī)模的網(wǎng)絡(luò)節(jié)點分成不同的組織形成獨立的共識組來降低通信的時間復(fù)雜度,挑選高信用度的節(jié)點成為記賬節(jié)點加速leader節(jié)點的選擇效率,但其節(jié)點信用值通過線性計算公式得到,存在著節(jié)點信用值評估不精確的問題。
綜上,基于節(jié)點信譽的記賬節(jié)點選取方法能有效避免惡意節(jié)點作惡,并能加快共識過程。節(jié)點信譽度與節(jié)點在去中心化網(wǎng)絡(luò)中的行為密切相關(guān),需要對節(jié)點在網(wǎng)絡(luò)中的行為進行深入分析,更為精確地衡量節(jié)點的信譽值。
現(xiàn)有共識算法中的通信結(jié)構(gòu)大致分為三種:P2P方式、星型拓撲和gossip 拓撲。三種通信結(jié)構(gòu)如圖1 所示(陰影節(jié)點為主節(jié)點,其他為從節(jié)點)。第一類的典型代表如PBFT 采用的P2P 的通信方式,主節(jié)點將消息發(fā)送給所有從節(jié)點,從節(jié)點將收到的消息發(fā)給其他所有節(jié)點,該方法存在通信量過多,從而導(dǎo)致通信的時間復(fù)雜度過大。第二類的典型代表如Raft 以及HotStuff 采用的星型拓撲,由主節(jié)點將消息發(fā)給所有的從節(jié)點,算法雖然使得通信復(fù)雜降低為O(n),但隨著訪問量增加,系統(tǒng)整體性能會受限于主節(jié)點的硬件資源。第三類如gossip 協(xié)議[15],該協(xié)議是主節(jié)點將消息隨機傳播給最近n個從節(jié)點,再由n個從節(jié)點進一步傳給其他相鄰節(jié)點,該方式將通信的時間復(fù)雜度進一步降低為O(lbn),但該算法存在著節(jié)點隨機向少數(shù)幾個節(jié)點發(fā)送消息,而消息最終是通過多個輪次的散播而到達全網(wǎng),不可避免地造成消息延遲。另外節(jié)點定期隨機選擇周圍節(jié)點發(fā)送消息,而收到消息的節(jié)點也會重復(fù)該步驟,因此會存在同一節(jié)點多次接收同一消息,增加消息處理的壓力。
圖1 三種典型的通信拓撲結(jié)構(gòu)Fig.1 Three typical communication topologies
為了減小數(shù)據(jù)同步過程中通信的時間復(fù)雜度,研究者們對P2P通信結(jié)構(gòu)進行改進,提出了結(jié)構(gòu)化的通信拓撲。Ji 等人[16]早在2012 年提出在共識算法中采用樹型拓撲結(jié)構(gòu),將主節(jié)點作為根節(jié)點,同步消息從根節(jié)點采用樹型圖遍歷方式進行傳輸,通信的時間復(fù)雜度大大降低,但消息的傳播依賴于主節(jié)點的可靠性,一旦主節(jié)點作惡將會造成消息傳播無效。Du等人[17]也提出樹型通信拓撲,并把同步節(jié)點分為主動和被動節(jié)點,由主動節(jié)點給被動節(jié)點采用樹型結(jié)構(gòu)進行消息傳送,該方法顯著降低了通信的時間復(fù)雜度,但主動節(jié)點的選取存在著安全隱患,不能有效解決拜占庭節(jié)點故意作惡的情況。
綜上,結(jié)構(gòu)化的通信拓撲能顯著降低數(shù)據(jù)同步過程中通信的時間復(fù)雜度,但必須考慮節(jié)點故意作惡的問題,需要設(shè)計更加靈活的通信拓撲結(jié)構(gòu),在轉(zhuǎn)發(fā)消息節(jié)點作惡情況下保證消息仍然能正確傳輸。
BP神經(jīng)網(wǎng)絡(luò)[18-19]作為深度學(xué)習(xí)的核心,其作用是根據(jù)前向輸出計算誤差,從而根據(jù)誤差來進行反向傳播調(diào)整神經(jīng)網(wǎng)絡(luò)中各指標的權(quán)值。本文利用BP神經(jīng)網(wǎng)絡(luò)來訓(xùn)練節(jié)點信譽值評價指標的權(quán)重,以得到更為精確的節(jié)點信譽值。
節(jié)點的信譽是綜合共識過程中節(jié)點的各項表現(xiàn)所得出的一個分數(shù),是對節(jié)點參與網(wǎng)絡(luò)過程中的全面考察。普通的線性函數(shù)不能較好地賦予節(jié)點特征相應(yīng)的權(quán)重。對于節(jié)點的信譽評估,本文根據(jù)節(jié)點在網(wǎng)絡(luò)中運行的實際情況,首先構(gòu)建了動態(tài)特征向量,分別由節(jié)點的在線時間、參與響應(yīng)的時間、節(jié)點工作量和節(jié)點響應(yīng)類型等特征構(gòu)成,具體見表2。該動態(tài)特征向量是由不同的特征構(gòu)成,在網(wǎng)絡(luò)的整個運行過程中,向量中的特征權(quán)重會進行調(diào)整。在神經(jīng)網(wǎng)絡(luò)訓(xùn)練之初,每個特征的權(quán)重隨機給出,后期學(xué)習(xí)器通過樣本學(xué)習(xí)會不斷調(diào)整每個特征的權(quán)重。
表2 節(jié)點信譽評估特征Table 2 Characteristics of node reputation evaluation
其中E_Tx、C_ETx、Height為離散值,其余為連續(xù)值。本文設(shè)計5層BP神經(jīng)網(wǎng)絡(luò)模型,如圖2所示。輸入層由表2中的7個特征值組成,三個隱藏層均采用1 000個神經(jīng)單元,損失函數(shù)采用均方誤差,輸出層得到[0,1]之間的信譽值。每個節(jié)點每一輪次的信譽值計算公式如下所示:
圖2 五層神經(jīng)網(wǎng)絡(luò)模型Fig.2 Five-layer neural network model
其中,表示節(jié)點i在第j輪次的信譽值(*)表示根據(jù)神經(jīng)網(wǎng)絡(luò)計算出來的第i個節(jié)點第j輪信譽值,Xi
j為第i個節(jié)點第j輪的特征向量,表示為{On_Time,D_AFT,TPS,C_ETx,H_Rep,E_Tx,Height}。α表示一個權(quán)重值,其取值范圍為[0,1],默認為0.5。γ為懲罰系數(shù),其取值范圍為(0,1],默認為0.01,h表示該節(jié)點所在高度,其初值為1 和2,leader 節(jié)點所在高度為1,其余從節(jié)點高度為2,后續(xù)h的值會進行自適應(yīng)調(diào)整,將在3.2節(jié)中介紹,β表示節(jié)點的作惡次數(shù)。
當節(jié)點前一輪信譽值大于等于0且無作惡行為時,其信譽值由其前一輪的信譽值和當前這輪的信譽值加權(quán)平均得到;當節(jié)點的信譽值上一輪大于0時有作惡行為,其信譽值為前一輪信譽值乘以h的倒數(shù)再取反,h越大節(jié)點作惡對系統(tǒng)影響越嚴重,故懲罰力度就越大;當節(jié)點前一輪的信譽值小于0,其計算公式為前一輪的信譽值加上γ倍的e-βh,很明顯,在γ確定的情況下,節(jié)點作惡次數(shù)越多,所在高度越大,信譽值增長越緩慢。
當節(jié)點的信譽值得到后,對節(jié)點信譽值進行排序,為了增加leader節(jié)點選取的安全性,對于信譽值排序在前10%的節(jié)點采取可驗證隨機驗證函數(shù)(verifiable random function,VRF)挑選一個作為leader 節(jié)點,其余為備份節(jié)點,剩下90%的節(jié)點作為從節(jié)點,備份節(jié)點和從節(jié)點作用將在后續(xù)介紹。
為了衡量網(wǎng)絡(luò)中節(jié)點信譽值的穩(wěn)定情況,采用信息熵來度量,信息熵的計算公式如下所示:
H(P)為信息熵,Pi為節(jié)點i是惡意節(jié)點的概率,根據(jù)公式(2),當節(jié)點為惡意節(jié)點的概率越大或者越不可能發(fā)生,其對應(yīng)的熵就會越小;而發(fā)生的概率越接近0.5,所對應(yīng)的信息熵也就越大,所以熵可以反映一個隨機事件的穩(wěn)定性。
本文設(shè)計一種可變叉度的樹型通信拓撲,如圖3所示。樹狀可以從上往下看成串行,但是同一層兩節(jié)點之間往子節(jié)點或往父節(jié)點進行消息傳遞都是并行的,而消息串行傳遞的次數(shù)和樹的高度成正相關(guān),為2×lbn,當節(jié)點數(shù)量越大,消息串行次數(shù)遠低于星型拓撲的n次。圖中,由處于樹根的節(jié)點向其子節(jié)點發(fā)送交易信息,而子節(jié)點向其父節(jié)點發(fā)送確認交易信息。使用可變叉度的樹型拓撲基于兩個原因,首先較小叉度的樹型拓撲,如典型的二叉樹結(jié)構(gòu),會造成通信樹的高度較高,一旦處于較高層次的節(jié)點作惡,將會對系統(tǒng)造成較大影響。其次采用較大叉度的樹型拓撲,每個節(jié)點將會承擔較多的交易消息發(fā)送和驗證消息接收的工作,節(jié)點的處理能力是瓶頸,典型的如HotStuff的星型拓撲結(jié)構(gòu)。基于上述原因,本文提出根據(jù)所有節(jié)點的信譽值來動態(tài)調(diào)整樹的叉度,如果所有節(jié)點的信譽值趨向穩(wěn)定,并且在設(shè)定的閾值以上,認為節(jié)點高可信,那么樹的叉度會減小,最小降至二叉樹結(jié)構(gòu)。反之,節(jié)點信譽值極不穩(wěn)定或者不可信,那么樹的叉度將會增大,最大形成星型拓撲結(jié)構(gòu),在出現(xiàn)惡意節(jié)點時可以以較小代價剔除惡意節(jié)點。
圖3 可變叉度的樹型通信拓撲Fig.3 Tree communication topology with variable fork degree
可變叉度樹型通信結(jié)構(gòu)調(diào)整如算法1 所示。首先輸入隨機種子,將所有的特征向量送入公式(1)計算得到節(jié)點信譽值,并按照信譽值大小和VRF 對節(jié)點進行排序,得到排序列表。其次利用公式(2)計算得到當前信譽值的信息熵和均值,設(shè)置節(jié)點信譽值閾值T為0.5,高于0.5 以上則認為節(jié)點可信程度比較高,同時設(shè)置信息熵閾值E1、E2、E3、E4為0.2、0.4、0.6、0.8,信息熵越高則認為信譽值的分布不穩(wěn)定,信息熵越低則認為分布越穩(wěn)定,按照信譽值均值和信息熵來選擇叉度。
算法1 通信結(jié)構(gòu)調(diào)整
在完成了節(jié)點信譽值計算和通信拓撲的構(gòu)建后,設(shè)計ACT-BFT共識機制的共識過程,如算法2所示。
算法2 共識過程
首先初始化共識結(jié)果標志為false,按照叉度構(gòu)建樹型通信結(jié)構(gòu)編碼;其次從排序列表中選擇節(jié)點成為領(lǐng)導(dǎo)節(jié)點、從節(jié)點與備份節(jié)點,規(guī)則如下:
(1)對于信譽值排名前10%的節(jié)點中隨機選擇一個節(jié)點作為leader節(jié)點,剩余的節(jié)點為備份節(jié)點。
(2)剩余的90%節(jié)點為從節(jié)點。
接著,leader節(jié)點進行廣播交易消息,備份節(jié)點組對其進行監(jiān)聽,從節(jié)點開始驗證消息的合法性,其中可能會遇到節(jié)點宕機、作惡情況,按照如下規(guī)則進行惡意節(jié)點剔除:
(1)當節(jié)點編號小于2n/3 時,在備份節(jié)點中選擇一個節(jié)點直接替換掉該節(jié)點。
(2)如節(jié)點是葉子節(jié)點則直接剔除。
這樣做的原因在于葉子結(jié)點作惡所影響的節(jié)點較少,所以直接刪除即可,而對于編號小于2n/3時,直接刪除則需節(jié)點進行局部重新編排,所以使用替換的方式更為合適。
剔除惡意節(jié)點的示意圖如圖4所示。
圖4 剔除惡意節(jié)點Fig.4 Eliminate malicious nodes
最后,在固定時間內(nèi)收集返回驗證消息節(jié)點的信譽值,如果信譽值相加超過總信譽值的2/3,認為是共識成功。固定時間設(shè)為3 s,超過時間則進行新一輪的廣播與交易驗證。
為了測試本文提出的ACT-BFT 共識機制的性能,設(shè)計了若干個仿真實驗。實驗環(huán)境選用的操作系統(tǒng)為centos,節(jié)點容器docker,編程語言python,框架pytorch和flask。使用python 與pytorch 編寫共識算法,使用flask編寫web程序接口,并利用docker容器裝載web程序模擬節(jié)點,使用阿里云服務(wù)器來模擬多機多節(jié)點壓力測試的仿真實驗,采用siege 進行壓力實驗測試與吞吐量。使用阿里云服務(wù)器集群數(shù)據(jù)集作為神經(jīng)網(wǎng)絡(luò)訓(xùn)練集,學(xué)習(xí)率為1E-3。本章首先對算法中涉及到的參數(shù)進行實驗說明,其次對算法的性能測試和安全性進行分析,最后將本文方法與相似算法進行性能比對分析。
(1)信譽值計算公式中的參數(shù)設(shè)置
這里,討論信譽值計算公式中α和γ的取值。首先設(shè)置生成不同數(shù)量的區(qū)塊情況下,測試α對信譽值增長的影響。其結(jié)果如圖5 所示,從圖中可以得出α越大,其信譽就越低,當α為1 時,由公式(1)可知,當前節(jié)點的信譽值為上一輪的信譽值,所以其值不變。而當α為0時,當前節(jié)點的信譽值則為神經(jīng)網(wǎng)絡(luò)輸出值。當α為0.5和0.8時,信譽值的增長曲線相較于其他曲線較為光滑,代表信譽值的評估較為穩(wěn)定。本文在計算節(jié)點信譽值時,希望當前節(jié)點的信譽值由上一輪的信譽值和當前神經(jīng)網(wǎng)絡(luò)輸出值共同決定,并且權(quán)重相同,所以本文采用0.5為默認值。
圖5 參數(shù)α 對信譽值的影響Fig.5 Effect of parameter α on reputation value
公式(1)中參數(shù)γ的目的是為了控制被懲罰后節(jié)點信譽值的增長速率,本文設(shè)置了一個節(jié)點的信譽值為-0.5,作惡次數(shù)與高度都為1 的節(jié)點。參數(shù)γ對其信譽值影響如圖6所示,從圖中可以看出,參數(shù)γ越大,信譽值從負數(shù)到正數(shù)的速率就會越快,當γ為0.01 時,惡意節(jié)點的信譽值增長較為緩慢,很難在短期之內(nèi)參與現(xiàn)有的共識,所以γ設(shè)置為0.01。
圖6 參數(shù)γ 對信譽值的影響Fig.6 Effect of parameter γ on reputation value
(2)信息熵區(qū)間與閾值設(shè)置
本文設(shè)置信息熵區(qū)間閾值為等分和純隨機劃分兩種形式,目的比較在不同的節(jié)點數(shù)量下,消息接受率的大小,消息接受率為每秒接受回復(fù)消息數(shù)量除以每秒發(fā)送消息數(shù)量的百分比,實驗結(jié)果如圖7所示。在圖7(a)中可以看出,在信息熵不劃分區(qū)間時算法的消息接受率隨著節(jié)點數(shù)量的增加,呈線性急速下降的趨勢,而在劃分之后,總體來說消息接受率隨著節(jié)點數(shù)量增大,呈略微下降趨勢,從圖7(b)~圖7(f)中可以看出,隨機選取信譽熵區(qū)間閾值方式的消息接受率明顯小于區(qū)間閾值等分的情況。
圖7 信息熵劃分與閾值設(shè)置Fig.7 Information entropy division and threshold setting
接著從區(qū)間個數(shù)的角度來看,在個數(shù)小于4的區(qū)間中,消息接受率低于大于等于4的區(qū)間,而區(qū)間數(shù)大于4之后的消息接受率和區(qū)間數(shù)為4 的差距較小。造成上述現(xiàn)象的原因,當不劃分區(qū)間的時,算法成星型拓撲進行通信,隨著節(jié)點數(shù)量的增多,節(jié)點達到性能瓶頸,消息接受率在下降,而從實驗可以得出閾值隨機增加了調(diào)整拓撲的不確定性,從而導(dǎo)致消息接受率下降速率大于閾值等分的情況。隨著區(qū)間數(shù)增多,算法的接受率下降的就會越慢,而區(qū)間數(shù)為4,下降速率已經(jīng)較小,故本文采用區(qū)間數(shù)為4。
另外,從圖7 中可以看出,采用閾值等分的方式來進行劃分信譽值的熵的方法,消息接受率普遍高于隨機劃分方法,故本文將閾值設(shè)置為0.2、0.4、0.6、0.8。
(3)神經(jīng)網(wǎng)絡(luò)性能比較
本文中節(jié)點信譽值評估的核心為神經(jīng)網(wǎng)絡(luò),本文測試了BP神經(jīng)網(wǎng)絡(luò)在不同層數(shù)下的訓(xùn)練結(jié)果,結(jié)果如圖8所示,在層數(shù)為三與四時神經(jīng)網(wǎng)絡(luò)的loss下降曲線不平滑,而在層數(shù)為五與六時的神經(jīng)網(wǎng)絡(luò)的loss下降曲線較為平滑,而層數(shù)為五與六神經(jīng)網(wǎng)絡(luò)的loss的最終值相對三與四層而言較小,而五與六層的神經(jīng)網(wǎng)絡(luò)之間的loss差距較小,只相差0.002,考慮到六層的神經(jīng)網(wǎng)絡(luò)訓(xùn)練參數(shù)大于五層的神經(jīng)網(wǎng)絡(luò),所消耗的時間會增多,所以本文信譽評估公式采用五層神經(jīng)網(wǎng)絡(luò)。
圖8 神經(jīng)網(wǎng)絡(luò)不同層次的性能比較Fig.8 Performance comparison of neural networks at different levels
(4)最大等待時間
測試了交易數(shù)據(jù)的接收率在不同的等待時間的結(jié)果,結(jié)果如圖9所示。從圖9可以看出,隨著等待的時間越小,消息接受率就越小,而3 s等待時間的算法消息接受率可以接近1,所以本文采用3 s。造成上述的原因是因為,隨著節(jié)點數(shù)量的增多,簽名的收集量與消息的傳播量均會增多,從而導(dǎo)致消息的接受延遲。
圖9 最大等待時間的消息接受率Fig.9 Message acceptance rate of maximum waiting time
本文設(shè)置并發(fā)量為每秒300 筆,測試本文與其他BFT 類相關(guān)算法之間的性能,其主要測試兩個方面:算法的吞吐量和時延。
算法吞吐量測試結(jié)果如圖10所示。從圖10可以得出,除本文算法外,其余算法的TPS 隨著節(jié)點增多都成下降趨勢,其中文獻[13]與PBFT 算法的TPS 下降趨勢最為明顯,在節(jié)點數(shù)量為100 之后,TPS 急劇下降,而文獻[14]的TPS略高于HotStuff。算法時延測試結(jié)果如圖11所示,從圖中可以看出,文獻[13]與PBFT算法的時延上升趨勢最為明顯,尤其在節(jié)點數(shù)量為100 之后,而文獻[14]的算法時延略低于HotStuff,本文算法的時延優(yōu)于其余算法。
圖10 算法吞吐量測試結(jié)果Fig.10 Test results of algorithm throughput
圖11 算法時延測試結(jié)果Fig.11 Test results of algorithm delay
造成上述現(xiàn)象的原因是因為,傳統(tǒng)PBFT 隨著節(jié)點數(shù)量的增多會造成通信量的急劇增多,從而導(dǎo)致TPS急劇下降與時延上升,文獻[13]是基于PBFT實現(xiàn),只修改了leader節(jié)點的選舉方式,并無性能上的優(yōu)化。HotStuff的TPS下降與時延的上升是因為其采用星型拓撲,這種通信拓撲結(jié)構(gòu)存在硬件資源的瓶頸限制。文獻[14]雖然將節(jié)點按照屬性值劃分為不同的BFT共識小組,通過縮小通信規(guī)模的模式減小消息的傳播數(shù)量,然而這種方式治標不治本,隨著節(jié)點規(guī)模增大,小組成員增多,吞吐量必然下降,時延也會相應(yīng)增長。而本文采用樹狀進行通信,有效地降低了通信的時間復(fù)雜度,節(jié)點之間的通信規(guī)模縮小,解決了硬件資源的瓶頸限制,所以TPS 無明顯降低,時延也無明顯增長。
對于聯(lián)盟鏈場景下BFT 類算法本身需要考慮的問題有兩點:一是算法的活性,在本文可認為leader 節(jié)點受到攻擊、宕機或作惡,從而導(dǎo)致leader進行連續(xù)切換,系統(tǒng)是否仍然能正常運行。二是一致性,除leader外其余節(jié)點故意作惡,如發(fā)送惡意消息,拒絕服務(wù)攻擊相應(yīng)等行為,系統(tǒng)能否及時發(fā)現(xiàn)和調(diào)整節(jié)點,確保數(shù)據(jù)的一致性。所以本文將會從以下兩種角度來分析本文算法的安全性,分別是leader 節(jié)點連續(xù)切換時的吞吐量、在節(jié)點發(fā)送惡意消息以及拒絕服務(wù)情況下,惡意節(jié)點的信譽值變化以及叉度的變化。
(1)leader節(jié)點連續(xù)切換
本文設(shè)置100 個節(jié)點規(guī)模下,測試在leader 節(jié)點連續(xù)切換的情況下各個共識算法吞吐量的穩(wěn)定性,實驗結(jié)果如圖12所示。從圖12中可以看出,五種算法在leader節(jié)點連續(xù)切換情況下,吞吐量出現(xiàn)不穩(wěn)定現(xiàn)象,其中本文算法吞吐量變化幅度最小、HotStuff次之、文獻[14]再次之、PBFT變化幅度最大,說明本文算法能在leader節(jié)點變化時保持系統(tǒng)性能的穩(wěn)定。
圖12 leader連續(xù)切換測試結(jié)果Fig.12 Test results of leader continuous switching
(2)惡意行為的節(jié)點信譽值變化
本文測試擁有不同屬性值的四個節(jié)點node1 到node4 的信譽值變化,設(shè)置node1 與node2 分別保持較好與中等的特征屬性值,而node3 保持較為中等屬值(近似node2 節(jié)點屬性值)轉(zhuǎn)為較好屬性值(近似node1節(jié)點屬性值),而node4 設(shè)置為惡意節(jié)點并在第四輪開始拒絕服務(wù),并且為第四層節(jié)點,其信譽值變化如圖13所示。
圖13 節(jié)點信譽變化曲線Fig.13 Change curve of node reputation
從圖13 中可以看出,node1 與node2 的信譽值都無明顯變化,而node3 的信譽值在緩慢增長,而在第四輪中node4發(fā)送惡意信息,其信譽值變化為-3.2左右,后面則緩慢開始增長。出現(xiàn)信譽值變化穩(wěn)定的原因是因為神經(jīng)網(wǎng)絡(luò)預(yù)測信譽值的方式精度很高,相似的特征屬性值帶來的信譽值結(jié)果都近似相同,而對良好的特征屬性的節(jié)點都會給予相應(yīng)良好的分數(shù),加上考慮上一輪的信譽變化,所以信譽值變化都不會明顯,具有較好的穩(wěn)定性。而對于惡意節(jié)點的信譽值計算,其信譽值直接變化為前一輪信譽值乘以所在層數(shù)的相反數(shù),后續(xù)在作惡的次數(shù)增加情況下,使用指數(shù)函數(shù)來計算其后續(xù)的信譽值,其后續(xù)的信譽增長率近似于0,而信譽值小于0的節(jié)點將不具有參與共識的權(quán)利?;诖耍茏畲蟪潭鹊亟o予作惡節(jié)點懲罰,排除節(jié)點作惡的概率。
本文實驗設(shè)置100個節(jié)點進行測試,節(jié)點信譽值的信息熵與叉度的對應(yīng)關(guān)系如圖14所示。
圖14 叉度變化曲線Fig.14 Change curve of fork
從圖14 可以看出,在信息熵較小的時候整個算法選擇叉度都較小,其中最低為2,而隨著信息熵的增大,其叉度也慢慢增大,叉度在隨著區(qū)間的增長都在逐級遞增,最后叉度最高為100,也就是變換為星型拓撲的方式,造成上述的原因是因為在算法1 中定義了四個區(qū)間,信息熵是反映隨機事件的穩(wěn)定性的度量,所以隨著熵的增加,不穩(wěn)定也會增加,根據(jù)算法1的定義,相應(yīng)的叉度會隨著熵的變化而變化。當信息熵較小時,節(jié)點的信譽值趨向穩(wěn)定,通信拓撲為較小叉度的樹型結(jié)構(gòu),即使個別節(jié)點作惡也能快速利用備份節(jié)點替換,將作惡影響限制到最低。但信息熵較大時,節(jié)點的信譽值不穩(wěn)定,通信拓撲為較大叉度的樹型結(jié)構(gòu),較多節(jié)點作惡情況下,限制惡意節(jié)點將虛假消息進一步傳播到其他節(jié)點。
共識算法的比較通常從三個方面進行比較,分別是去中心化程度、安全性和性能[20]。其中去中心化程度為參與共識的節(jié)點規(guī)模,安全性主要是抗拜占庭能力,leader 節(jié)點的連續(xù)切換的穩(wěn)定性,性能主要考量算法活性、吞吐量、通信的時間復(fù)雜度等因素。本文方法與現(xiàn)有相似文獻進行對比的結(jié)果如表3所示。
表3 與現(xiàn)有文獻的比較結(jié)果Table 3 Comparison with existing literature
(1)擴展性
在擴展性方面,文獻[3]將擴展性分為三種情況,第一種情況為節(jié)點性能因節(jié)點規(guī)模的增加而急劇減小則為差,第二種情況為通過減小共識節(jié)點規(guī)模的方式以提升性能則為中,第三種情況隨著節(jié)點規(guī)模的增大,性能并無多大影響則為高。文獻[11]采用聚集簽名的方式,這樣使得驗證規(guī)模大大縮小,從而使得擴展性變高,文獻[14]通過節(jié)點的屬性值劃分不同的BFT小組,從小組內(nèi)挑選節(jié)點進行共識,使得通信規(guī)模減小,擴展性得到提高,文獻[12]與文獻[13]都是基于傳統(tǒng)的BFT,所以可擴展性方面都無提升。
(2)leader節(jié)點選取方式
文獻[11]采用試圖切換的方式來選舉,這種方式不能保證leader 節(jié)點是否為惡意節(jié)點,所以安全性較低,而文獻[12]、文獻[13]與文獻[14]雖然使用了信譽模型作為leader節(jié)點的選舉方式,但是文獻[12]會出現(xiàn)leader寡頭的現(xiàn)象,文獻[13]與文獻[14]的選取方式都是一種線性的方式,相較于非線性模型而言,無法賦予節(jié)點特征相應(yīng)的權(quán)重,所以leader節(jié)點的方式安全性為中。
(3)容錯率
文獻[11]、文獻[12]與文獻[14]都是基于BFT最大容錯惡意節(jié)點為參與節(jié)點共識節(jié)點總數(shù)的33%,不同的是文獻[12]的閾值為總信譽值的33%,文獻[13]采用一種新的審查員機制將閾值控制在49%。
(4)去中心化程度
文獻[13]與文獻[12]都是基于BFT 上而來,所以通信拓撲限制了其性能,理論上性能最優(yōu)節(jié)點數(shù)量為100節(jié)點左右,直接參與共識節(jié)點規(guī)模大小固定,所以去中心化程度為低,而文獻[11]采用了星型拓撲,且采用流水型區(qū)塊,解決了隨著參與規(guī)模節(jié)點的數(shù)量增多性能急劇下降的問題,所以去中心化程度較高,而文獻[14]采用特定的特征節(jié)點直接參與共識,本質(zhì)上與傳統(tǒng)PBFT沒有不同,所以去中心化程度也較低。
(5)穩(wěn)定性
Leader 連續(xù)切換實驗表明,文獻[12]與文獻[13]都是基于傳統(tǒng)的BFT,所以leader 連續(xù)切換整體性能會大受影響,而文獻[11]采用流水線形式的區(qū)塊拓撲結(jié)構(gòu),區(qū)塊之間的生成沒有強制性的先后關(guān)系,另外共識過程與節(jié)點切換合二為一,所以穩(wěn)定性較好,文獻[14]采用高信譽值節(jié)點組進行替代低信譽值節(jié)點的方式,保證整體的穩(wěn)定性。
(6)通信的時間復(fù)雜度
文獻[11]、文獻[12]與文獻[14]都采用點對點的傳播方式,所以通信復(fù)雜較高,為O(n2),而文獻[11]采用星型拓撲結(jié)構(gòu),所以通信的時間復(fù)雜度為O(n)。
本文提出算法與上述文獻相比,使用了樹狀通信的方式,且只需一次傳播,一次收集,即可確認交易是否已經(jīng)上鏈,這減少了通信次數(shù)與通信量。樹狀通信拓撲使得通信的時間復(fù)雜度降低,挑選信譽值較高的節(jié)點為通信拓撲中高度較高的節(jié)點,配合自適應(yīng)的叉度調(diào)整方式進一步保障了安全性與穩(wěn)定性,且通信規(guī)模不受到節(jié)點規(guī)模大小的限制。而文獻[11]存在明顯性能瓶頸,本文方法具有更好的普適性。
近年來,聯(lián)盟鏈架構(gòu)成為區(qū)塊鏈落地應(yīng)用的首選,其中聯(lián)盟鏈共識算法是影響系統(tǒng)性能的關(guān)鍵因素。目前,大部分聯(lián)盟鏈共識算法基于拜占庭容錯實現(xiàn),但現(xiàn)有算法仍然存在著記賬節(jié)點選取安全性差和數(shù)據(jù)同步過程通信的時間復(fù)雜度高的問題。針對上述問題,本文提出一種自適應(yīng)通信拓撲的拜占庭容錯共識機制,根據(jù)BP 神經(jīng)網(wǎng)絡(luò)更加精確地獲取節(jié)點的信譽值,并根據(jù)節(jié)點信譽值隨機挑選記賬節(jié)點。同時,根據(jù)節(jié)點的信譽值構(gòu)建m叉樹的通信拓撲,有效降低了傳統(tǒng)P2P拓撲中的通信的時間復(fù)雜度,并減小了節(jié)點作惡帶來的負面影響。仿真實驗結(jié)果證明了本文的方法具有較高的吞吐量和低時延,同時具有較好的安全性。
下一步,首先可以繼續(xù)對本文提出的機制進行改進,如可在如下兩個方面值得深入研究:(1)修改底層拓撲,將現(xiàn)有的鏈式結(jié)構(gòu)調(diào)整為有向無環(huán)圖(directed acyclic graph,DAG)[21],由于DAG 具有高并發(fā)的并行特性,可進一步提高系統(tǒng)的吞吐量;(2)利用分而治之的思想將區(qū)塊鏈網(wǎng)絡(luò)進行分組分區(qū),縮小網(wǎng)絡(luò)的通信規(guī)模,使得共識速度提升。其次可以探索將本文提出的ACT-BFT機制應(yīng)用到其他分布式系統(tǒng)領(lǐng)域,如物聯(lián)網(wǎng)、無線傳感器網(wǎng)絡(luò)和車載自組織網(wǎng)絡(luò)等。