韓 璐, 翟健宏, 楊 茹
(哈爾濱工業(yè)大學(xué)網(wǎng)絡(luò)空間安全學(xué)院, 哈爾濱 150001)
共識(shí)機(jī)制[1]作為區(qū)塊鏈[2]的核心技術(shù),能夠在缺乏中央控制的網(wǎng)絡(luò)中,通過自組織、大規(guī)模協(xié)作的方式實(shí)現(xiàn)賬本的分布式一致性,也是區(qū)塊鏈通過技術(shù)手段而非中心化機(jī)構(gòu)構(gòu)建去中心化“信任”網(wǎng)絡(luò)的關(guān)鍵算法。 良好的共識(shí)算法[3]有助于提高區(qū)塊鏈系統(tǒng)的性能效率,對(duì)維護(hù)系統(tǒng)的穩(wěn)定運(yùn)行和節(jié)點(diǎn)相互信任起著重要作用。 然而,現(xiàn)有的共識(shí)算法各有優(yōu)劣,普遍存在擴(kuò)展性差、交易確認(rèn)時(shí)間長(zhǎng)、應(yīng)用場(chǎng)景受限等問題,成為制約區(qū)塊鏈項(xiàng)目落地的主要因素[4]。
實(shí)用拜占庭共識(shí)算法(Practical Byzantine Fault Tolerance,PBFT)[5]作為目前聯(lián)盟區(qū)塊鏈?zhǔn)褂幂^多的共識(shí)算法,不僅實(shí)現(xiàn)了節(jié)點(diǎn)之間狀態(tài)的信任,而且很大程度上降低了系統(tǒng)因拜占庭錯(cuò)誤產(chǎn)生的巨大開銷[6],但存在對(duì)帶寬要求較高,節(jié)點(diǎn)數(shù)量固定等缺陷。 本課題對(duì)PBFT 算法在fabric 聯(lián)盟鏈[7]中的實(shí)現(xiàn)進(jìn)行研究,利用PBFT 算法的特點(diǎn),保證了網(wǎng)絡(luò)中節(jié)點(diǎn)的一致性。 通過部署鏈碼在docker[8]環(huán)境中對(duì)算法的性能進(jìn)行檢測(cè),并根據(jù)檢測(cè)結(jié)果對(duì)PBFT 算法進(jìn)行改進(jìn)。
本文對(duì)區(qū)塊鏈防作弊技術(shù)進(jìn)行研究,提出了一種基于節(jié)點(diǎn)可信度的NRPBFT(node-reliabilitybased PBFT consensus algorithm)共識(shí)算法,主要貢獻(xiàn)如下:
(1)提出了NRPBFT 算法,采用選舉集群的方式,將所有的節(jié)點(diǎn)分成普通節(jié)點(diǎn)和共識(shí)節(jié)點(diǎn)。
(2)利用PBFT 算法的特性實(shí)現(xiàn)了共識(shí)過程的防作弊,同時(shí)優(yōu)化了算法的性能,提高了算法的效率。
(3)利用20 個(gè)端口模擬區(qū)塊鏈節(jié)點(diǎn),利用tcp實(shí)現(xiàn)數(shù)據(jù)在端口之間的同步,通過實(shí)驗(yàn)驗(yàn)證改進(jìn)后的共識(shí)算法的可行性。
本文的組織結(jié)構(gòu)如下:第1 節(jié)介紹了NRPBFT算法方案;第2 節(jié)闡述了代碼優(yōu)化的過程及結(jié)果;第3 節(jié)結(jié)合實(shí)驗(yàn)說(shuō)明了該方案的可行性與高效性;第4節(jié)總結(jié)了全文,并討論了后續(xù)的工作與改進(jìn)之處。
針對(duì)PBFT 算法存在問題的分析,結(jié)合調(diào)研的結(jié)果和文獻(xiàn)資料匯總,本節(jié)提出了一種NRPBFT 算法方案。 這個(gè)方案主要是從縮小網(wǎng)絡(luò)的規(guī)模的角度出發(fā),利用選舉集群的方式,將所有的節(jié)點(diǎn)分成普通節(jié)點(diǎn)和共識(shí)節(jié)點(diǎn)。 利用節(jié)點(diǎn)可信度評(píng)估公式對(duì)節(jié)點(diǎn)的可信度進(jìn)行評(píng)估, 并對(duì)節(jié)點(diǎn)的可信度進(jìn)行排序,選可信度最高的前p個(gè)節(jié)點(diǎn)作為共識(shí)集群(2f≤p <3f,f表示網(wǎng)絡(luò)中惡意節(jié)點(diǎn)的數(shù)量)。 同時(shí),對(duì)主節(jié)點(diǎn)的選舉做了一些改動(dòng),選取可信度最高的節(jié)點(diǎn)作為主節(jié)點(diǎn),大大降低了惡意節(jié)點(diǎn)成為主節(jié)點(diǎn)的概率。主要從以下2 點(diǎn)進(jìn)行改進(jìn):
(1)根據(jù)可信度將網(wǎng)絡(luò)中的節(jié)點(diǎn)分成2 種角色。普通節(jié)點(diǎn)只負(fù)責(zé)完成交易,共識(shí)節(jié)點(diǎn)集群中可信度最高的節(jié)點(diǎn)會(huì)成為主節(jié)點(diǎn)。 主節(jié)點(diǎn)接收客戶端的消息,在有p個(gè)共識(shí)節(jié)點(diǎn)的共識(shí)集群中進(jìn)行廣播,對(duì)消息進(jìn)行簽名排序后,廣播給其他所有節(jié)點(diǎn)。 節(jié)點(diǎn)收到至少p/2 個(gè)相同的消息,認(rèn)為這個(gè)信息正確,寫入內(nèi)存,并將確認(rèn)信息回復(fù)給主節(jié)點(diǎn)。
(2) 采用可信度評(píng)估的方式來(lái)選舉共識(shí)集群和主節(jié)點(diǎn)。 在每次共識(shí)結(jié)束后,都需要根據(jù)可信度評(píng)估算法重新計(jì)算每個(gè)節(jié)點(diǎn)的可信度,這樣就實(shí)現(xiàn)了節(jié)點(diǎn)動(dòng)態(tài)加入或者退出共識(shí)集群。 對(duì)于共識(shí)集群中作惡的節(jié)點(diǎn),研究在評(píng)估的時(shí)候采取相應(yīng)的懲罰機(jī)制,加上懲罰系數(shù),降低其可信度評(píng)估結(jié)果。 這種方式不僅能降低主節(jié)點(diǎn)隨意選取帶來(lái)的風(fēng)險(xiǎn),也能保證系統(tǒng)的動(dòng)態(tài)性。
網(wǎng)絡(luò)拓?fù)湓O(shè)計(jì)如圖1 所示。
圖1 改進(jìn)后PBFT 算法拓?fù)鋱DFig. 1 Topological diagram of the improved PBFT algorithm
(1)客戶端c將請(qǐng)求信息發(fā)送到主節(jié)點(diǎn),主節(jié)點(diǎn)驗(yàn)證,提取消息摘要并簽名后廣播給所有共識(shí)節(jié)點(diǎn),廣播的格式為<<PREPARE,n,S,D >,data >,其中PREPARE是命令名稱,代表信息處于的階段是主節(jié)點(diǎn)在共識(shí)集群中廣播信息階段,n是主節(jié)點(diǎn)為信息分配的序列號(hào),S是主節(jié)點(diǎn)的簽名,D是主節(jié)點(diǎn)提取的信息摘要,data是待共識(shí)信息。
(2) 認(rèn)證共識(shí)階段。 共識(shí)集群中的所有節(jié)點(diǎn)收到請(qǐng)求后,首先驗(yàn)證交易簽名和摘要信息,驗(yàn)證成功后將交易數(shù)據(jù)存儲(chǔ)到內(nèi)存中,對(duì)信息進(jìn)行簽名后,將信息廣播給所有的節(jié)點(diǎn), 廣播信息格式為<<AUTHENTICATION,credit_i,n,S,D >,data >, 其中AUTHENTICATION是這一階段的命令名稱,credit_i是節(jié)點(diǎn)的可信度的值。 信息廣播到所有節(jié)點(diǎn)后,進(jìn)入提交階段。 如果交易信息驗(yàn)證不成功,則認(rèn)為主節(jié)點(diǎn)可能出了問題,重新對(duì)主節(jié)點(diǎn)進(jìn)行選舉。
(3) 提交階段。 所有的節(jié)點(diǎn)都會(huì)收到多個(gè)由共識(shí)節(jié)點(diǎn)發(fā)來(lái)的信息,節(jié)點(diǎn)接收到信息后,對(duì)簽名和序列號(hào)進(jìn)行驗(yàn)證,有大于等于p/2 個(gè)信息驗(yàn)證成功后,將信息存儲(chǔ)到內(nèi)存中,并向主節(jié)點(diǎn)進(jìn)行提交。 信息提交的格式為<SUBMIT,n,S,D,i >,其中i是節(jié)點(diǎn)的編號(hào)。 主節(jié)點(diǎn)在一定時(shí)間內(nèi)接收到2f+1 個(gè)一致的信息,認(rèn)為提交階段完成,主節(jié)點(diǎn)將達(dá)成共識(shí)的信息發(fā)送給客戶端,完成共識(shí)。
算法的流程如圖2 所示。 NRPBFT 算法步驟具體如下。
圖2 改進(jìn)的PBFT 算法流程圖Fig. 2 Flow chart of improved PBFT algorithm
算法1 新PBFT 算法
輸入主節(jié)點(diǎn)編號(hào)N0,P個(gè)共識(shí)節(jié)點(diǎn)(N1-Np),n - p個(gè)普通節(jié)點(diǎn)(Np+1,Nn),節(jié)點(diǎn)可信度的值credit - i,客戶端發(fā)送的交易信息data
輸出:節(jié)點(diǎn)對(duì)客戶端的reply
1:for 主節(jié)點(diǎn)N0接收客戶端發(fā)送的交易信息data
2:N0提取消息摘要D,對(duì)D簽名得到S,將信息廣播給共識(shí)節(jié)點(diǎn),廣播信息格式為<<PREPARE,n,S,D >,data >,其中n是消息序列號(hào)
3:共識(shí)節(jié)點(diǎn)Np驗(yàn)證交易的簽名和摘要
4:if 簽名S和摘要D驗(yàn)證成功then
5: 共識(shí)節(jié)點(diǎn)Np將交易信息儲(chǔ)存到內(nèi)存中
6: 共識(shí)節(jié)點(diǎn)Np對(duì)交易信息進(jìn)行簽名,廣播給所有節(jié)點(diǎn), 廣播格式為<< AUTHENTICATION,credit_i,n,S,D >,data >
7:else then
8: 觸發(fā)主節(jié)點(diǎn)更換協(xié)議,按照可信度排序更換主節(jié)點(diǎn),重復(fù)步驟1
9: 普通節(jié)點(diǎn)Nn接收到共識(shí)節(jié)點(diǎn)Np的廣播信息,驗(yàn)證交易的簽名和摘要
10:if 節(jié)點(diǎn)有P/2 個(gè)簽名S和摘要D驗(yàn)證成功then
11: 普通節(jié)點(diǎn)Nn將交易信息儲(chǔ)存到內(nèi)存中
12: 向主節(jié)點(diǎn)N0發(fā)送確認(rèn)信息,信息提交的格式為<SUBMIT,n,S,D,i >,其中i是節(jié)點(diǎn)的編號(hào)
13:else then
14: 重新評(píng)估節(jié)點(diǎn)的可信度,重新選舉共識(shí)節(jié)點(diǎn)集群
15:if 主節(jié)點(diǎn)N0接收到2f+1 個(gè)一致的信息then
16: 主節(jié)點(diǎn)N0將確認(rèn)信息提交給客戶端
17: end
18: else then
19: 觸發(fā)主節(jié)點(diǎn)更換協(xié)議,按照可信度排序更換主節(jié)點(diǎn),重復(fù)步驟1
還要一值的是,這里的節(jié)點(diǎn)1 和節(jié)點(diǎn)2 均屬于共識(shí)節(jié)點(diǎn),節(jié)點(diǎn)3 屬于拜占庭節(jié)點(diǎn)。
節(jié)點(diǎn)可信度計(jì)算模塊是以往的研究中和研發(fā)團(tuán)隊(duì)一起提出的方法。 可信度是信任的量化表示,表示一個(gè)節(jié)點(diǎn)中數(shù)據(jù)可以被另一節(jié)點(diǎn)接受的信任程度。 可以通過節(jié)點(diǎn)自身的行為來(lái)判斷節(jié)點(diǎn)的可信度。
將生成一個(gè)區(qū)塊的時(shí)間定義為一個(gè)評(píng)審周期,其中評(píng)審內(nèi)容包括6 項(xiàng),節(jié)點(diǎn)每接收到一個(gè)區(qū)塊會(huì)動(dòng)態(tài)更新該表格中的礦工節(jié)點(diǎn)、該表格中的礦工節(jié)點(diǎn)、節(jié)點(diǎn)參與驗(yàn)證的區(qū)塊總數(shù)、節(jié)點(diǎn)正確驗(yàn)證的區(qū)塊數(shù)、節(jié)點(diǎn)最新打包區(qū)塊字段,每個(gè)周期結(jié)束后更新信任度和新的起始區(qū)塊字段,各參數(shù)設(shè)置見表1。
表1 模型參數(shù)設(shè)置Tab. 1 Model parameters settings
將表1 中各字段值帶入式(1)中進(jìn)行計(jì)算,檢驗(yàn)計(jì)算結(jié)果是否達(dá)到可信度閾值:
其中,表示第i個(gè)節(jié)點(diǎn)在當(dāng)前評(píng)審周期的可信度;τ表示在一個(gè)評(píng)審周期內(nèi)產(chǎn)生的區(qū)塊數(shù);ω表示第i個(gè)節(jié)點(diǎn)積極參與爭(zhēng)奪記賬權(quán)并投票的區(qū)塊數(shù)。 對(duì)于在該評(píng)審周期內(nèi)產(chǎn)生的第x個(gè)區(qū)塊,當(dāng)?shù)趇個(gè)節(jié)點(diǎn)正常參與投票時(shí),將νx設(shè)置為1,μx設(shè)置為0,否則νx設(shè)置為0,μx設(shè)置為1,σ是惡意投票對(duì)于節(jié)點(diǎn)可信度影響所占的比重,該值越大,懲罰權(quán)重越大。 研究可知,式(1) 主要用來(lái)衡量節(jié)點(diǎn)在當(dāng)前評(píng)審周期內(nèi)的表現(xiàn)情況。
由于式(1)基于logistics 模型[9]提出,而該模型在對(duì)數(shù)增長(zhǎng)期間函數(shù)值增長(zhǎng)較快,導(dǎo)致對(duì)數(shù)增長(zhǎng)期間節(jié)點(diǎn)信任度相較之前值偏高,因此使用式(2)進(jìn)行修正:
其中,trust(i)cur表示當(dāng)前周期的信任度,trust(i)pre表示上個(gè)周期的信任度。 通過λ來(lái)對(duì)當(dāng)前周期信任度計(jì)算進(jìn)行修正,添加節(jié)點(diǎn)信任歷史相關(guān)性,該參數(shù)可由用戶定義。 研究可知,修正方法主要是中和了該節(jié)點(diǎn)在上輪評(píng)審周期中的表現(xiàn)情況一旦某個(gè)節(jié)點(diǎn)出錯(cuò),則在下一輪對(duì)該節(jié)點(diǎn)可信度進(jìn)行評(píng)審的時(shí)候,惡意的節(jié)點(diǎn)會(huì)被乘以一個(gè)特別小的系數(shù)來(lái)降低下一輪評(píng)審中此節(jié)點(diǎn)的可信度。
本方案的核心特點(diǎn)在于實(shí)現(xiàn)了一個(gè)基于可信度的PBFT 算法優(yōu)化方案、即NRPBFT,該方案具有以下優(yōu)勢(shì):
(1)高可靠性:選可信度最高的前p個(gè)節(jié)點(diǎn)作為共識(shí)集群,在一定程度上保證了系統(tǒng)的安全性和可靠性。 研究中也對(duì)主節(jié)點(diǎn)的選舉做了一些改動(dòng),選取可信度最高的節(jié)點(diǎn)作為主節(jié)點(diǎn),大大降低了惡意節(jié)點(diǎn)成為主節(jié)點(diǎn)的概率。 從節(jié)點(diǎn)接收到主節(jié)點(diǎn)的廣播信息后,首先會(huì)對(duì)消息的簽名、消息的序號(hào)和消息的摘要進(jìn)行驗(yàn)證,3 個(gè)信息都驗(yàn)證通過后才能接收這個(gè)需要共識(shí)的內(nèi)容,這一過程也大大地保證了信息的可靠性和安全性。
(2)高可用性:原本的PBFT 算法在進(jìn)行共識(shí)的過程中需要經(jīng)過1 次單點(diǎn)全廣播和2 次全點(diǎn)全廣播,基于可信度的PBFT 優(yōu)化算法只需要經(jīng)過一次一對(duì)多的傳輸、一次多對(duì)一的傳輸及一次全點(diǎn)全廣播。 區(qū)塊鏈中節(jié)點(diǎn)與節(jié)點(diǎn)之間的傳輸過程消耗的資源非常多,優(yōu)化后的方法減少了節(jié)點(diǎn)與節(jié)點(diǎn)之間信息傳輸?shù)拇螖?shù),因此可以降低達(dá)成共識(shí)的時(shí)間且提升系統(tǒng)的性能。
(3)兼容性:本方案是對(duì)區(qū)塊鏈的共識(shí)算法進(jìn)行改進(jìn),共識(shí)算法是區(qū)塊鏈的核心技術(shù)之一,可以在以太坊中、聯(lián)盟鏈、或者其他區(qū)塊鏈平臺(tái)中直接進(jìn)行應(yīng)用。
本方案的缺點(diǎn)是由于主節(jié)點(diǎn)一方面要接收來(lái)自客戶端的信息,另一方面還要對(duì)節(jié)點(diǎn)共識(shí)的結(jié)果進(jìn)行統(tǒng)計(jì)并回復(fù)給客戶端,一旦節(jié)點(diǎn)數(shù)量非常大,主節(jié)點(diǎn)容易過載。 除此以外,如果主節(jié)點(diǎn)是惡意節(jié)點(diǎn),會(huì)對(duì)整個(gè)系統(tǒng)的共識(shí)結(jié)果造成重大的影響,但是由于主節(jié)點(diǎn)是整個(gè)網(wǎng)路中可信度最高的節(jié)點(diǎn),因此主節(jié)點(diǎn)是惡意節(jié)點(diǎn)的可能性大大降低。
本節(jié)以上一節(jié)提出的NRPBFT 算法方案為基礎(chǔ),描述了NRPBFT 算法的整體流程,給出了更詳細(xì)的設(shè)計(jì)方案,包括一些關(guān)鍵模塊的實(shí)現(xiàn)方法和代碼分析,同時(shí)介紹了Hyperledger Fabric 的搭建,以及編寫鏈碼驗(yàn)證算法改進(jìn)的結(jié)果。
NRPBFT 算法按照運(yùn)行過程可以分成2 部分。一部分是共識(shí)過程,另一部分是視圖更換過程。 一旦共識(shí)過程出現(xiàn)問題會(huì)立即觸發(fā)視圖更換過程。 對(duì)此擬展開研究分述如下。
(1)共識(shí)過程
①準(zhǔn)備階段。 這一步主要目的是讓客戶端知道哪個(gè)節(jié)點(diǎn)是主節(jié)點(diǎn)。 在交易請(qǐng)求階段,客戶端將交易發(fā)送給所有節(jié)點(diǎn),節(jié)點(diǎn)接收到交易信息后,驗(yàn)證簽名,驗(yàn)證成功后判斷交易是否為query 類型的交易,如果是,則執(zhí)行智能合約,查詢本地賬本的余額信息并返回結(jié)果,這個(gè)過程就結(jié)束了。 如果是deploy 或invoke 類型的請(qǐng)求交易,則需要利用共識(shí)機(jī)制來(lái)得到結(jié)果。 對(duì)于需要共識(shí)的交易,普通節(jié)點(diǎn)是無(wú)法處理的,只有主節(jié)點(diǎn)可以接收并進(jìn)行回復(fù),因此,在交易請(qǐng)求階段相當(dāng)于客戶端把需要共識(shí)的交易信息發(fā)送給了所有節(jié)點(diǎn),在驗(yàn)證階段,只有主節(jié)點(diǎn)能接收,也就是選出了主節(jié)點(diǎn)。 主節(jié)點(diǎn)接收到交易信息后,對(duì)信息進(jìn)行編號(hào),提取摘要并簽名后發(fā)送給共識(shí)集群中的節(jié)點(diǎn)進(jìn)行共識(shí),進(jìn)入認(rèn)證共識(shí)階段。準(zhǔn)備階段拓?fù)湟妶D3。
圖3 準(zhǔn)備階段拓?fù)鋱DFig. 3 Topology diagram of preparation phase
②認(rèn)證共識(shí)階段。 在認(rèn)證階段,共識(shí)集群中節(jié)點(diǎn)收到主節(jié)點(diǎn)發(fā)送的信息后,對(duì)信息的簽名、摘要、編號(hào)進(jìn)行驗(yàn)證,驗(yàn)證通過后放入內(nèi)存,對(duì)信息進(jìn)行簽名并打包生成提交報(bào)文,在整個(gè)網(wǎng)絡(luò)的節(jié)點(diǎn)中進(jìn)行廣播,進(jìn)入提交認(rèn)證階段。 在任何一個(gè)階段如果驗(yàn)證失敗或者接收信息超時(shí),則認(rèn)為主節(jié)點(diǎn)可能是惡意節(jié)點(diǎn),觸發(fā)視圖更換協(xié)議對(duì)主節(jié)點(diǎn)和共識(shí)集群中的節(jié)點(diǎn)進(jìn)行更換并重啟共識(shí)過程。 認(rèn)證共識(shí)階段拓?fù)湟妶D4。
圖4 認(rèn)證共識(shí)階段拓?fù)鋱DFig. 4 Topology diagram of authentication consensus phase
在提交認(rèn)證階段,共識(shí)節(jié)點(diǎn)將信息在整個(gè)網(wǎng)絡(luò)中進(jìn)行廣播,普通節(jié)點(diǎn)收到廣播信息后,對(duì)信息的簽名、摘要、視圖編號(hào)進(jìn)行驗(yàn)證,驗(yàn)證通過后放入內(nèi)存,一旦普通節(jié)點(diǎn)收到了p/2 個(gè)驗(yàn)證通過的提交認(rèn)證消息,生成提交報(bào)文,提交給主節(jié)點(diǎn),進(jìn)入確認(rèn)提交階段。 在任何一個(gè)階段如果驗(yàn)證失敗或者接收信息超時(shí),則認(rèn)為主節(jié)點(diǎn)可能是惡意節(jié)點(diǎn),觸發(fā)視圖更換協(xié)議對(duì)主節(jié)點(diǎn)和共識(shí)集群中的節(jié)點(diǎn)進(jìn)行更換并重啟共識(shí)過程。
③確認(rèn)提交階段。 確認(rèn)提交階段拓?fù)湟妶D5。
圖5 確認(rèn)提交階段拓?fù)鋱DFig. 5 Topology diagram of confirmation commit phase
(2)視圖更換過程。 觸發(fā)節(jié)點(diǎn)更換的條件主要有以下幾點(diǎn):
①過了指定時(shí)間,普通節(jié)點(diǎn)或者共識(shí)集群的節(jié)點(diǎn)未收到主節(jié)點(diǎn)的共識(shí)請(qǐng)求。
②信息的格式不合法。
③沒有在規(guī)定時(shí)間內(nèi)完成主節(jié)點(diǎn)更換。
④在共識(shí)過程中,多個(gè)節(jié)點(diǎn)的視圖編號(hào)是舊的編號(hào)或者簽名摘要驗(yàn)證失敗。
在NRPBFT 算法中,由原PBFT 算法根據(jù)節(jié)點(diǎn)編號(hào)順序選舉主節(jié)點(diǎn)改變?yōu)槔霉?jié)點(diǎn)的可信度來(lái)選擇主節(jié)點(diǎn),這種做法避免了主節(jié)點(diǎn)隨意選舉帶來(lái)的風(fēng)險(xiǎn),同時(shí)大大降低了主節(jié)點(diǎn)成為惡意節(jié)點(diǎn)的可能性。
在主節(jié)點(diǎn)更換階段,視圖編號(hào)自加1 作為新的視圖編號(hào),所有節(jié)點(diǎn)封裝ViewChange 報(bào)文,報(bào)文中封裝了各個(gè)節(jié)點(diǎn)的可信度和簽名,在網(wǎng)絡(luò)中進(jìn)行廣播,如圖6(a)所示。
圖6 視圖更換拓?fù)鋱DFig. 6 View replacement topology
節(jié)點(diǎn)接收到其他節(jié)點(diǎn)的廣播信息后,選出可信度最高的節(jié)點(diǎn)作為主節(jié)點(diǎn),如果2f+1 個(gè)節(jié)點(diǎn)選出的可信度最高的節(jié)點(diǎn)是同一個(gè),則認(rèn)為這個(gè)節(jié)點(diǎn)就是下一個(gè)主節(jié)點(diǎn)。 在這里,每個(gè)節(jié)點(diǎn)都會(huì)計(jì)算除了主節(jié)點(diǎn)外可信度最好的p個(gè)節(jié)點(diǎn),組成該視圖下的共識(shí)集群。 在主節(jié)點(diǎn)確認(rèn)階段,新的主節(jié)點(diǎn)封裝newView報(bào)文并簽名,在網(wǎng)絡(luò)中進(jìn)行廣播。 如此,新的主節(jié)點(diǎn)就更換完成,如圖6(b)所示,N2節(jié)點(diǎn)是可信度最高的節(jié)點(diǎn),就會(huì)被選舉為下一個(gè)主節(jié)點(diǎn),接下來(lái)重新進(jìn)行共識(shí)過程。
整個(gè)NRPBFT 算法的代碼各部分功能見表2。
表2 NRPBFT 各模塊功能表Tab. 2 Function table of each module of NRPBFT
下面對(duì)NRPBFT 算法的具體實(shí)現(xiàn)進(jìn)行描述,包括數(shù)據(jù)結(jié)構(gòu)的類型定義和相關(guān)的實(shí)現(xiàn),還有關(guān)鍵變量和關(guān)鍵函數(shù)的調(diào)用過程。
(1)數(shù)據(jù)結(jié)構(gòu)定義。 節(jié)點(diǎn)的定義如圖7 所示。其中,nodeID用來(lái)存儲(chǔ)屬于節(jié)點(diǎn)的編號(hào),addr用來(lái)存儲(chǔ)節(jié)點(diǎn)的 ip 地址+端口號(hào),rsaPrivKey和rsaPubKey分別存儲(chǔ)節(jié)點(diǎn)的公私鑰,credit存儲(chǔ)節(jié)點(diǎn)的可信度的值。
圖7 節(jié)點(diǎn)定義圖Fig. 7 Node definition graph
RPBFT 信息結(jié)構(gòu)的定義如圖8 所示。 其中,node存儲(chǔ)的是上述的節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)信息,sequenceID存儲(chǔ)的是交易的序號(hào),會(huì)隨著交易數(shù)量的增加而自增。Lock定義了一個(gè)鎖,在多線程操作的過程中可以保證獲取數(shù)據(jù)的一致性和準(zhǔn)確性。messagePool、prePareConfirmCount、commitConfirmCount分別存儲(chǔ)消息本身、準(zhǔn)備階段的消息和確認(rèn)消息。isCommitBordcast是用來(lái)判斷是否進(jìn)行過廣播的標(biāo)志位,isReply是用來(lái)判斷是否回復(fù)信息給主節(jié)點(diǎn)的標(biāo)志位。
圖8 RPBFT 信息結(jié)構(gòu)定義圖Fig. 8 RPBFT information structure definition diagram
(2)變量定義。 該部分介紹在代碼中定義的全局變量及其含義。 變量定義見表3。 由表3 可知,nodeCount定義了節(jié)點(diǎn)的數(shù)量,根據(jù)這個(gè)變量值,生成nodeCount個(gè)節(jié)點(diǎn)的公私鑰對(duì)。nodeCredit定義了共識(shí)集群節(jié)點(diǎn)的數(shù)量,在共識(shí)過程中也是根據(jù)這個(gè)值判斷是否收到了所有共識(shí)節(jié)點(diǎn)的消息。clientAddr定義了客戶端的監(jiān)聽地址,nodeTable和credit_nodeTable都是map類型的數(shù)據(jù),分別存儲(chǔ)節(jié)點(diǎn)和地址的鍵值對(duì)及共識(shí)集群中的節(jié)點(diǎn)和地址的鍵值對(duì)。primaryNode記錄主節(jié)點(diǎn)的id,記錄每一個(gè)視圖下主節(jié)點(diǎn)的id。localMessagePool是一個(gè)未定義的數(shù)組,用于存儲(chǔ)客戶端發(fā)送的消息。start和end分別記錄算法的開始時(shí)間和結(jié)束時(shí)間,二者作差便可以得到算法的運(yùn)行時(shí)間,prefixCMDLength是命令名稱的長(zhǎng)度,憑借這個(gè)值取得消息的前12 位,分析前12位的消息即可得出目前處于共識(shí)的哪個(gè)階段。
表3 合約變量定義表Tab. 3 Contract variable definition table
(3)功能方法。 關(guān)鍵方法定義及介紹見表4。
表4 關(guān)鍵方法定義表Tab. 4 Key method definition table
本文的Windows 實(shí)驗(yàn)環(huán)境的參數(shù)見表5,基于此環(huán)境配置,利用端口號(hào)模擬節(jié)點(diǎn),實(shí)現(xiàn)了NRPBFT算法的運(yùn)行。
表5 設(shè)備參數(shù)表Tab. 5 Equipment parameters table
運(yùn)行上一節(jié)描述的NRPBFT 算法和原PBFT 算法,這里以4 個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)為例,分別運(yùn)行優(yōu)化前后的算法。 在PBFT 算法中,N0是主節(jié)點(diǎn),N1、N2、N3是普通節(jié)點(diǎn)。 在NRPBFT 算法中,設(shè)置4 個(gè)節(jié)點(diǎn)情況下,只能存在一個(gè)惡意節(jié)點(diǎn),根據(jù)p的范圍為2f≤p <3f,這里選擇節(jié)點(diǎn)N1和節(jié)點(diǎn)N2組成共識(shí)集群,主節(jié)點(diǎn)為節(jié)點(diǎn)N0,節(jié)點(diǎn)N3是普通節(jié)點(diǎn)。
PBFT 算法4 個(gè)節(jié)點(diǎn)時(shí)的執(zhí)行時(shí)間見圖9。
圖9 PBFT 算法執(zhí)行時(shí)間Fig. 9 Algorithm execution time of PBFT
NRPBFT 算法4 個(gè)節(jié)點(diǎn)時(shí)的執(zhí)行時(shí)間見圖10。
圖10 NRPBFT 算法執(zhí)行時(shí)間Fig. 10 Algorithm execution time of NRPBFT
從上面的對(duì)比結(jié)果可以看出,本項(xiàng)研究對(duì)PBFT算法的修改可以有效減少節(jié)點(diǎn)之間達(dá)成共識(shí)的時(shí)間,提高了共識(shí)效率。 但是節(jié)點(diǎn)數(shù)量只有4 個(gè)的情況太過簡(jiǎn)單,尤其是在NRPBFT 算法中,普通節(jié)點(diǎn)只有N3, 并不能很好地體現(xiàn)算法優(yōu)化的程度。PBFT 算法的特點(diǎn)是隨著網(wǎng)絡(luò)規(guī)模的增大,通信時(shí)延呈指數(shù)增長(zhǎng),因此可以增大網(wǎng)絡(luò)規(guī)模做后續(xù)進(jìn)一步研究。
將節(jié)點(diǎn)的數(shù)量分別設(shè)置成4 個(gè)、6 個(gè)、8 個(gè)、10個(gè)、12 個(gè)、14 個(gè)、16 個(gè)、18 個(gè)、20 個(gè),查看在不同節(jié)點(diǎn)數(shù)量下算法改進(jìn)前后達(dá)成共識(shí)所需的時(shí)間。 節(jié)點(diǎn)數(shù)量和達(dá)成共識(shí)的時(shí)間見表6。
表6 改進(jìn)前后算法執(zhí)行時(shí)間表Tab. 6 Algorithm execution schedule before and after improvement
將改進(jìn)前和改進(jìn)后的算法運(yùn)行時(shí)間繪制在一張圖上,可以更直觀地看出改進(jìn)前后性能的優(yōu)化,節(jié)點(diǎn)數(shù)量和達(dá)成共識(shí)的時(shí)間對(duì)比如圖11 所示。
圖11 改進(jìn)前后PBFT 算法執(zhí)行時(shí)間與網(wǎng)絡(luò)規(guī)模關(guān)系圖Fig. 11 The relationship between the execution time of the PBFT algorithm and the network size before and after the improvement
通過實(shí)驗(yàn)結(jié)果可知,NRPBFT 算法相比PBFT算法的改進(jìn)效果比較明顯。 從整體上分析,在相同節(jié)點(diǎn)數(shù)量和相同交易信息的條件下,NRPBFT 算法的時(shí)延總是低于PBFT 的時(shí)延。 從趨勢(shì)上看,隨著網(wǎng)絡(luò)中節(jié)點(diǎn)數(shù)量的增加,網(wǎng)絡(luò)中節(jié)點(diǎn)與節(jié)點(diǎn)之間的通信數(shù)量增加,NRPBFT 算法和PBFT 算法的時(shí)延都增大了。 這時(shí)候影響算法效率的是節(jié)點(diǎn)之間的通信開銷,并且NRPBFT 算法減少通信次數(shù)的優(yōu)點(diǎn)也體現(xiàn)出來(lái)了。 從圖11 中可以明顯看出,隨著節(jié)點(diǎn)數(shù)量的增加,NRPBFT 算法時(shí)延增長(zhǎng)速度比PBFT 的時(shí)延增長(zhǎng)速度慢。 在4 個(gè)節(jié)點(diǎn)1 筆交易的條件下,NRPBFT 算法的時(shí)延為10.063 8 ms,PBFT 算法的時(shí)延為16.709 6 ms,NRPBFT 算法相對(duì)PBFT 算法時(shí)延降低了39.77%。
為了說(shuō)明其防作弊的特點(diǎn),這里還需要模擬惡意節(jié)點(diǎn),在網(wǎng)絡(luò)中節(jié)點(diǎn)總數(shù)為4 的情況下進(jìn)行模擬。具體來(lái)說(shuō),N0為主節(jié)點(diǎn),N1和N2為正常節(jié)點(diǎn),N3為惡意節(jié)點(diǎn),模擬的時(shí)候故意不開啟N3,模擬節(jié)點(diǎn)宕機(jī)的情況。
在PBFT 中,當(dāng)不開啟N3節(jié)點(diǎn)的時(shí)候,經(jīng)測(cè)試,節(jié)點(diǎn)依然可以達(dá)成共識(shí),達(dá)成共識(shí)的時(shí)間見圖12。
圖12 有惡意節(jié)點(diǎn)時(shí)PBFT 算法執(zhí)行時(shí)間Fig. 12 PBFT algorithm execution time when there are malicious nodes
在NRPBFT 中,當(dāng)不開啟N3節(jié)點(diǎn)的時(shí)候,經(jīng)測(cè)試,節(jié)點(diǎn)依然可以達(dá)成共識(shí),達(dá)成共識(shí)的時(shí)間見圖13。
圖13 有惡意節(jié)點(diǎn)時(shí)NRPBFT 算法執(zhí)行時(shí)間Fig. 13 NRPBFT algorithm execution time when there are malicious nodes
從圖13 可以看出,在N3為惡意節(jié)點(diǎn)的情況下,2 個(gè)都能達(dá)成共識(shí),并且由于在4 個(gè)節(jié)點(diǎn)的情況下,如果有一個(gè)惡意節(jié)點(diǎn),則剩余的節(jié)點(diǎn)都是共識(shí)集群中的節(jié)點(diǎn),和PBFT 算法沒有區(qū)別,因此達(dá)成共識(shí)的時(shí)間也非常接近。 實(shí)驗(yàn)結(jié)果說(shuō)明,當(dāng)網(wǎng)絡(luò)中存在f(n >3f) 個(gè)節(jié)點(diǎn)時(shí),2 種算法都可以防止節(jié)點(diǎn)作弊,在規(guī)定時(shí)間內(nèi)達(dá)成共識(shí)。
除了通信時(shí)間上有了直觀改善,在通信數(shù)量上也減少了很多。 這里定義網(wǎng)絡(luò)中節(jié)點(diǎn)總數(shù)為n, 定義NRPBFT 算法中共識(shí)集群中節(jié)點(diǎn)數(shù)量為p。
在PBFT 算法中,核心有3 個(gè)階段。 在預(yù)準(zhǔn)備階段,主節(jié)點(diǎn)將待共識(shí)信息進(jìn)行廣播,這一階段的通信次數(shù)為n -1 次;進(jìn)入到準(zhǔn)備階段,每個(gè)節(jié)點(diǎn)進(jìn)行一次廣播,一共n個(gè)節(jié)點(diǎn),因此這一階段的通信次數(shù)為n(n -1);進(jìn)入提交階段,依然是每個(gè)節(jié)點(diǎn)進(jìn)行廣播,通信次數(shù)為n(n -1)。 因此,PBFT 算法總的通信次數(shù)為2n2- n -1。
在NRPBFT 算法中,核心階段也是有3 個(gè)。 在認(rèn)證階段,主節(jié)點(diǎn)向共識(shí)集群中的節(jié)點(diǎn)發(fā)送待共識(shí)信息,這一階段的通信次數(shù)為p次;進(jìn)入到共識(shí)階段,每個(gè)共識(shí)節(jié)點(diǎn)進(jìn)行一次廣播,一共p個(gè)共識(shí)節(jié)點(diǎn),因此這一階段的通信次數(shù)為p(p -1);進(jìn)入確認(rèn)階段,這里是共識(shí)節(jié)點(diǎn)和主節(jié)點(diǎn)在整個(gè)網(wǎng)絡(luò)中進(jìn)行廣播,通信次數(shù)為n(p+1)。 因此,NRPBFT 算法總的通信次數(shù)為p2+np+n,這里p?。?/3)n,遇到小數(shù)上取整,即總通信次數(shù)為:(10/9)n2+n。
將節(jié)點(diǎn)的數(shù)量分別設(shè)置成4 個(gè)、6 個(gè)、8 個(gè)、10個(gè)、12 個(gè)、14 個(gè)、16 個(gè)、18 個(gè)、20 個(gè),查看在不同節(jié)點(diǎn)數(shù)量下的通信次數(shù)。 節(jié)點(diǎn)數(shù)量和通信次數(shù)的關(guān)系見表7。
表7 改進(jìn)前后算法通信次數(shù)表Tab. 7 Algorithm communication times table before and after improvement
將改進(jìn)前和改進(jìn)后的算法通信次數(shù)繪制在一張圖上,可以更直觀地看出改進(jìn)前后的優(yōu)化,節(jié)點(diǎn)數(shù)量和通信次數(shù)的時(shí)間對(duì)比如圖14 所示。
圖14 改進(jìn)前后PBFT 算法執(zhí)行時(shí)間與通信次數(shù)關(guān)系圖Fig.14 The relationship between the execution time of the PBFT algorithm and the number of communications before and after the improvement
通過實(shí)驗(yàn)結(jié)果可知,NRPBFT 算法相比PBFT算法的改進(jìn)效果比較明顯。 從整體上分析,在相同節(jié)點(diǎn)數(shù)量和相同交易信息的條件下,NRPBFT 算法的通信次數(shù)總是比PBFT 的通信次數(shù)少。 從趨勢(shì)上看,隨著網(wǎng)絡(luò)中節(jié)點(diǎn)數(shù)量的增加,網(wǎng)絡(luò)中節(jié)點(diǎn)與節(jié)點(diǎn)之間的通信數(shù)量都在增加,但是NRPBFT 算法中通信次數(shù)增加得比較緩慢。
編寫鏈碼,進(jìn)行交易的初始化和轉(zhuǎn)賬操作,部署鏈碼,進(jìn)行測(cè)試。 PBFT 算法共識(shí)時(shí)間的運(yùn)算見圖15。 由圖15 可知,在采用原PBFT 算法的時(shí)候,交易轉(zhuǎn)賬共識(shí)所需要的時(shí)間為0.029 s。
圖15 PBFT 算法共識(shí)時(shí)間Fig. 15 Consensus time of PBFT algorithm
NRPBFT 算法共識(shí)時(shí)間的運(yùn)算見圖16。 由圖16 可知,采用優(yōu)化后的NRPBFT 算法的時(shí)候,交易轉(zhuǎn)賬共識(shí)所需要的時(shí)間為0.005 s。
圖16 NRPBFT 算法共識(shí)時(shí)間Fig. 16 Consensus time of NRPBFT algorithm
在采用原PBFT 算法的時(shí)候,交易轉(zhuǎn)賬共識(shí)過程的性能指標(biāo)見圖17。
圖17 PBFT 算法性能Fig. 17 Performance of PBFT algorithm
采用優(yōu)化后的NRPBFT 算法的時(shí)候,交易轉(zhuǎn)賬共識(shí)過程的性能指標(biāo)見圖18。
圖18 NRPBFT 算法性能Fig. 18 Performance of NRPBFT algorithm
從圖18 可以看出, NRPBFT 算法的吞吐量更大,性能也提升了。
在本項(xiàng)研究中,選舉了p個(gè)除了主節(jié)點(diǎn)外可信度最高的節(jié)點(diǎn)組成共識(shí)集群,p的取值范圍是2f≤p <3f。 接下來(lái),對(duì)p的取值范圍進(jìn)行證明,說(shuō)明為什么在這個(gè)范圍內(nèi)可以保證系統(tǒng)中的節(jié)點(diǎn)正常達(dá)成共識(shí)。
要想證明P在2f≤p <3f的情況下能保證網(wǎng)絡(luò)在有f個(gè)惡意節(jié)點(diǎn)的情況下達(dá)成共識(shí),首先要證明PBFT 滿足的如下條件:
證明假設(shè)節(jié)點(diǎn)總數(shù)為N,f為拜占庭錯(cuò)誤節(jié)點(diǎn),N滿足:N≥3f+1。
如果網(wǎng)絡(luò)中一共有N個(gè)節(jié)點(diǎn),其中拜占庭節(jié)點(diǎn)的數(shù)量為f,那么非拜占庭節(jié)點(diǎn)的數(shù)量就是N - f。在共識(shí)的時(shí)候,如果一個(gè)普通節(jié)點(diǎn)收到N - f個(gè)信息,節(jié)點(diǎn)無(wú)法判斷這N - f個(gè)信息來(lái)自拜占庭節(jié)點(diǎn)、還是非拜占庭節(jié)點(diǎn)。 考慮最壞的情況,這N -f個(gè)信息中有f個(gè)信息來(lái)自拜占庭節(jié)點(diǎn),在這種情況下,只有N -2f個(gè)信息來(lái)自非拜占庭節(jié)點(diǎn)。 對(duì)于這個(gè)普通節(jié)點(diǎn),在收到2 種不同的信息,節(jié)點(diǎn)會(huì)按照少數(shù)服從多數(shù)的原則,選擇信息數(shù)量多的信息作為待共識(shí)信息。 因此,要想保證待共識(shí)信息是非拜占庭節(jié)點(diǎn)發(fā)送的信息,就需要保證N -2f >f,即N >3f,也就是N≥3f+1。
在NRPBFT 算法中,p的范圍是2f≤p <3f,在認(rèn)證共識(shí)階段,主節(jié)點(diǎn)只會(huì)將待共識(shí)信息發(fā)送給p個(gè)共識(shí)集群中的節(jié)點(diǎn)進(jìn)行共識(shí)。 由于這p個(gè)節(jié)點(diǎn)是網(wǎng)絡(luò)中除了主節(jié)點(diǎn)外可信度最高的p個(gè)節(jié)點(diǎn),所以在一定程度上可以保證p個(gè)節(jié)點(diǎn)中拜占庭節(jié)點(diǎn)的數(shù)量比較少,也就是可以保證p - f >f,即p >2f。 在提交階段,p個(gè)節(jié)點(diǎn)會(huì)分別向N個(gè)節(jié)點(diǎn)發(fā)送信息,也就是進(jìn)行p次單點(diǎn)全廣播的過程,當(dāng)一個(gè)節(jié)點(diǎn)收到至少p/2 個(gè)相同的信息時(shí),也就是至少f個(gè)相同的消息,顯然這些消息不可能全是惡意節(jié)點(diǎn)發(fā)出的,只能是非拜占庭節(jié)點(diǎn)發(fā)出的消息。 在確認(rèn)階段的證明和PBFT 算法一致,這里不再重復(fù)。
由上述論證可以說(shuō)明,在公式集群p的節(jié)點(diǎn)數(shù)量滿足2f≤p <3f時(shí),NRPBFT 算法可以保證能在有f個(gè)惡意節(jié)點(diǎn)的情況下,網(wǎng)絡(luò)中的非拜占庭節(jié)點(diǎn)達(dá)成共識(shí)。
接下來(lái)對(duì)算法的防作弊特點(diǎn)進(jìn)行說(shuō)明。 由于本項(xiàng)研究中默認(rèn)惡意節(jié)點(diǎn)數(shù)量f和網(wǎng)絡(luò)中節(jié)點(diǎn)總數(shù)n之間滿足n >3f的關(guān)系,且默認(rèn)誠(chéng)實(shí)節(jié)點(diǎn)一定能正常進(jìn)行共識(shí),不會(huì)出現(xiàn)信息丟失和宕機(jī)等情況,因此,本算法一定可以抵御51%攻擊。
在區(qū)塊鏈中,DDoS 攻擊的主要目的是大量占用網(wǎng)絡(luò)中的節(jié)點(diǎn)資源,使得這些節(jié)點(diǎn)無(wú)法提供正常的服務(wù),如果受害的節(jié)點(diǎn)過多,很可能會(huì)影響整個(gè)區(qū)塊鏈網(wǎng)絡(luò)的運(yùn)行。 DDoS 攻擊是通過攻擊手段占用了受害者的大量資源,使得受害者不能提供正常服務(wù)。
在區(qū)塊鏈中,DDOS 攻擊主要是計(jì)算集群對(duì)網(wǎng)絡(luò)中的節(jié)點(diǎn)進(jìn)行攻擊,占用節(jié)點(diǎn)資源,使得節(jié)點(diǎn)宕機(jī),無(wú)法進(jìn)行共識(shí)。 本課題中,最多只有f個(gè)節(jié)點(diǎn)可以遭受DDOS 攻擊,而剩余的n - f個(gè)誠(chéng)實(shí)節(jié)點(diǎn)依然可以正常達(dá)成共識(shí),不會(huì)對(duì)最后的結(jié)果造成影響。因此,本算法可以抵擋DDOS 攻擊。
拜占庭將軍問題所描述的正是共謀攻擊的情境,惡意節(jié)點(diǎn)聯(lián)合起來(lái)修改信息或者丟失信息,以此影響網(wǎng)絡(luò)中的節(jié)點(diǎn)達(dá)成共識(shí)。 在上述證明中,已經(jīng)說(shuō)明為什么PBFT 算法和NRPBFT 算法能夠在共謀攻擊的情況下達(dá)成共識(shí),但是前提必須是n >3f,惡意節(jié)點(diǎn)的數(shù)量再多,就無(wú)法抵御共謀攻擊了。
女巫攻擊是一種專門針對(duì)聯(lián)盟鏈的攻擊,惡意節(jié)點(diǎn)可以偽裝自己的身份來(lái)進(jìn)行攻擊。 由于PBFT機(jī)制的延展性不高,一般只能用在網(wǎng)絡(luò)規(guī)模小的網(wǎng)絡(luò)中,所以更易受到女巫攻擊。 在NRPBFT 算法中,對(duì)節(jié)點(diǎn)的可信度進(jìn)行評(píng)估,選取可信度最高的節(jié)點(diǎn)作為主節(jié)點(diǎn),除主節(jié)點(diǎn)外可信度最高的p個(gè)節(jié)點(diǎn)作為共識(shí)集群,核心的階段都在共識(shí)集群中進(jìn)行,最后只需要將共識(shí)集群共識(shí)完成的信息發(fā)送給普通節(jié)點(diǎn),避免了惡意節(jié)點(diǎn)過多參與共識(shí)過程,減少了惡意節(jié)點(diǎn)作惡的機(jī)會(huì)。
從以上分析可以看出,改進(jìn)后的算法繼承了PBFT 算法的優(yōu)點(diǎn),且相對(duì)PBFT 算法更能抵抗女巫攻擊造成的影響,進(jìn)一步防止了節(jié)點(diǎn)作弊。
在聯(lián)盟鏈中難以避免會(huì)有惡意節(jié)點(diǎn)的存在,在節(jié)點(diǎn)達(dá)成共識(shí)的過程中,惡意節(jié)點(diǎn)可以會(huì)散布不實(shí)信息,影響數(shù)據(jù)的一致性,尤其是在金融或者一些特殊應(yīng)用領(lǐng)域,分布式系統(tǒng)需要確保一致性和正確性。使用PBFT 共識(shí)算法可以有效解決惡意節(jié)點(diǎn)的問題,但是PBFT 算法本身還存在性能和開銷上的問題。 本課題針對(duì)聯(lián)盟鏈中應(yīng)用的PBFT 共識(shí)算法在部署鏈碼進(jìn)行交易的過程中存在的問題展開了分析,通過部署鏈碼的方式實(shí)現(xiàn)交易,并根據(jù)交易過程中的性能和開銷對(duì)PBFT 算法進(jìn)行改進(jìn)。 提出了NRPBFT 算法,采用選舉集群的方式,將所有的節(jié)點(diǎn)分成普通節(jié)點(diǎn)和共識(shí)節(jié)點(diǎn)。 利用節(jié)點(diǎn)可信度評(píng)估公式對(duì)所有節(jié)點(diǎn)的可信度進(jìn)行評(píng)估,并對(duì)節(jié)點(diǎn)的可信度進(jìn)行排序,選可信度最高的前p個(gè)節(jié)點(diǎn)作為共識(shí)集群,選取可信度最高的節(jié)點(diǎn)作為主節(jié)點(diǎn),大大降低了惡意節(jié)點(diǎn)成為主節(jié)點(diǎn)的概率。
未來(lái)的研究方向是將NRPBFT 算法進(jìn)行進(jìn)一步優(yōu)化,進(jìn)一步降低系統(tǒng)的消耗,提升系統(tǒng)的性能,或者考慮一些其他方法,來(lái)降低主節(jié)點(diǎn)的中心化風(fēng)險(xiǎn)。 除此以外,類似于RSA 這樣的簽名算法,簽名速度比較慢,可以考慮換成其他簽名算法來(lái)運(yùn)行簽名過程和驗(yàn)證過程。 還可以考慮其他的方式,使得在惡意節(jié)點(diǎn)數(shù)量更多的情況下,也能保證網(wǎng)絡(luò)中誠(chéng)實(shí)節(jié)點(diǎn)達(dá)成共識(shí)。 以上所討論的問題,還有待后續(xù)進(jìn)一步的研究。