蘇瑞國(guó),陽(yáng)建,秦繼偉,武曉雄,賈振紅
(新疆大學(xué) 信息科學(xué)與工程學(xué)院,烏魯木齊 830046)
目前,物聯(lián)網(wǎng)(Internet of Things,IoT)技術(shù)已經(jīng)廣泛應(yīng)用于工業(yè)自動(dòng)化、電子健康、物流等領(lǐng)域的智能系統(tǒng)中[1],這些智能系統(tǒng)通過(guò)大規(guī)模復(fù)雜的工業(yè)物聯(lián)網(wǎng)實(shí)現(xiàn)自動(dòng)化和高效化,從而提高系統(tǒng)服務(wù)質(zhì)量和資源利用率[2]。物聯(lián)網(wǎng)是由種類繁雜的傳感器設(shè)備和網(wǎng)關(guān)組成的分布式網(wǎng)絡(luò),其所有系統(tǒng)和應(yīng)用都可以接入互聯(lián)網(wǎng),實(shí)現(xiàn)資源和信息的高效共享。物聯(lián)網(wǎng)設(shè)備采用分布式部署,且具有龐大的設(shè)備數(shù)量和規(guī)模,如何處理智能設(shè)備非結(jié)構(gòu)化數(shù)據(jù)以及保障工業(yè)網(wǎng)絡(luò)的訪問(wèn)控制和系統(tǒng)中各設(shè)備的通信質(zhì)量,是智能系統(tǒng)所面臨的巨大挑戰(zhàn)[3],需要使用更高的數(shù)據(jù)采集標(biāo)準(zhǔn)以及統(tǒng)一的協(xié)議,將異構(gòu)數(shù)據(jù)整合到統(tǒng)一的系統(tǒng)中,實(shí)現(xiàn)數(shù)據(jù)資源的整合以及不同設(shè)備之間的互操作[4-5]。
區(qū)塊鏈?zhǔn)欠植际降拇鎯?chǔ)系統(tǒng),由一個(gè)接一個(gè)帶有時(shí)間戳的區(qū)塊組成[6],以點(diǎn)對(duì)點(diǎn)(P2P)網(wǎng)絡(luò)分布式數(shù)據(jù)庫(kù)的形式存在,因此,區(qū)塊鏈具有分散性、不可篡改性和可追溯的特點(diǎn),憑借這些特點(diǎn),其在物聯(lián)網(wǎng)中得到有效利用,可實(shí)現(xiàn)更高效的數(shù)據(jù)交換、管理以及訪問(wèn)控制[7-9]。物聯(lián)網(wǎng)結(jié)合區(qū)塊鏈的共識(shí)機(jī)制,有助于避免非法甚至惡意節(jié)點(diǎn)的接入。Hyperledger Fabric 是一個(gè)主流的開(kāi)源聯(lián)盟鏈區(qū)塊平臺(tái),不僅擁有區(qū)塊鏈去中心化、數(shù)據(jù)不可篡改、多通道等特點(diǎn),還提供了高效的共識(shí)機(jī)制、智能合約、數(shù)據(jù)存儲(chǔ)等服務(wù),Hyperledger Fabric 與物聯(lián)網(wǎng)相結(jié)合,既可保證數(shù)據(jù)的可信度,又能為柔性可信溯源的實(shí)現(xiàn)提供架構(gòu)基礎(chǔ)[10-11]。
在結(jié)合區(qū)塊鏈和物聯(lián)網(wǎng)技術(shù)的過(guò)程中,區(qū)塊鏈網(wǎng)絡(luò)的共識(shí)效率和可擴(kuò)展性是目前的重點(diǎn)研究方向[12]。然而,大規(guī)模的物聯(lián)網(wǎng)系統(tǒng)中設(shè)備資源有限,現(xiàn)有相關(guān)研究提出的共識(shí)算法主要針對(duì)公共加密區(qū)塊鏈,如PoW、PoS 和DPoS 都是通過(guò)消耗計(jì)算機(jī)算力,以挖礦的方式來(lái)實(shí)現(xiàn)共識(shí),從而導(dǎo)致共識(shí)時(shí)間較長(zhǎng)、計(jì)算機(jī)資源浪費(fèi)等問(wèn)題,并不適用于大規(guī)模的物聯(lián)網(wǎng)區(qū)塊鏈系統(tǒng)[13-14]。文獻(xiàn)[15]為確保區(qū)塊鏈車聯(lián)網(wǎng)的區(qū)塊正確提交以及選擇可靠的參與者,提出一個(gè)兩階段軟安全增強(qiáng)的解決方案,其目的是防止公共區(qū)塊鏈中活躍參與者和備用參與者之間內(nèi)部串通,產(chǎn)生虛假交易,但是該方案僅針對(duì)車聯(lián)網(wǎng),可擴(kuò)展性較差。基于認(rèn)證證明的共識(shí)算法通過(guò)信任值來(lái)實(shí)現(xiàn)區(qū)塊鏈的區(qū)塊驗(yàn)證,但是如果一個(gè)節(jié)點(diǎn)被破壞,就可能犧牲其信任值并驗(yàn)證惡意交易,從而將錯(cuò)誤的區(qū)塊提交到分類賬本中[16-17]。Raft 共識(shí)算法可以在高效解決分布式系統(tǒng)中各個(gè)節(jié)點(diǎn)日志內(nèi)容一致性問(wèn)題的同時(shí),使得集群具備一定的容錯(cuò)能力,但該算法不支持容錯(cuò)作惡節(jié)點(diǎn)(拜占庭節(jié)點(diǎn))[18]。實(shí)用拜占庭容錯(cuò)(Practical Byzantine Fault Tolerance,PBFT)算法共識(shí)機(jī)制最早是為了解決區(qū)塊鏈網(wǎng)絡(luò)中的拜占庭節(jié)點(diǎn)而被引入到聯(lián)盟鏈中,其通過(guò)三段式全廣播投票的方式,在惡意節(jié)點(diǎn)數(shù)不高于全節(jié)點(diǎn)數(shù)1/3 的情況下,該算法能夠同時(shí)保證共識(shí)階段的安全性和活性[19],但是,隨著網(wǎng)絡(luò)節(jié)點(diǎn)數(shù)量的增多,該算法存在通信開(kāi)銷大、擴(kuò)展性差、效率低的問(wèn)題[20]。文獻(xiàn)[21]提出一種信用授權(quán)的拜占庭容錯(cuò)(Credit-Delegated Byzantine Fault Tolerance,CDBFT)方案,其引入了投票獎(jiǎng)勵(lì)懲罰和信用評(píng)價(jià)機(jī)制,然而,在區(qū)塊鏈網(wǎng)絡(luò)中,參與節(jié)點(diǎn)是經(jīng)過(guò)認(rèn)證和信任的,獎(jiǎng)懲機(jī)制的重要性低于共識(shí)機(jī)制的可擴(kuò)展性。文獻(xiàn)[22]提出一種基于角色控制的拜占庭容錯(cuò)(Role management-based Practical Byzantine Fault Tolerance,RPBFT)算法,其將節(jié)點(diǎn)分為3 種類型,通過(guò)選舉機(jī)制和獎(jiǎng)勵(lì)機(jī)制對(duì)節(jié)點(diǎn)的角色類型進(jìn)行轉(zhuǎn)換管理,提高了節(jié)點(diǎn)的可靠性和動(dòng)態(tài)性,但該算法的三階段全廣播投票方式依然存在網(wǎng)絡(luò)通信量較高的問(wèn)題。文獻(xiàn)[23]提出一種基于投票算法(VBFT)的拜占庭容錯(cuò)算法,該算法將網(wǎng)絡(luò)中的節(jié)點(diǎn)劃分為3 種具備不同職責(zé)的節(jié)點(diǎn),分別是客戶端、從節(jié)點(diǎn)和主節(jié)點(diǎn),節(jié)點(diǎn)之間的狀態(tài)可以隨時(shí)動(dòng)態(tài)調(diào)整,但是,該方案生成區(qū)塊的時(shí)間較長(zhǎng),并不適用于大規(guī)模的物聯(lián)網(wǎng)區(qū)塊鏈。文獻(xiàn)[24]基于信譽(yù)度選舉的方式篩選節(jié)點(diǎn),該方法通過(guò)改進(jìn)PBFT算法,以減少通信開(kāi)銷,提高共識(shí)效率。
以上解決方案大多采用分片和并行共識(shí)的方式改進(jìn)PBFT 算法,雖然在一定程度上提高了共識(shí)效率和可擴(kuò)展性,但是仍采用PBFT 的三段式全廣播投票方式來(lái)實(shí)現(xiàn)共識(shí),導(dǎo)致算法存在帶寬復(fù)雜度較高、共識(shí)吞吐量較大的問(wèn)題。本文基于Hyperledger Fabric平臺(tái)[25],提出一種輕量級(jí)區(qū)塊鏈投票和交易證明(Proof of Vote and Transaction,PoVT)共識(shí)機(jī)制。在擁有拜占庭節(jié)點(diǎn)的情況下,通過(guò)驗(yàn)證交易的方式確認(rèn)共識(shí)節(jié)點(diǎn),即利用節(jié)點(diǎn)之間的交易來(lái)篩選參與共識(shí)的會(huì)話節(jié)點(diǎn),以減少共識(shí)過(guò)程中的節(jié)點(diǎn)數(shù)量,提高可擴(kuò)展性。在此基礎(chǔ)上,利用一次全廣播投票的方式在參與共識(shí)的節(jié)點(diǎn)中進(jìn)行區(qū)塊確認(rèn),從而將通信開(kāi)銷減少到較低水平,提高每秒交易量并降低帶寬占用和帶寬復(fù)雜度。
本文以Hyperledger Fabric 架構(gòu)為基礎(chǔ)平臺(tái),設(shè)計(jì)一種輕量級(jí)區(qū)塊鏈框架,如圖1 所示,該框架可以結(jié)合物聯(lián)網(wǎng)在工業(yè)生產(chǎn)、物流等多種場(chǎng)景下進(jìn)行擴(kuò)展。
圖1 基于區(qū)塊鏈的輕量級(jí)物聯(lián)網(wǎng)系統(tǒng)框架Fig.1 Lightweight IoT system framework based on blockchain
Fabric通過(guò)會(huì)員服務(wù)提供者(Membership Service Provider,MSP)來(lái)實(shí)現(xiàn)訪問(wèn)控制、權(quán)限控制等操作,從而管理Fabric 中的眾多參與者(Peer、Orderer)。MSP 中包含了參與者的公鑰,聯(lián)盟參與者會(huì)使用私鑰對(duì)交易進(jìn)行簽名背書,MSP 通過(guò)驗(yàn)證簽名的方式來(lái)確保交易背書者是聯(lián)盟參與者。在Fabric中,所有的節(jié)點(diǎn)即對(duì)等節(jié)點(diǎn)(Peer),排序節(jié)點(diǎn)(Orderer)負(fù)責(zé)接收包含背書簽名的交易,對(duì)未打包的交易進(jìn)行排序從而生成區(qū)塊,將其廣播給Peer 節(jié)點(diǎn),然后通過(guò)排序服務(wù)(共識(shí)機(jī)制)來(lái)進(jìn)行區(qū)塊的確認(rèn)提交。通道(Channel)是Orderer 的一個(gè)模塊,排序節(jié)點(diǎn)劃分和管理的私有廣播通道,目的是對(duì)通道的信息進(jìn)行隔離,使得通道外的實(shí)體無(wú)法訪問(wèn)通道內(nèi)的信息,從而提高交易的隱私性。
本文物聯(lián)網(wǎng)區(qū)塊鏈框架包括交易發(fā)起、驗(yàn)證確認(rèn)、區(qū)塊提交3個(gè)階段。物聯(lián)網(wǎng)設(shè)備(IoT1,IoT2,…,IoTN)是能夠產(chǎn)生和接受區(qū)塊鏈交易的設(shè)備,如產(chǎn)品線上的傳感器、掃描槍、智能手機(jī)手表等穿戴設(shè)備,這些設(shè)備被連接到一個(gè)Peer 節(jié)點(diǎn)上,這些節(jié)點(diǎn)可充當(dāng)對(duì)等節(jié)點(diǎn)或背書節(jié)點(diǎn),節(jié)點(diǎn)處理相應(yīng)設(shè)備的交易。在Fabric中存在許多相互鏈接的Peer 節(jié)點(diǎn),這些節(jié)點(diǎn)(N1,N2,…,NN)也可以作為背書節(jié)點(diǎn)或主節(jié)點(diǎn)存儲(chǔ)于網(wǎng)絡(luò)中,MSP 負(fù)責(zé)為這些節(jié)點(diǎn)提供密鑰、簽名以及生成的準(zhǔn)入證明和配置信息。
如圖1 所示,物聯(lián)網(wǎng)設(shè)備上的應(yīng)用程序收集要交換的數(shù)據(jù)作為交易,使用軟件開(kāi)發(fā)工具對(duì)數(shù)據(jù)進(jìn)行格式化,以便能夠在鏈碼上執(zhí)行。交易包括交易數(shù)據(jù)、設(shè)備簽名、目的節(jié)點(diǎn)的公共地址和相應(yīng)的證書。在交易執(zhí)行時(shí),每臺(tái)設(shè)備和Peer 進(jìn)行節(jié)點(diǎn)連接,通過(guò)Channel 向區(qū)塊鏈中的節(jié)點(diǎn)發(fā)送一個(gè)交易提交信息。交易的認(rèn)證和授權(quán)被嚴(yán)格約束在規(guī)定的Channel上,不同Channel 之間相互隔離,因此,節(jié)點(diǎn)不能訪問(wèn)任何其他通道上執(zhí)行的交易。新加入的節(jié)點(diǎn)通過(guò)MSP 注冊(cè)和驗(yàn)證加入到網(wǎng)絡(luò)中,這些節(jié)點(diǎn)可以查詢或添加新的區(qū)塊到賬本中,該過(guò)程能夠確保未經(jīng)識(shí)別和認(rèn)證的用戶或設(shè)備不會(huì)加入網(wǎng)絡(luò)。
所有傳入的交易需要通過(guò)對(duì)設(shè)備、節(jié)點(diǎn)、權(quán)限的驗(yàn)證,這些驗(yàn)證根據(jù)鏈碼中規(guī)定的條件來(lái)進(jìn)行。鏈碼是訪問(wèn)賬本的基本方法,其需要經(jīng)過(guò)節(jié)點(diǎn)的背書、排序、驗(yàn)證和提交環(huán)節(jié)進(jìn)行安裝和實(shí)例化。鏈碼由管理員部署,只要有合適的權(quán)限,鏈碼之間也可以相互調(diào)用。鏈碼是區(qū)塊鏈節(jié)點(diǎn)之間交易的規(guī)則,部署后不可更改,因此,區(qū)塊鏈上的交易可以直接依賴于鏈碼,但是可以通過(guò)升級(jí)來(lái)發(fā)布新的功能或修復(fù)問(wèn)題。在Fabric 的設(shè)計(jì)中,鏈碼運(yùn)行在一個(gè)安全的隔離沙盒(Docker 容器)中,該容器由背書節(jié)點(diǎn)創(chuàng)建和管理,以便隔離背書節(jié)點(diǎn)和鏈碼的運(yùn)行環(huán)境。在現(xiàn)有Fabric中,鏈碼決定由多少個(gè)相鄰節(jié)點(diǎn)來(lái)驗(yàn)證一個(gè)交易,主要原則是利用一大批節(jié)點(diǎn)通過(guò)背書來(lái)建立共識(shí)。在本文系統(tǒng)中,根據(jù)一個(gè)會(huì)話中的交易提交情況,使用一定比例的節(jié)點(diǎn)作為背書節(jié)點(diǎn),從而減少共識(shí)環(huán)節(jié)的通信開(kāi)銷。
交易確認(rèn)和區(qū)塊生成通過(guò)背書實(shí)現(xiàn)。Orderer節(jié)點(diǎn)根據(jù)各個(gè)節(jié)點(diǎn)交易的先后時(shí)序,經(jīng)過(guò)共識(shí)來(lái)確定并生成新的區(qū)塊,將其添加到分類帳本中。在區(qū)塊確認(rèn)時(shí),如果惡意節(jié)點(diǎn)向Orderer 節(jié)點(diǎn)發(fā)送偽造交易將導(dǎo)致共識(shí)失敗,無(wú)法生成新的區(qū)塊。比特幣、以太坊等數(shù)字貨幣系統(tǒng)在區(qū)塊創(chuàng)建時(shí)執(zhí)行的共識(shí)算法,都通過(guò)高難度的挖礦算法來(lái)確保惡意交易不會(huì)被添加到區(qū)塊中。在物聯(lián)網(wǎng)中,設(shè)備的運(yùn)算能力有限,為實(shí)現(xiàn)較高的交易速率,需要選擇合適的共識(shí)算法。
確認(rèn)是交易處理的最后一個(gè)階段。當(dāng)一個(gè)區(qū)塊通過(guò)共識(shí)PoVT 算法最終確定后,則該區(qū)塊就準(zhǔn)備好分發(fā)給網(wǎng)絡(luò)中的所有節(jié)點(diǎn),這些節(jié)點(diǎn)可以將確認(rèn)的數(shù)據(jù)添加到它們的分類賬本中。只有在PoVT 算法達(dá)到共識(shí)時(shí)進(jìn)行區(qū)塊確認(rèn),交易發(fā)起者才會(huì)被批準(zhǔn)生成新塊,然后將其連同Orderer 節(jié)點(diǎn)的簽名分發(fā)給網(wǎng)絡(luò)中的所有連接節(jié)點(diǎn),最后更新全局動(dòng)態(tài)。
本文使用網(wǎng)絡(luò)中的部分節(jié)點(diǎn)作為背書節(jié)點(diǎn),通過(guò)投票機(jī)制來(lái)進(jìn)行區(qū)塊確認(rèn),從而降低信息傳遞開(kāi)銷,提高安全性和系統(tǒng)交易率。為了提升共識(shí)的可擴(kuò)展性,本文采用一種混合機(jī)制,將整個(gè)共識(shí)過(guò)程分為兩部分,即交易驗(yàn)證和共識(shí)形成:
1)交易驗(yàn)證。在本文所提共識(shí)模型中,源節(jié)點(diǎn)從相連的物聯(lián)網(wǎng)設(shè)備接收交易信息,根據(jù)鏈碼規(guī)則進(jìn)行交易提交和驗(yàn)證,并檢查目標(biāo)物聯(lián)網(wǎng)設(shè)備是否也與網(wǎng)絡(luò)相連,如果是,則執(zhí)行交易提交過(guò)程,目標(biāo)節(jié)點(diǎn)對(duì)鏈碼進(jìn)行驗(yàn)證(用于交叉檢查交易),如果被批準(zhǔn),則將交易轉(zhuǎn)發(fā)給Orderer 再執(zhí)行共識(shí)。因此,交易驗(yàn)證只限于直接參與交易的節(jié)點(diǎn),在不影響安全性的前提下,能夠大幅減少信息交換所需時(shí)間以及節(jié)點(diǎn)間的通信開(kāi)銷。
2)共識(shí)形成。Orderer 節(jié)點(diǎn)在一個(gè)候選區(qū)塊上執(zhí)行共識(shí),該區(qū)塊包含了其在一定時(shí)間內(nèi)收集到的若干個(gè)經(jīng)過(guò)驗(yàn)證的交易。使用圖2 所示的方式建立一個(gè)共識(shí)會(huì)話網(wǎng)絡(luò)的成員列表。
圖2 共識(shí)會(huì)話網(wǎng)絡(luò)生成過(guò)程Fig.2 Consensus session network generation process
在共識(shí)會(huì)話網(wǎng)絡(luò)生成過(guò)程中,Orderer 節(jié)點(diǎn)從網(wǎng)絡(luò)收集交易,根據(jù)交易信息中的源節(jié)點(diǎn)和目標(biāo)節(jié)點(diǎn)生成一組會(huì)話節(jié)點(diǎn),這些節(jié)點(diǎn)將參與共識(shí)環(huán)節(jié)。在生成共識(shí)會(huì)話網(wǎng)絡(luò)之后,通過(guò)PoVT 算法進(jìn)行區(qū)塊的共識(shí)和提交。PoVT 算法描述如算法1 所示。
算法1PoVT 算法
在算法1 中:N為共識(shí)中的節(jié)點(diǎn)數(shù)量;B′為本輪投票前一輪的區(qū)塊;B為當(dāng)前區(qū)塊信息;h為當(dāng)前的區(qū)塊高度;T為收到的交易集合;V為待提交區(qū)塊節(jié)點(diǎn)收到的投票集合。在共識(shí)過(guò)程中,首先主節(jié)點(diǎn)向其他節(jié)點(diǎn)發(fā)送當(dāng)前產(chǎn)生的一個(gè)新的區(qū)塊,其他節(jié)點(diǎn)等待這個(gè)新的區(qū)塊,如果沒(méi)有收到,則會(huì)發(fā)生propose_timeout,廣播TIME_OUT 信息,如果除主節(jié)點(diǎn)以外的其他節(jié)點(diǎn)在設(shè)定的時(shí)間內(nèi)收到新的交易區(qū)塊,則節(jié)點(diǎn)廣播VOTE 消息。在投票階段,如果vote_timeout 和vote_failure發(fā)生,將執(zhí)行VOTE_TIMEOUT 和VOTE_FAIL;若沒(méi)有發(fā)生,且當(dāng)前參與共識(shí)的所有節(jié)點(diǎn)在規(guī)定的時(shí)間內(nèi)收到足夠多的投票消息時(shí),執(zhí)行COMMIT 來(lái)提交區(qū)塊,在這個(gè)過(guò)程中,如有節(jié)點(diǎn)最先收集到一定的投票數(shù),則作為主節(jié)點(diǎn)進(jìn)行下一輪共識(shí)。
區(qū)塊生成過(guò)程如圖3 所示,其中,節(jié)點(diǎn)4 為拜占庭節(jié)點(diǎn),節(jié)點(diǎn)1 為當(dāng)前投票回合的主節(jié)點(diǎn),區(qū)塊n將在投票給該區(qū)塊時(shí)成為候選區(qū)塊,并且最終會(huì)在投票給第n+1 個(gè)區(qū)塊時(shí)進(jìn)行提交。
圖3 PoVT 共識(shí)過(guò)程Fig.3 PoVT consensus process
PBFT 形成一輪共識(shí)需要3 個(gè)階段,領(lǐng)導(dǎo)者首先向其他節(jié)點(diǎn)廣播消息,節(jié)點(diǎn)在第二階段對(duì)收到的消息進(jìn)行投票,節(jié)點(diǎn)根據(jù)最后階段收到的投票發(fā)送預(yù)提交消息。在本文模型的共識(shí)過(guò)程中,只需2 個(gè)階段就可以提交區(qū)塊,領(lǐng)導(dǎo)者首先向其他節(jié)點(diǎn)廣播消息,然后節(jié)點(diǎn)對(duì)領(lǐng)導(dǎo)者在第二階段發(fā)送的消息進(jìn)行投票,網(wǎng)絡(luò)帶寬復(fù)雜度分別為O(n2)和O(n)。相較于PBFT 中三階段共識(shí)的復(fù)雜度(O(n2)、O(n2)和O(n)),本文共識(shí)機(jī)制具有更低的帶寬復(fù)雜度。
本節(jié)分析所提算法的安全性,并將其與現(xiàn)有PBFT和CDBFT 算法進(jìn)行對(duì)比。仿真通過(guò)Hyperledger Fabric v1.4.0 平臺(tái)運(yùn)行。物聯(lián)網(wǎng)設(shè)備交易的生成通過(guò)Node-Red 應(yīng)用程序完成,該程序?qū)⑸傻牟l(fā)交易輸送到運(yùn)行在Docker 容器中的節(jié)點(diǎn),Docker 容器包含F(xiàn)abric 中GoLang 編寫的鏈碼,一個(gè)配備Core-i5(2.7 GHz 16 GB 內(nèi)存)的系統(tǒng)作為承載Docker 的設(shè)備??紤]到每個(gè)區(qū)塊的交易數(shù)量、對(duì)等體數(shù)量、并發(fā)交易的輸入?yún)?shù)、阻斷時(shí)間在每個(gè)實(shí)驗(yàn)中都有所不同,因此,本文將每個(gè)實(shí)驗(yàn)執(zhí)行10次,并以平均值作為最終結(jié)果。
在物聯(lián)網(wǎng)應(yīng)用設(shè)計(jì)的區(qū)塊鏈系統(tǒng)中,主要有兩種類型的安全風(fēng)險(xiǎn):一是外部風(fēng)險(xiǎn),非成員設(shè)備或節(jié)點(diǎn)可能試圖成為網(wǎng)絡(luò)的一部分,或試圖冒充現(xiàn)有的已存在于網(wǎng)絡(luò)中的節(jié)點(diǎn);二是內(nèi)部風(fēng)險(xiǎn),正確注冊(cè)并擁有有效簽名的設(shè)備和節(jié)點(diǎn)可能會(huì)因?yàn)閻阂夤舳蔀闈撛诎踩L(fēng)險(xiǎn)點(diǎn)。攻擊的目的是讓無(wú)效的交易得到認(rèn)可并提交到分類賬本中,當(dāng)設(shè)備發(fā)起交易,網(wǎng)絡(luò)中的節(jié)點(diǎn)就會(huì)根據(jù)鏈碼來(lái)驗(yàn)證源節(jié)點(diǎn)和目的節(jié)點(diǎn)的地址。對(duì)于外部攻擊,設(shè)備將無(wú)法提供合法證書,因此驗(yàn)證將立即失敗。對(duì)于內(nèi)部攻擊,只要鏈碼存在,則已經(jīng)確認(rèn)的交易就會(huì)有效。在Hyperledger Fabric中,交易由一組節(jié)點(diǎn)認(rèn)可后再一并提交到賬本中。在本文所提解決方案中,交易被轉(zhuǎn)發(fā)到負(fù)責(zé)共識(shí)的節(jié)點(diǎn)上,這些節(jié)點(diǎn)之間相互驗(yàn)證所有的憑證,并將交易轉(zhuǎn)發(fā)給Orderer 節(jié)點(diǎn),從而消除源節(jié)點(diǎn)向Orderer 節(jié)點(diǎn)發(fā)送非法交易的可能性。
在區(qū)塊形成時(shí),區(qū)塊的安全提交意味著不會(huì)產(chǎn)生具有沖突的區(qū)塊。沖突的區(qū)塊包含兩種類型,一種是重復(fù)提交和無(wú)效的交易事務(wù),另一種是具有相同高度的區(qū)塊。在一個(gè)具有3f+1 個(gè)節(jié)點(diǎn)的區(qū)塊鏈網(wǎng)絡(luò)中,最多存在f個(gè)拜占庭節(jié)點(diǎn)時(shí),如果有兩個(gè)不同類型但高度相同的區(qū)塊B1和B2被提交,至少有2f+1 個(gè)節(jié)點(diǎn)提交了區(qū)塊B1,另外至少有2f+1 個(gè)節(jié)點(diǎn)提交了區(qū)塊B2,這意味著節(jié)點(diǎn)提供的投票至少有4f+2個(gè)。系統(tǒng)中最多允許f個(gè)節(jié)點(diǎn)可以同時(shí)進(jìn)行兩次投票,所以最多可以存在4f+1 個(gè)投票。因此,兩個(gè)不同的區(qū)塊不能在相同的高度提交。如果要提交沖突區(qū)塊,至少需要存在2f+1 個(gè)惡意節(jié)點(diǎn),而共識(shí)算法中最多允許存在f個(gè)拜占庭節(jié)點(diǎn)。因此,本文設(shè)計(jì)的共識(shí)算法在同樣具有f個(gè)拜占庭節(jié)點(diǎn)時(shí)可以保證區(qū)塊順利生成。
本節(jié)分析從交易驗(yàn)證到區(qū)塊形成的運(yùn)算時(shí)間,將所提PoVT 算法與Hyperledger Fabric 中使用的PBFT 算法以及文獻(xiàn)[21]中的CDBFT 算法進(jìn)行比較。系統(tǒng)中初始的節(jié)點(diǎn)總數(shù)固定為10,每個(gè)區(qū)塊的交易數(shù)量在1~500 之間。
圖4 所示為每個(gè)區(qū)塊交易數(shù)量增加時(shí)算法所需時(shí)間的變化情況。通過(guò)圖4 可以看出,當(dāng)并發(fā)交易數(shù)為100時(shí),PBFT 算法需要200 ms,CDBFT 算法需要120 ms,而PoVT 算法需要80 ms;對(duì) 于300筆交易,PBFT 算法背書時(shí)間為550 ms,CDBFT 算法需要320 ms,而PoVT 算法需要約210 ms。隨著并發(fā)交易的增加,3 種算法的背書時(shí)間都會(huì)增加,但PoVT 算法的計(jì)算時(shí)間明顯少于PBFT 和CDBFT 算法。
圖4 不同交易數(shù)時(shí)3 種算法的計(jì)算時(shí)間變化情況Fig.4 Calculation time changes of three algorithms under different transaction numbers
圖5 比較了在兩種不同的變量條件下交易最終確定所需的時(shí)間,橫坐標(biāo)為每個(gè)區(qū)塊的交易數(shù)量和相關(guān)的共識(shí)參與者數(shù)量。從圖5 可以看出,當(dāng)每個(gè)會(huì)話的共識(shí)節(jié)點(diǎn)數(shù)量為20、交易數(shù)量為100時(shí),PBFT 算法的背書時(shí)間急劇增加(200 ms),CDBFT算法需要100 ms,而PoVT 算法只需80 ms。PBFT通過(guò)三段全廣播投票方式進(jìn)行共識(shí),而CDBFT 方案投票獎(jiǎng)勵(lì)、懲罰和信用評(píng)價(jià)的過(guò)程所需運(yùn)算時(shí)間較長(zhǎng),如果100%的節(jié)點(diǎn)參與共識(shí)過(guò)程,其所需的時(shí)間將明顯增加。本文所提解決方案通過(guò)選取一定數(shù)量的節(jié)點(diǎn)來(lái)進(jìn)行共識(shí),可以有效減少通信開(kāi)銷。
圖5 不同交易數(shù)和節(jié)點(diǎn)數(shù)時(shí)3 種算法的計(jì)算時(shí)間變化情況Fig.5 Calculation time changes of three algorithms under different number of transactions and nodes
由于共識(shí)必須在特定的區(qū)塊提交時(shí)間內(nèi)形成,為了達(dá)到理想的交易率,對(duì)所需帶寬進(jìn)行分析很有必要。本節(jié)通過(guò)改變每秒并發(fā)交易數(shù)量和參與節(jié)點(diǎn)數(shù)量來(lái)分析帶寬需求情況。如圖6 所示,帶寬需求隨著并發(fā)交易數(shù)量的增加而增加(間接地隨物聯(lián)網(wǎng)中節(jié)點(diǎn)數(shù)量的增加而增加),在一般的區(qū)塊鏈中,帶寬需求與交易數(shù)量的關(guān)系幾乎是線性的,成正比增加,然而,在本文的PoVT 算法中,隨著共識(shí)節(jié)點(diǎn)數(shù)量和共識(shí)環(huán)節(jié)通信量的減少,帶寬需求相較CDBFT 和PBFT 共識(shí)算法分別降低了10%和30%。
圖6 帶寬需求隨并發(fā)交易數(shù)量的變化情況Fig.6 The change of bandwidth demand with the number of concurrent transactions
吞吐量和安全性對(duì)于物聯(lián)網(wǎng)區(qū)塊鏈系統(tǒng)至關(guān)重要,在大規(guī)模物聯(lián)網(wǎng)區(qū)塊鏈系統(tǒng)中,區(qū)塊生成主要基于每個(gè)區(qū)塊有一半以上的參與者形成共識(shí)來(lái)實(shí)現(xiàn),隨著節(jié)點(diǎn)數(shù)量的增加,共識(shí)時(shí)間變得過(guò)長(zhǎng),從而導(dǎo)致吞吐量下降。針對(duì)該問(wèn)題,本文提出一種PoVT 算法,根據(jù)參與直接交易的節(jié)點(diǎn)篩選共識(shí)會(huì)話組,以選擇代理人節(jié)點(diǎn)的方式來(lái)減少共識(shí)節(jié)點(diǎn)數(shù)量。在擁有拜占庭節(jié)點(diǎn)的共識(shí)過(guò)程中,通過(guò)投票方式簡(jiǎn)化共識(shí)流程,從而節(jié)省通信開(kāi)銷。實(shí)驗(yàn)結(jié)果表明,該算法在具有較低帶寬占用的情況下,可以保證交易驗(yàn)證及區(qū)塊創(chuàng)建階段區(qū)塊的安全提交,同時(shí)提高物聯(lián)網(wǎng)區(qū)塊鏈系統(tǒng)的交易率和吞吐量。但是,區(qū)塊鏈系統(tǒng)仍然存在數(shù)據(jù)存儲(chǔ)性能有限的問(wèn)題,下一步將引入分布式存儲(chǔ)系統(tǒng),縮短共識(shí)階段的時(shí)間,從而提高物聯(lián)網(wǎng)區(qū)塊鏈的存儲(chǔ)和共識(shí)效率以及共識(shí)算法的可擴(kuò)展性。