*
(1.廣西大學(xué)計(jì)算機(jī)與電子信息學(xué)院,南寧 530004;2.廣西多媒體通信與網(wǎng)絡(luò)技術(shù)重點(diǎn)實(shí)驗(yàn)室(廣西大學(xué)),南寧 530004;3.華南理工大學(xué)電子與信息學(xué)院,廣州 510641)
在用戶(hù)的信息安全方面,為了保證用戶(hù)數(shù)據(jù)的完整性和隱私性,本文將區(qū)塊鏈技術(shù)應(yīng)用到其中。區(qū)塊鏈?zhǔn)且粋€(gè)去中心化的分布式賬本數(shù)據(jù)庫(kù)[1],其中去中心化是指區(qū)塊鏈中的任何決策都是經(jīng)過(guò)所有人投票決定的,需要一個(gè)達(dá)成共識(shí)的過(guò)程;而分布式賬本表示每一個(gè)區(qū)塊鏈節(jié)點(diǎn)會(huì)有一份數(shù)據(jù)賬本用于存儲(chǔ)達(dá)成共識(shí)的結(jié)果,這是能保證用戶(hù)信息不會(huì)被篡改的關(guān)鍵所在。區(qū)塊鏈作為一個(gè)去中心化的技術(shù),意味著區(qū)塊鏈中的分布式成員節(jié)點(diǎn)沒(méi)有一個(gè)中心化、統(tǒng)一化的首領(lǐng)來(lái)發(fā)號(hào)施令,成員節(jié)點(diǎn)只能彼此之間相互討論才能達(dá)成一致的結(jié)果,而這個(gè)討論的方法和過(guò)程就是由共識(shí)層中的共識(shí)算法來(lái)決定的[2],這是分布式的區(qū)塊鏈保持信息中心和用戶(hù)的信息一致所要用到的關(guān)鍵技術(shù)。
目前,主流的區(qū)塊鏈應(yīng)用平臺(tái)采用到了包括工作量證明(Proof of Work,PoW)、權(quán)益證明(Proof of Stack,PoS)、股份授權(quán)證明(Delegated Proof of Stake,DPoS)、Raft 共識(shí)和實(shí)用拜占庭(Practical Byzantine Fault Tolerance,PBFT)等共識(shí)算法。不同的共識(shí)算法具有不同的特點(diǎn),大致上可以分為兩種類(lèi)型:一種是BFT(Byzantine Fault Tolerance)類(lèi)[3]共識(shí)算法,這類(lèi)算法能容忍網(wǎng)絡(luò)中一定比例的拜占庭節(jié)點(diǎn)并達(dá)成共識(shí),雖然網(wǎng)絡(luò)會(huì)更加安全但共識(shí)耗費(fèi)的時(shí)間相對(duì)更長(zhǎng)。例如文獻(xiàn)[4]使用了PoW 算法來(lái)作為比特幣網(wǎng)絡(luò)的共識(shí)算法,該算法要求區(qū)塊鏈節(jié)點(diǎn)計(jì)算隨機(jī)哈希散列數(shù)值來(lái)證明自己的工作量,并且該結(jié)果必須得到至少51%的全網(wǎng)節(jié)點(diǎn)認(rèn)同才能達(dá)成最終的共識(shí)。文獻(xiàn)[5]提出了一種可擴(kuò)展的拜占庭容錯(cuò)(Scalable Byzantine Fault Tolerance,SBFT)算法,該算法能容忍小于1/3節(jié)點(diǎn)總數(shù)的拜占庭節(jié)點(diǎn)存在于網(wǎng)絡(luò)當(dāng)中,并且選定了一個(gè)Leader 節(jié)點(diǎn)來(lái)統(tǒng)計(jì)區(qū)塊鏈節(jié)點(diǎn)對(duì)共識(shí)提案的通過(guò)票數(shù),該機(jī)制可以減少區(qū)塊鏈節(jié)點(diǎn)間的通信開(kāi)銷(xiāo),因此可以進(jìn)一步擴(kuò)展節(jié)點(diǎn)的規(guī)模。另一類(lèi)算法是崩潰容錯(cuò)(Crash Fault Tolerance,CFT)算法[6],這類(lèi)共識(shí)算法能容忍網(wǎng)絡(luò)中的故障崩潰節(jié)點(diǎn)并達(dá)成共識(shí),它雖然能幫助網(wǎng)絡(luò)快速達(dá)成共識(shí)但是需要運(yùn)行在有身份認(rèn)證機(jī)制的網(wǎng)絡(luò)中,且要保證節(jié)點(diǎn)都是誠(chéng)實(shí)節(jié)點(diǎn)。文獻(xiàn)[7]提出了一種能容忍節(jié)點(diǎn)故障崩潰的經(jīng)典共識(shí)算法,在沒(méi)有作惡節(jié)點(diǎn)的系統(tǒng)中這種算法能夠容忍不超過(guò)50%的節(jié)點(diǎn)宕機(jī)故障,提升了系統(tǒng)的可用性。文獻(xiàn)[8]提出了一種部分去中心化的共識(shí)算法,該算法中區(qū)塊鏈節(jié)點(diǎn)的地位并不是完全平等的,算法會(huì)在開(kāi)始共識(shí)之前選舉出一個(gè)領(lǐng)導(dǎo)者,通過(guò)領(lǐng)導(dǎo)者來(lái)分發(fā)共識(shí)請(qǐng)求并收集投票從而大大地提升通信效率,但前提是推舉出來(lái)的領(lǐng)導(dǎo)者是可信任的。
綜上所述,共識(shí)算法中有的更注重共識(shí)安全,有的更側(cè)重于共識(shí)效率,本文選擇兼顧安全和效率的實(shí)用拜占庭容錯(cuò)(Practical Byzantine Fault Tolerance,PBFT)算法加以改進(jìn),引入了節(jié)點(diǎn)監(jiān)控和惡意節(jié)點(diǎn)隔離的能力,剔除了殘留在網(wǎng)絡(luò)中的拜占庭節(jié)點(diǎn),消除了聯(lián)盟網(wǎng)絡(luò)中的隱患并持續(xù)維護(hù)網(wǎng)絡(luò)安全。
拜占庭將軍問(wèn)題(Byzantine Generals Problem),是Lamport 等[9]在1982 年提出用來(lái)解釋一致性問(wèn)題的一個(gè)虛構(gòu)模型。在現(xiàn)實(shí)的聯(lián)盟鏈系統(tǒng)中,從信息中心的節(jié)點(diǎn)中選舉出Leader 節(jié)點(diǎn)。通過(guò)先期的聯(lián)盟鏈會(huì)員資格審查,能保證加入到聯(lián)盟中的節(jié)點(diǎn)絕大部分都是誠(chéng)實(shí)可靠的,但也不能完全確定其中就一定沒(méi)有“叛徒”,這些“叛徒”節(jié)點(diǎn)稱(chēng)之為拜占庭節(jié)點(diǎn),一旦它們被選舉成主節(jié)點(diǎn)就有可能會(huì)丟棄或更改用戶(hù)的隱私數(shù)據(jù)。
實(shí)用拜占庭容錯(cuò)(PBFT)共識(shí)算法于1999 年由Castro等[10]提出,該算法可以容忍不超過(guò)1/3節(jié)點(diǎn)總數(shù)的拜占庭節(jié)點(diǎn)存在網(wǎng)絡(luò)之中,是一種解決拜占庭問(wèn)題的實(shí)用方法,它的出現(xiàn)將BFT 指數(shù)級(jí)的復(fù)雜度降低到了多項(xiàng)式級(jí)別,讓人們得以在實(shí)際生產(chǎn)中使用它。
在PBFT共識(shí)算法模型中,節(jié)點(diǎn)分為主節(jié)點(diǎn)和備份節(jié)點(diǎn)兩種,主節(jié)點(diǎn)是輪流當(dāng)選的,主節(jié)點(diǎn)的編號(hào)p由視圖編號(hào)對(duì)節(jié)點(diǎn)總數(shù)取模得到:
當(dāng)主節(jié)點(diǎn)是誠(chéng)實(shí)節(jié)點(diǎn)時(shí),主節(jié)點(diǎn)協(xié)同備份節(jié)點(diǎn)完成預(yù)準(zhǔn)備(pre-prepare)—準(zhǔn)備(prepare)—提交(commit)的三階段協(xié)議;當(dāng)主節(jié)點(diǎn)完成一次完整共識(shí)或是出現(xiàn)拜占庭錯(cuò)誤的情況,則會(huì)引發(fā)備份節(jié)點(diǎn)發(fā)動(dòng)視圖切換(view-change)協(xié)議重新推舉出新的主節(jié)點(diǎn)。
相較于Raft共識(shí)只能容忍節(jié)點(diǎn)的故障崩潰,PBFT 共識(shí)算法可以很好地容忍拜占庭節(jié)點(diǎn)錯(cuò)誤,能夠在很大程度上為聯(lián)盟網(wǎng)絡(luò)的隱私提供保護(hù),但即便如此PBFT算法仍然有需要改進(jìn)完善的地方。
首先,PBFT 共識(shí)算法本身是可以容忍不超過(guò)1/3 節(jié)點(diǎn)總數(shù)的惡意拜占庭節(jié)點(diǎn)[11],但由于主節(jié)點(diǎn)的選取是輪詢(xún)得到,而算法本身缺乏對(duì)于節(jié)點(diǎn)狀態(tài)的判斷,因此很有可能會(huì)將拜占庭節(jié)點(diǎn)選為主節(jié)點(diǎn)。一旦拜占庭節(jié)點(diǎn)當(dāng)選為主節(jié)點(diǎn)進(jìn)行作惡,它可能會(huì)丟棄、篡改客戶(hù)端的提案,導(dǎo)致提案無(wú)法達(dá)成全網(wǎng)共識(shí),直到被其他備份節(jié)點(diǎn)發(fā)現(xiàn)后執(zhí)行視圖切換協(xié)議,這個(gè)過(guò)程需要重新選舉主節(jié)點(diǎn)并重新執(zhí)行提案請(qǐng)求,會(huì)產(chǎn)生十分昂貴的開(kāi)銷(xiāo)。
其次,PBFT共識(shí)可以容納一定數(shù)量的拜占庭節(jié)點(diǎn)在系統(tǒng)中而不影響剩余的誠(chéng)實(shí)節(jié)點(diǎn)達(dá)成共識(shí),但卻不會(huì)處理這些惡意節(jié)點(diǎn),更不會(huì)懲罰這些作惡節(jié)點(diǎn),這些拜占庭節(jié)點(diǎn)可以不停作惡而不用付出任何代價(jià),如果放任不管的話(huà)這些拜占庭節(jié)點(diǎn)可能會(huì)形成一定的規(guī)模,一旦輪詢(xún)到它們擔(dān)任主節(jié)點(diǎn)就會(huì)大大地降低共識(shí)效率,因此PBFT 共識(shí)算法亟須一種懲罰手段。針對(duì)這些可改進(jìn)的內(nèi)容,本文提出了一種能夠監(jiān)控節(jié)點(diǎn)狀態(tài)的檢測(cè)型實(shí)用拜占庭容錯(cuò)(detection-Practical Byzantine Fault Tolerance,d-PBFT)算法,并詳細(xì)闡述了算法的共識(shí)流程。
針對(duì)PBFT實(shí)用拜占庭共識(shí)算法,已經(jīng)有專(zhuān)家和學(xué)者對(duì)該算法進(jìn)行了改進(jìn)和完善,如文獻(xiàn)[12]提出了基于候補(bǔ)集合投票的改進(jìn)PBFT 算法(Improved Practical Byzantine Fault Tolerance,IPBFT),算法優(yōu)化了共識(shí)過(guò)程,減少了節(jié)點(diǎn)間的通信次數(shù),但仍然會(huì)將拜占庭節(jié)點(diǎn)納入到候補(bǔ)集合中作為下一輪選舉的競(jìng)選者,一旦網(wǎng)絡(luò)中潛藏的拜占庭節(jié)點(diǎn)形成了一定規(guī)模甚至?xí)?dǎo)致主節(jié)點(diǎn)頻繁切換。文獻(xiàn)[13]在PBFT 共識(shí)三階段之前引入了可驗(yàn)證隨機(jī)函數(shù)(Verifiable Random Function,VRF)來(lái)進(jìn)一步保證主節(jié)點(diǎn)選舉的隨機(jī)性,但隨著節(jié)點(diǎn)規(guī)模的增大VRF會(huì)導(dǎo)致系統(tǒng)性能下降得很快。
上述改進(jìn)算法雖然巧妙,但仍會(huì)殘留拜占庭節(jié)點(diǎn)于網(wǎng)絡(luò)中。本文提出的d-PBFT 檢測(cè)型實(shí)用拜占庭共識(shí)算法會(huì)在共識(shí)開(kāi)始前校驗(yàn)主節(jié)點(diǎn)的節(jié)點(diǎn)狀態(tài),避免拜占庭節(jié)點(diǎn)擔(dān)任主節(jié)點(diǎn),減少無(wú)效的通信,同時(shí)會(huì)將這些惡意節(jié)點(diǎn)納入隔離區(qū),追查來(lái)源并將其踢出網(wǎng)絡(luò)。
在有嚴(yán)格會(huì)員準(zhǔn)入機(jī)制的聯(lián)盟區(qū)塊鏈網(wǎng)絡(luò)中,不能排除仍然有第三方敵手將拜占庭節(jié)點(diǎn)偽裝成正常節(jié)點(diǎn)混入到聯(lián)盟網(wǎng)絡(luò)中,假設(shè)存在f個(gè)拜占庭節(jié)點(diǎn),需要容忍這f個(gè)節(jié)點(diǎn)的惡意行為并且還要保證它們的行為不會(huì)對(duì)共識(shí)結(jié)果產(chǎn)生影響,這就需要給定一個(gè)恰當(dāng)?shù)墓?jié)點(diǎn)總數(shù)n,使得惡意節(jié)點(diǎn)f不會(huì)成為網(wǎng)絡(luò)中的多數(shù)派。在確定節(jié)點(diǎn)總數(shù)n之前,首先需要明確這些惡意節(jié)點(diǎn)可能會(huì)產(chǎn)生的惡意行為,其中一個(gè)行為是不應(yīng)答,即收到共識(shí)請(qǐng)求后不返回執(zhí)行結(jié)果;另一個(gè)行為是錯(cuò)誤應(yīng)答,即返回一個(gè)錯(cuò)誤的共識(shí)結(jié)果來(lái)欺騙網(wǎng)絡(luò)中的其他節(jié)點(diǎn)。
在此前提條件下,當(dāng)一個(gè)客戶(hù)端提出共識(shí)請(qǐng)求后,若網(wǎng)絡(luò)節(jié)點(diǎn)正常則本應(yīng)該收到n條消息,但由于拜占庭節(jié)點(diǎn)不應(yīng)答的原因,因此只收到了n-f條應(yīng)答消息,為了讓?xiě)?yīng)答的消息占據(jù)大多數(shù)就必須有n-f>f成立,所以節(jié)點(diǎn)總數(shù)n必須大于2f。另一方面,即便有f個(gè)節(jié)點(diǎn)沒(méi)有應(yīng)答客戶(hù)端,但也可能是其他誠(chéng)實(shí)節(jié)點(diǎn)暫時(shí)掉線(xiàn)了,即在應(yīng)答的n-f條消息中可能存在著錯(cuò)誤應(yīng)答的拜占庭節(jié)點(diǎn),為了確保系統(tǒng)的安全性需要考慮到最壞的因素即當(dāng)前不應(yīng)答的節(jié)點(diǎn)全是由誠(chéng)實(shí)節(jié)點(diǎn)意外掉線(xiàn)導(dǎo)致的,因此最壞情況下n-f條消息中還包含著f條來(lái)自拜占庭節(jié)點(diǎn)的錯(cuò)誤消息。為了保證誠(chéng)實(shí)節(jié)點(diǎn)的消息數(shù)為大多數(shù),n-f條應(yīng)答消息還需要細(xì)分為n-f-f條誠(chéng)實(shí)應(yīng)答消息和f條錯(cuò)誤應(yīng)答消息,所以可以得出n-f-f>f即n>3f。所以為了容忍f個(gè)拜占庭節(jié)點(diǎn),網(wǎng)絡(luò)中的節(jié)點(diǎn)總數(shù)n至少為n=3f+1。
綜上所述,只要聯(lián)盟網(wǎng)絡(luò)中的拜占庭節(jié)點(diǎn)數(shù)f≤這些拜占庭節(jié)點(diǎn)就無(wú)法左右系統(tǒng)達(dá)成一致的共識(shí)結(jié)果。然而隨著時(shí)間的增長(zhǎng),假設(shè)每經(jīng)過(guò)一段Δt時(shí)間后,系統(tǒng)內(nèi)就會(huì)新增一個(gè)拜占庭節(jié)點(diǎn),如果這些拜占庭節(jié)點(diǎn)沒(méi)有得到及時(shí)的處理,不僅會(huì)降低系統(tǒng)的性能,還有可能造成f>進(jìn)而威脅聯(lián)盟網(wǎng)絡(luò)安全,因此本文提出了節(jié)點(diǎn)狀態(tài)監(jiān)測(cè)和隔離懲罰的機(jī)制,可以在經(jīng)過(guò)m輪共識(shí)后及時(shí)匯報(bào)節(jié)點(diǎn)的狀態(tài),以便剔除網(wǎng)絡(luò)中的拜占庭節(jié)點(diǎn)。改進(jìn)后的效果如圖1所示。
圖1 d-PBFT算法的拜占庭容錯(cuò)能力Fig.1 Byzantine fault tolerance performance of d-PBFT algorithm
與公有區(qū)塊鏈中節(jié)點(diǎn)匿名加入網(wǎng)絡(luò)不同,聯(lián)盟區(qū)塊鏈有嚴(yán)格的會(huì)員準(zhǔn)入機(jī)制,無(wú)論是企業(yè)還是個(gè)人加入聯(lián)盟鏈都會(huì)受到身份資格的審查,并且從可信度、安全和性能三個(gè)方面考慮,聯(lián)盟鏈中參與共識(shí)的節(jié)點(diǎn)都是由組建聯(lián)盟的信息中心和企業(yè)提供,個(gè)人用戶(hù)的節(jié)點(diǎn)只參與健康提案的發(fā)起和結(jié)果校驗(yàn)。因此,本文考慮為這些參與共識(shí)的節(jié)點(diǎn)新增節(jié)點(diǎn)狀態(tài)的屬性,與此同時(shí)每一個(gè)參與共識(shí)的節(jié)點(diǎn)都需要維護(hù)一份節(jié)點(diǎn)狀態(tài)信息表如表1所示。
表1 節(jié)點(diǎn)狀態(tài)Tab.1 Node states
在本文的聯(lián)盟區(qū)塊鏈中,用戶(hù)節(jié)點(diǎn)可能有很多,但真正參與共識(shí)的節(jié)點(diǎn)都是來(lái)自聯(lián)盟中的信息中心和企業(yè),并且由于原PBFT算法本身通信開(kāi)銷(xiāo)和性能的因素,參與共識(shí)的節(jié)點(diǎn)數(shù)目通常不會(huì)超過(guò)100 個(gè),因而維護(hù)這樣一張表不會(huì)給每個(gè)節(jié)點(diǎn)造成額外的負(fù)擔(dān)。
在系統(tǒng)首次運(yùn)行時(shí),每個(gè)共識(shí)節(jié)點(diǎn)的表中都不會(huì)記錄任何節(jié)點(diǎn)及其狀態(tài)。在執(zhí)行三階段共識(shí)協(xié)議之前,先檢查主節(jié)點(diǎn)在節(jié)點(diǎn)狀態(tài)表中的狀態(tài),如果沒(méi)有在表中找到該主節(jié)點(diǎn),就先驗(yàn)證該節(jié)點(diǎn)的簽名,簽名通過(guò)則添加該節(jié)點(diǎn)到表中。開(kāi)始執(zhí)行共識(shí)協(xié)議后,每完成(或終止)一輪共識(shí),參與共識(shí)的備份節(jié)點(diǎn)才會(huì)為當(dāng)前視圖的主節(jié)點(diǎn)打上標(biāo)記如圖2所示。
圖2 節(jié)點(diǎn)標(biāo)記過(guò)程Fig.2 Process of node marking
如果一輪共識(shí)是按照三階段協(xié)議的預(yù)準(zhǔn)備-準(zhǔn)備-提交的流程正常運(yùn)轉(zhuǎn),那么在結(jié)束的時(shí)候其他備份節(jié)點(diǎn)就應(yīng)當(dāng)為主節(jié)點(diǎn)打上normal 標(biāo)記。如果在執(zhí)行共識(shí)期間,主節(jié)點(diǎn)長(zhǎng)時(shí)間沒(méi)有響應(yīng)直到超出預(yù)分配時(shí)間還未完成共識(shí),由于無(wú)法判斷該主節(jié)點(diǎn)是意外掉線(xiàn)還是故意不分發(fā)共識(shí)提案,此時(shí)其他備份節(jié)點(diǎn)應(yīng)當(dāng)標(biāo)記主節(jié)點(diǎn)狀態(tài)為unstable,之后發(fā)起視圖切換view-change 協(xié)議推舉新的主節(jié)點(diǎn)重新完成共識(shí)。帶有unstable標(biāo)記的節(jié)點(diǎn)如果連續(xù)兩次擔(dān)任主節(jié)點(diǎn)都超時(shí),就會(huì)被其他節(jié)點(diǎn)標(biāo)記為malicious 節(jié)點(diǎn);但unstable 節(jié)點(diǎn)如果在下一次擔(dān)任主節(jié)點(diǎn)時(shí)順利完成共識(shí),那么仍然可以恢復(fù)成normal節(jié)點(diǎn)。在一輪共識(shí)中,有備份節(jié)點(diǎn)發(fā)現(xiàn)了主節(jié)點(diǎn)有任意作惡行為,如偽造簽名、分配錯(cuò)誤的提案序號(hào)、篡改提案信息等,應(yīng)當(dāng)即刻發(fā)起視圖切換view-change 協(xié)議,如果view-change 被全網(wǎng)一致通過(guò)則標(biāo)記主節(jié)點(diǎn)為malicious節(jié)點(diǎn)。
假設(shè)聯(lián)盟中共有n個(gè)節(jié)點(diǎn)參與共識(shí),那么在n輪共識(shí)過(guò)后,所有的節(jié)點(diǎn)都輪詢(xún)擔(dān)任過(guò)主節(jié)點(diǎn),每一個(gè)參與共識(shí)的節(jié)點(diǎn)都會(huì)維護(hù)一張完整的節(jié)點(diǎn)狀態(tài)表,如果聯(lián)盟中的節(jié)點(diǎn)十分誠(chéng)實(shí),那么大部分節(jié)點(diǎn)的評(píng)級(jí)都應(yīng)該是normal,可能會(huì)有少部分節(jié)點(diǎn)為unstable,這表明聯(lián)盟的網(wǎng)絡(luò)狀態(tài)十分健康?,F(xiàn)實(shí)中的區(qū)塊鏈網(wǎng)絡(luò)可能會(huì)存在拜占庭節(jié)點(diǎn),由于聯(lián)盟系統(tǒng)有嚴(yán)格的身份準(zhǔn)入機(jī)制,這些拜占庭節(jié)點(diǎn)的數(shù)量很難超過(guò)共識(shí)節(jié)點(diǎn)總數(shù)的1/3,因此它們作為備份節(jié)點(diǎn)出現(xiàn)時(shí)對(duì)共識(shí)過(guò)程的影響不大,它們產(chǎn)生的惡意結(jié)果會(huì)在共識(shí)過(guò)程中被舍棄掉[14],如果這些拜占庭節(jié)點(diǎn)作為主節(jié)點(diǎn)出現(xiàn)在共識(shí)系統(tǒng)中即便無(wú)法篡改用戶(hù)數(shù)據(jù),但仍然會(huì)帶來(lái)較大的性能和惡意超時(shí)的影響。因此,在這些拜占庭節(jié)點(diǎn)擔(dān)任過(guò)一次主節(jié)點(diǎn)后,它的作惡行為會(huì)讓它在其他誠(chéng)實(shí)節(jié)點(diǎn)的節(jié)點(diǎn)狀態(tài)表中被打上malicious 標(biāo)記,當(dāng)這些拜占庭節(jié)點(diǎn)再一次競(jìng)選主節(jié)點(diǎn)時(shí),可以通過(guò)malicious 標(biāo)記直接把這些拜占庭節(jié)點(diǎn)排除掉,不給它們作惡機(jī)會(huì),同時(shí)避免浪費(fèi)不必要的共識(shí)糾錯(cuò)時(shí)間。
同時(shí)本文還為unstable 節(jié)點(diǎn)和malicious 節(jié)點(diǎn)設(shè)立了一個(gè)“隔離區(qū)”,隔離區(qū)隸屬于共識(shí)模塊,如果節(jié)點(diǎn)曾經(jīng)被標(biāo)記過(guò)unstable狀態(tài),則會(huì)被隔離區(qū)記錄unstable次數(shù),次數(shù)累計(jì)較多的節(jié)點(diǎn)會(huì)被視作故障老化的節(jié)點(diǎn)最終被移除網(wǎng)絡(luò)。如果節(jié)點(diǎn)被打上malicious 標(biāo)記,則會(huì)立即被收納到隔離區(qū)中,每經(jīng)歷m輪共識(shí)后(m視聯(lián)盟的實(shí)際需求而定)系統(tǒng)就發(fā)起一次針對(duì)隔離區(qū)的系統(tǒng)共識(shí),系統(tǒng)管理員就可以通過(guò)隔離區(qū)中記錄的節(jié)點(diǎn)信息追查和處理這些拜占庭節(jié)點(diǎn)的所屬組織。
d-PBFT共識(shí)算法敵手模型為n=3f+1,其中n代表參與共識(shí)的總節(jié)點(diǎn)數(shù),f為拜占庭節(jié)點(diǎn)數(shù)且f≤整個(gè)共識(shí)網(wǎng)絡(luò)中的節(jié)點(diǎn)都統(tǒng)稱(chēng)為replica復(fù)制節(jié)點(diǎn),因?yàn)樵璓BFT算法就是基于狀態(tài)機(jī)復(fù)制原理的算法[15]。replica 節(jié)點(diǎn)又可以細(xì)分為一個(gè)Primary 主節(jié)點(diǎn)和眾多的Backup 備份節(jié)點(diǎn),主節(jié)點(diǎn)是根據(jù)replica 節(jié)點(diǎn)的編號(hào)依次輪詢(xún)到的,主節(jié)點(diǎn)和備份節(jié)點(diǎn)都會(huì)運(yùn)行在一個(gè)稱(chēng)之為視圖view 的地方,每個(gè)主節(jié)點(diǎn)都會(huì)對(duì)應(yīng)一個(gè)視圖,如果主節(jié)點(diǎn)被更換了那就需要運(yùn)行視圖切換協(xié)議,圖3 展示的是一個(gè)主節(jié)點(diǎn)在一個(gè)任期內(nèi)運(yùn)行d-PBFT 共識(shí)算法達(dá)成共識(shí)的流程。
圖3 d-PBFT三階段協(xié)議Fig.3 d-PBFT three-stage agreement
d-PBFT 算法沿用了PBFT 共識(shí)算法的三階段協(xié)議,而d-PBFT算法新增的檢測(cè)主節(jié)點(diǎn)狀態(tài)、標(biāo)識(shí)主節(jié)點(diǎn)狀態(tài)和隔離拜占庭節(jié)點(diǎn)的過(guò)程都夾雜在pre-prepare、prepare 和commit 過(guò)程之中,當(dāng)主節(jié)點(diǎn)有任何超時(shí)和作弊的行為都會(huì)被其他備份節(jié)點(diǎn)標(biāo)記下來(lái)。圖3 反映的是成功達(dá)成共識(shí)需要經(jīng)歷的5 個(gè)步驟:
1)請(qǐng)求(request)步驟。首先,用戶(hù)通過(guò)網(wǎng)絡(luò)客戶(hù)端client向聯(lián)盟中的主節(jié)點(diǎn)Primary 發(fā)送提案請(qǐng)求其中提案內(nèi)容表示為m,發(fā)送方表示為c用來(lái)表明客戶(hù)端身份,該提案的時(shí)間戳表示為t。這個(gè)階段就是用戶(hù)向聯(lián)盟提交需要共識(shí)的提案信息,該消息會(huì)被客戶(hù)端簽名,然后再進(jìn)入共識(shí)的核心流程。
2)預(yù)準(zhǔn)備(pre-prepare)步驟。在視圖view 上,主節(jié)點(diǎn)會(huì)校驗(yàn)發(fā)送方的身份,然后將提案內(nèi)容m編上序號(hào)并為它生成摘要,然后將它們一并打包分發(fā)給網(wǎng)絡(luò)中的備份節(jié)點(diǎn),消息內(nèi)容為其中:v記錄的是運(yùn)行共識(shí)所在視圖的編號(hào),n表示主節(jié)點(diǎn)為提案m設(shè)定的序號(hào),d則是提案生成的哈希摘要,p表示為主節(jié)點(diǎn)的節(jié)點(diǎn)編號(hào)。
如果主節(jié)點(diǎn)直到超時(shí)還未將預(yù)準(zhǔn)備消息發(fā)送出去,其他的備份節(jié)點(diǎn)會(huì)將該編號(hào)的主節(jié)點(diǎn)標(biāo)記為unstable 狀態(tài),若已經(jīng)是unstable 狀態(tài)的節(jié)點(diǎn)連續(xù)兩次擔(dān)任主節(jié)點(diǎn)都發(fā)生了超時(shí),該節(jié)點(diǎn)就會(huì)被拉黑為malicious節(jié)點(diǎn),之后其他節(jié)點(diǎn)就不會(huì)再選取該節(jié)點(diǎn)作為主節(jié)點(diǎn)了;但如果標(biāo)記為unstable 的節(jié)點(diǎn)在下一次擔(dān)任主節(jié)點(diǎn)時(shí)恢復(fù)正常,那么它的節(jié)點(diǎn)狀態(tài)仍然可以恢復(fù)為normal狀態(tài)。
3)準(zhǔn)備(prepare)步驟。當(dāng)所有的備份節(jié)點(diǎn)Backup接收到主節(jié)點(diǎn)發(fā)來(lái)的消息后,選取其中一個(gè)備份節(jié)點(diǎn)b1來(lái)進(jìn)行說(shuō)明,首先b1通過(guò)主節(jié)點(diǎn)的編號(hào)p在自己記錄的節(jié)點(diǎn)狀態(tài)表中查詢(xún)主節(jié)點(diǎn)的狀態(tài),如果主節(jié)點(diǎn)是malicious 狀態(tài)的,那么備份節(jié)點(diǎn)b1就直接發(fā)起視圖切換協(xié)議請(qǐng)求更換新的主節(jié)點(diǎn);如果主節(jié)點(diǎn)是normal 狀態(tài)或unstable 狀態(tài),則準(zhǔn)備廣播消息給除b1以外的其他節(jié)點(diǎn),其中i代表的是備份節(jié)點(diǎn)b1的編號(hào)。
4)提交(commit)步驟。其他節(jié)點(diǎn)接收到來(lái)自b1備份節(jié)點(diǎn)的prepare 消息,同理b1也會(huì)接收到其他備份節(jié)點(diǎn)發(fā)過(guò)來(lái)的prepare消息。首先,b1會(huì)檢查消息的簽名是否正確,其他節(jié)點(diǎn)prepare消息的視圖編號(hào)是否和主節(jié)點(diǎn)pre-prepare消息發(fā)送的視圖編號(hào)一致等。當(dāng)有至少2f個(gè)來(lái)自其他備份節(jié)點(diǎn)的prepare 信息能和主節(jié)點(diǎn)的pre-prepare 信息核對(duì)一致時(shí),此時(shí)的b1備份節(jié)點(diǎn)就可以廣播消息給其他節(jié)點(diǎn),D(m)是b1對(duì)于提案m的可驗(yàn)證簽名。
同理,如果b1備份節(jié)點(diǎn)廣播的prepare 消息正常的話(huà),也會(huì)收到其他備份節(jié)點(diǎn)返回的commit 消息,當(dāng)commit 消息達(dá)到至少2f+1條時(shí)表明全網(wǎng)已經(jīng)達(dá)成共識(shí)。但在達(dá)成共識(shí)前,如果主節(jié)點(diǎn)被發(fā)現(xiàn)有任何作弊的行為,會(huì)引發(fā)備份節(jié)點(diǎn)發(fā)起視圖切換協(xié)議,并把該編號(hào)的主節(jié)點(diǎn)記錄為malicious節(jié)點(diǎn),之后會(huì)把它移交到隔離區(qū)等待聯(lián)盟管理員處理。
5)應(yīng)答(reply)步驟。進(jìn)入到reply 步驟意味著核心的共識(shí)過(guò)程已經(jīng)結(jié)束,接下來(lái)就是所有的節(jié)點(diǎn)將消息返還給客戶(hù)端,其中的r代表節(jié)點(diǎn)執(zhí)行的結(jié)果,由于該網(wǎng)絡(luò)只能容忍f個(gè)拜占庭節(jié)點(diǎn),因此當(dāng)客戶(hù)端收到至少2f+1 個(gè)reply 消息即表明該返回結(jié)果確實(shí)已經(jīng)達(dá)成了全網(wǎng)的共識(shí)認(rèn)證。
當(dāng)備份節(jié)點(diǎn)感知到當(dāng)前主節(jié)點(diǎn)p有異常行為如超時(shí)、作弊行為時(shí),備份節(jié)點(diǎn)會(huì)發(fā)起視圖切換協(xié)議并發(fā)送消息廣播給全網(wǎng),其中,v+1表示新的視圖編號(hào),n表示最近c(diǎn)heckpoint 消息檢查點(diǎn)的編號(hào)用于檢驗(yàn)最新的消息log,C表示已經(jīng)驗(yàn)證過(guò)的2f+1 個(gè)checkpoint 消息集合,P表示因超時(shí)導(dǎo)致未完成的pre-prepare消息和prepare消息的集合。
當(dāng)網(wǎng)絡(luò)中有至少2f+1個(gè)節(jié)點(diǎn)發(fā)起視圖切換協(xié)議,網(wǎng)絡(luò)就會(huì)開(kāi)始重新選舉節(jié)點(diǎn)p+1 作為主節(jié)點(diǎn),所在的視圖view 也會(huì)從v變更為視圖v+1。之后,新的主節(jié)點(diǎn)p+1 將會(huì)發(fā)送消息廣播給全網(wǎng)節(jié)點(diǎn),其中,V表示備份節(jié)點(diǎn)發(fā)出的有效的view-change 消息集合,O表示重新發(fā)起上一輪未完成的pre-prepare 消息的集合。備份節(jié)點(diǎn)接收到new-view 消息后,比對(duì)其中有效的view-change消息集合,確認(rèn)無(wú)誤后正式加入到新節(jié)點(diǎn)的視圖v+1 中并完成上一輪未完成的pre-prepare消息。
本文提出了一種改進(jìn)PBFT 的d-PBFT 共識(shí)算法,之后需要對(duì)該算法進(jìn)行測(cè)試評(píng)估,并在無(wú)拜占庭節(jié)點(diǎn)和有拜占庭節(jié)點(diǎn)的情況下分別對(duì)其表現(xiàn)進(jìn)行評(píng)估,以驗(yàn)證該算法在聯(lián)盟網(wǎng)絡(luò)中的實(shí)用性。
本測(cè)試評(píng)估將會(huì)在實(shí)驗(yàn)室電腦上進(jìn)行,本次測(cè)試使用4臺(tái)實(shí)驗(yàn)室電腦配置如表2所示。
表2 網(wǎng)絡(luò)節(jié)點(diǎn)配置Tab.2 Network node configuration
本文的測(cè)試將會(huì)對(duì)比PoW、Raft、PBFT 和d-PBFT 四種共識(shí)算法在無(wú)拜占庭節(jié)點(diǎn)情況下和有拜占庭節(jié)點(diǎn)情況下的吞吐量和時(shí)延,該測(cè)試不會(huì)運(yùn)行在某一個(gè)特定的區(qū)塊鏈平臺(tái),而是使用go語(yǔ)言實(shí)現(xiàn)[16]并部署在4臺(tái)實(shí)驗(yàn)室電腦中。
在本章需要測(cè)試共識(shí)算法在同一環(huán)境下的性能,因此采用一個(gè)輕量級(jí)的開(kāi)源測(cè)試框架wrk,它是一款基于HTTP 協(xié)議的測(cè)試工具,能夠利用異步事件驅(qū)動(dòng)框架給予系統(tǒng)很大的并發(fā)量。由于wrk 框架是一個(gè)輕量級(jí)框架,默認(rèn)支持GET 方式發(fā)起請(qǐng)求,而本文的客戶(hù)端節(jié)點(diǎn)需要提交聯(lián)盟用戶(hù)的信息和數(shù)據(jù),因此需要借助lua 腳本啟用POST 方式向其他節(jié)點(diǎn)發(fā)送請(qǐng)求。
3.2.1 共識(shí)算法TPS測(cè)試
本文在無(wú)拜占庭節(jié)點(diǎn)和有拜占庭節(jié)點(diǎn)的兩種情況下分別對(duì)d-PBFT 算法進(jìn)行了吞吐量測(cè)試并與PoW、Raft 和PBFT 算法進(jìn)行對(duì)比,測(cè)試結(jié)果如圖4所示。
圖4 是網(wǎng)絡(luò)中無(wú)拜占庭節(jié)點(diǎn)的情況下測(cè)得的共識(shí)算法吞吐量,在區(qū)塊鏈中吞吐量(Transactions Per Seconds,TPS)的計(jì)算方式為:
實(shí)驗(yàn)中,對(duì)共識(shí)算法進(jìn)行了30次測(cè)試,由圖4可知在無(wú)拜占庭節(jié)點(diǎn)的情況下部分去中心化的Raft 算法吞吐量最高,完全由Leader 節(jié)點(diǎn)分發(fā)客戶(hù)端請(qǐng)求,F(xiàn)ollower 節(jié)點(diǎn)只驗(yàn)證Leader節(jié)點(diǎn)信息內(nèi)容,卻不會(huì)在Follower 之間判斷Leader 節(jié)點(diǎn)是否是拜占庭節(jié)點(diǎn)。吞吐量排在并列第二的分別是PBFT 和改進(jìn)d-PBFT 算法,Backup 節(jié)點(diǎn)不僅會(huì)驗(yàn)證Primary 節(jié)點(diǎn)的信息內(nèi)容,還會(huì)在Backup 節(jié)點(diǎn)間綜合判斷Primary 節(jié)點(diǎn)是否是拜占庭節(jié)點(diǎn),因此為了保證聯(lián)盟網(wǎng)絡(luò)更加安全而犧牲了部分吞吐量。最后,吞吐量最差的是PoW 共識(shí)算法,這個(gè)算法是完全去中心化的算法,網(wǎng)絡(luò)中設(shè)定的難度越難產(chǎn)生新的區(qū)塊就越困難。
圖4 無(wú)拜占庭節(jié)點(diǎn)下的吞吐量測(cè)試Fig.4 TPS test in non-Byzantine case
受實(shí)驗(yàn)室設(shè)備的限制,本文僅向網(wǎng)絡(luò)加入了一個(gè)拜占庭節(jié)點(diǎn)并測(cè)試共識(shí)算法的TPS,測(cè)試結(jié)果如圖5所示。
設(shè)定節(jié)點(diǎn)超時(shí)時(shí)間為10 s,在這一輪測(cè)試中針對(duì)部分去中心化的算法Raft、PBFT 和d-PBFT,讓4 個(gè)節(jié)點(diǎn)輪流擔(dān)任主節(jié)點(diǎn),拜占庭節(jié)點(diǎn)也會(huì)輪值到主節(jié)點(diǎn),完全去中心化的PoW算法中節(jié)點(diǎn)地位平等而沒(méi)有主節(jié)點(diǎn)機(jī)制。由圖5 可知,當(dāng)拜占庭節(jié)點(diǎn)輪值到主節(jié)點(diǎn)時(shí),Raft 算法完全沒(méi)有任何防范能力在圖像中用“×”來(lái)表示,并且拜占庭主節(jié)點(diǎn)不會(huì)被揪出而是一直擔(dān)任著主節(jié)點(diǎn),此時(shí)整個(gè)網(wǎng)絡(luò)傳遞的都是拜占庭節(jié)點(diǎn)的消息。而在PBFT 算法中,每當(dāng)拜占庭節(jié)點(diǎn)輪值成為主節(jié)點(diǎn)時(shí),其他的備份節(jié)點(diǎn)會(huì)有效地識(shí)別出來(lái),但也意味著在這一輪共識(shí)中節(jié)點(diǎn)都忙于檢測(cè)主節(jié)點(diǎn)存在的問(wèn)題,導(dǎo)致無(wú)法再傳輸用戶(hù)信息?;赑BFT 改進(jìn)的d-PBFT 共識(shí)算法在第一輪也體現(xiàn)了同樣的特征,但不同的是在第一次發(fā)現(xiàn)了拜占庭節(jié)點(diǎn)之后,當(dāng)再次遇到拜占庭節(jié)點(diǎn)時(shí)d-PBFT 會(huì)拒絕它輪值為主節(jié)點(diǎn),使得相同時(shí)間內(nèi)與PBFT 算法相比區(qū)塊生成量提升了26.1%。PoW 算法則是完全去中心化的共識(shí)算法,只要不是超過(guò)51%的節(jié)點(diǎn)發(fā)起攻擊[17],PoW算法都能夠正常運(yùn)行。
圖5 拜占庭節(jié)點(diǎn)下吞吐量測(cè)試Fig.5 TPS test in Byzantine case
3.2.2 共識(shí)算法時(shí)延測(cè)試
在共識(shí)算法的時(shí)延測(cè)試中,同樣采用無(wú)拜占庭節(jié)點(diǎn)和拜占庭節(jié)點(diǎn)兩種情景進(jìn)行測(cè)試,設(shè)定在共識(shí)網(wǎng)絡(luò)中的超時(shí)時(shí)間為10 s,如果節(jié)點(diǎn)在10 s 后無(wú)任何響應(yīng)共識(shí)會(huì)被取消。共識(shí)算法的時(shí)延計(jì)算公式為:
本文在主節(jié)點(diǎn)為非拜占庭節(jié)點(diǎn)和拜占庭節(jié)點(diǎn)的情境下分別測(cè)試了30 次,測(cè)試了用戶(hù)數(shù)據(jù)寫(xiě)入?yún)^(qū)塊鏈并達(dá)成共識(shí)的時(shí)延,對(duì)30次測(cè)試取平均值求得結(jié)果如圖6所示。
圖6 非拜占庭和拜占庭情況下的共識(shí)時(shí)延Fig.6 Consensus delays in non-Byzantine and Byzantine cases
在該輪測(cè)試中,正常主節(jié)點(diǎn)的共識(shí)時(shí)延用斜線(xiàn)柱狀圖表示,拜占庭節(jié)點(diǎn)擔(dān)任主節(jié)點(diǎn)的共識(shí)時(shí)延用空白柱狀圖表示。由于PoW 算法是完全分布式的共識(shí)算法,并且需要各個(gè)節(jié)點(diǎn)在一定難度下競(jìng)爭(zhēng)區(qū)塊,因此耗費(fèi)的時(shí)間最長(zhǎng),平均耗時(shí)超過(guò)30 s,但是拜占庭節(jié)點(diǎn)只要不超過(guò)節(jié)點(diǎn)總數(shù)的51%就對(duì)整個(gè)網(wǎng)絡(luò)影響有限。部分去中心化的Raft共識(shí)算法在無(wú)拜占庭節(jié)點(diǎn)的情景下表現(xiàn)優(yōu)秀,能夠維持在0.5 s 左右的延時(shí),但前提條件是網(wǎng)絡(luò)沒(méi)有將拜占庭節(jié)點(diǎn)選為主節(jié)點(diǎn),一旦主節(jié)點(diǎn)被拜占庭節(jié)點(diǎn)攻占整個(gè)網(wǎng)絡(luò)將會(huì)處于混亂狀態(tài),共識(shí)的內(nèi)容和時(shí)長(zhǎng)將被拜占庭節(jié)點(diǎn)掌控直到超時(shí)。PBFT 算法和d-PBFT 算法在正常情況下達(dá)成共識(shí)的時(shí)間也非常迅速,兩種算法都沒(méi)有超過(guò)1 s,同時(shí)這兩種算法相較Raft 算法更加安全,在PBFT 算法中當(dāng)拜占庭節(jié)點(diǎn)擔(dān)任主節(jié)點(diǎn)時(shí),只要拜占庭節(jié)點(diǎn)數(shù)目不超過(guò)節(jié)點(diǎn)總數(shù)的1/3,被篡改的信息是會(huì)被其他備份節(jié)點(diǎn)發(fā)現(xiàn)并修正的,但拜占庭主節(jié)點(diǎn)仍然可以令共識(shí)超時(shí),從而對(duì)用戶(hù)的通信造成影響;而d-PBFT 算法在第一次拜占庭節(jié)點(diǎn)擔(dān)任主節(jié)點(diǎn)時(shí)也會(huì)受到類(lèi)似的影響,但在下一輪輪詢(xún)中網(wǎng)絡(luò)中的節(jié)點(diǎn)不會(huì)再支持拜占庭節(jié)點(diǎn)擔(dān)任主節(jié)點(diǎn),這將有效地避免拜占庭節(jié)點(diǎn)對(duì)網(wǎng)絡(luò)的時(shí)延產(chǎn)生干擾。
3.2.3 共識(shí)安全性
上述實(shí)驗(yàn)分別在正常情況和拜占庭錯(cuò)誤兩種情況下進(jìn)行的,除PoW算法沒(méi)有主節(jié)點(diǎn)以外,Raft算法、PBFT算法d-PBFT算法的主節(jié)點(diǎn)都由拜占庭節(jié)點(diǎn)擔(dān)任。在吞吐量測(cè)試的同時(shí)記錄了共識(shí)結(jié)果,心率傳感器客戶(hù)端發(fā)起心率數(shù)值為65 bpm 的共識(shí)錄入請(qǐng)求,共識(shí)算法分別在正常情況和拜占庭錯(cuò)誤的情況下返回共識(shí)結(jié)果如表3所示。
針對(duì)共識(shí)結(jié)果的返回情況可知在主節(jié)點(diǎn)發(fā)生拜占庭錯(cuò)誤的情況下,Raft算法直接返回了錯(cuò)誤的信息,其安全性無(wú)法保障;而PBFT 算法在此情況下并沒(méi)有及時(shí)地返回共識(shí)結(jié)果,它總是會(huì)進(jìn)入到了自我糾錯(cuò)的視圖切換階段,即使最終能返回正確的共識(shí)結(jié)果,但視圖切換的過(guò)程會(huì)產(chǎn)生額外的開(kāi)銷(xiāo);僅有PoW 算法和d-PBFT 算法能及時(shí)返回正確的共識(shí)結(jié)果。首先PoW 算法的安全性非常高,作為完全去中心化的算法它總是能返回正確的共識(shí)結(jié)果;然后d-PBFT 算法的安全性排在第二,它被拜占庭節(jié)點(diǎn)“欺騙”過(guò)一次之后就會(huì)將它標(biāo)記起來(lái),之后會(huì)直接拒絕它成為主節(jié)點(diǎn)來(lái)降低拜占庭節(jié)點(diǎn)的影響,從而提高共識(shí)的安全性。
表3 共識(shí)結(jié)果對(duì)比Tab.3 Consensus result comparison
本文對(duì)提出的改進(jìn)算法d-PBFT 共識(shí)算法進(jìn)行了對(duì)比測(cè)試,對(duì)比的算法包括完全去中心化的PoW 算法、部分去中心化的Raft算法和PBFT算法,測(cè)試的項(xiàng)目包括共識(shí)算法的吞吐量和達(dá)成共識(shí)的時(shí)延,綜合分析了d-PBFT 算法相較于這些主流算法的獨(dú)特優(yōu)勢(shì)。在吞吐量方面,雖然d-PBFT 算法不如Raft 算法但卻能檢測(cè)出網(wǎng)絡(luò)中的拜占庭節(jié)點(diǎn),從而更能保障聯(lián)盟網(wǎng)絡(luò)用戶(hù)數(shù)據(jù)的安全性,而在有拜占庭節(jié)點(diǎn)的網(wǎng)絡(luò)中d-PBFT 算法又比PBFT 算法更能排除拜占庭節(jié)點(diǎn)的干擾,進(jìn)而在吞吐量上得到一定的提升。在共識(shí)時(shí)延方面,d-PBFT 算法遙遙領(lǐng)先完全去中心化的PoW 算法,并且能和另外兩個(gè)部分去中心化的算法持平,而在拜占庭節(jié)點(diǎn)的威脅下Raft 算法束手無(wú)策,PBFT算法會(huì)在拜占庭節(jié)點(diǎn)擔(dān)任主節(jié)點(diǎn)時(shí)受到不小的干擾,而d-PBFT 算法在拜占庭節(jié)點(diǎn)的干擾下仍具有較好的表現(xiàn)。所以,d-PBFT 共識(shí)算法能夠兼顧信息安全、吞吐量和共識(shí)時(shí)延三方面需求,十分適合應(yīng)用到聯(lián)盟區(qū)塊鏈當(dāng)中[18]。
本文在PBFT 算法的理論基礎(chǔ)上提出了d-PBFT 共識(shí)算法,在該算法中新增了節(jié)點(diǎn)狀態(tài)的監(jiān)測(cè)和惡意節(jié)點(diǎn)的隔離機(jī)制,使得算法不僅能容忍拜占庭惡意節(jié)點(diǎn)還能捕獲到拜占庭節(jié)點(diǎn),隔離并禁止將它們選為主節(jié)點(diǎn),以此來(lái)降低它們?cè)诼?lián)盟網(wǎng)絡(luò)中的影響。實(shí)驗(yàn)結(jié)果表明,當(dāng)聯(lián)盟網(wǎng)絡(luò)中存在拜占庭節(jié)點(diǎn)的情況下,該算法能降低拜占庭節(jié)點(diǎn)的干擾,提升共識(shí)結(jié)果的生成量。此外該算法仍然存在值得改進(jìn)的地方,雖然該算法能標(biāo)識(shí)并隔離拜占庭節(jié)點(diǎn),但刪除信息中心的共識(shí)節(jié)點(diǎn)需要重啟聯(lián)盟網(wǎng)絡(luò),下一步要優(yōu)化聯(lián)盟網(wǎng)絡(luò)動(dòng)態(tài)增刪共識(shí)節(jié)點(diǎn)的能力。