顧 鑫,戴 歡,2+,唐 毅,2,孫 立,索梓翔
(1.蘇州科技大學 電子與信息工程學院,江蘇 蘇州 215009;2.蘇州和數區塊鏈應用研究院有限公司,江蘇 蘇州 215000)
物聯網技術[1]仍有很多的問題亟待解決。例如,物聯網設備的數據安全性等級較低,容易成為各種攻擊的對象[2]。目前,Sybil attack攻擊[3]是常見的物聯網設備攻擊。此外,傳統的物聯網系統通常采用中心服務器進行數據處理,這使得系統內物聯網設備的連通性較弱,設備間通信的安全性較低[4]。此外,數據隱私也是物聯網系統需要面對的一個難題[5]。
區塊鏈本質上是一種分布式的數據庫技術,利用密碼學、點對點通信、共識算法等多項技術來解決現有中心化機制存在的數據壟斷問題和數據安全問題,共同維護全網數據的有效性和安全性,已在車聯網[6]、智慧醫療[7]等領域展開應用,在未來物聯網系統的建設中具有更廣闊的應用前景[8]。
針對基于區塊鏈的物聯網系統存在通信復雜度高、系統吞吐量低、物聯網設備易受攻擊等問題,本文提出一種基于可信位置和時間的雙層拜占庭容錯共識機制,即CBFT共識機制。通過將物聯網系統構建在一個分布式、多層次的區塊鏈共識機制模型上,提高物聯網設備參與共識的效率,減少共識過程的通信次數,增加系統整體的數據吞吐量。
對于分布式系統中的拜占庭將軍問題[9],工作量證明算法(proof-of-work,PoW)[10]需要具有高強度計算能力的工作節點,PBFT共識算法則相對簡明有效,對節點的算力要求不高。PBFT共識過程如圖1所示[11],其中,Client是客戶端,Replica0是主節點,Replica1和Replica2是從節點,Replica3是無效節點。

圖1 PBFT共識過程
PBFT共識算法分為以下幾個部分:
(1)request階段:主節點Replica0接收客戶端Client發送的消息請求。
(2)pre-prepare階段:從節點Replica1和Replica2接收并確認主節點Replica0發起對應的預準備消息,進入prepare階段。
(3)prepare階段:從節點Replica1和Replica2向所有節點發送準備消息,若節點Replica接收到并驗證不同節點的預準備和準備消息數量超過2n+1個,則進入commit階段。
(4)commit階段:節點Replica向其它節點廣播確認消息,其它節點接收并驗證廣播消息,若節點Replica接收的確認消息數量達到2n+1個,則進入reply階段。
(5)reply階段:共識集合中的節點Replica會將最終的反饋消息發送給客戶端,若客戶端接收到的n+1個相同的回復消息,則客戶端的請求已經達成全網共識。
PBFT共識算法雖然相較于其它共識算法不需要消耗大量算力資源,且共識速度較快,但共識節點有限。當大量節點加入區塊鏈系統時,PBFT共識算法在準備和確認階段,需要所有節點全網廣播信息,導致單位時間的通信傳輸量和通信次數大大增加,系統的數據吞吐量卻反而降低。
目前,針對PBFT共識算法的改進研究主要集中在提高參與共識的節點質量和共識結構的優化兩個方面[12]。
提高共享節點質量方面,文獻[13]提供了一種委托人信任模型(EigenTrust-Model),通過評價模型,減少惡意節點的共識參與度,從而提升共識的效率,增加系統整體的吞吐量。文獻[14,15]通過搭建角色模型的方式,投票評價節點的可信度,篩選出可信節點進行共識,減少共識算法的冗余。文獻[16]利用節點信任模型(PeerTrust-Model),提高參與共識的節點可信度,并搭建三鏈結構提升區塊鏈的共識效率,減少PBFT的通信復雜度。文獻[17]面向物聯網場景,利用改進后的CSMA/CA協議代替原有的TCP協議,提升設備通信速度,降低設備的共識響應時間,從而保證共識的速度。文獻[18]通過增加屬性集的方式,利用評價機制動態賦予或刪除節點屬性,對誠實屬性的集群進行共識,以降低系統的通信復雜度。
共識結構優化方面,文獻[19]提出使用可拓展的雙層PBFT共識協議,降低單層PBFT的通信次數。文獻[20]提出使用多層PBFT共識機制降低單層與固定雙層共識中的通信量,并得出通信復雜度達到最低時的每一層的節點個數與通信次數。文獻[21]提出基于聚類算法的改進PBFT共識機制,利用聚類算法根據節點的特征進行聚類,并將改進后的共識模型用于聚類后的模型,以提高共識效率。文獻[22]提出使用環簽名技術,簽名發起者自發組成環,環內用戶根據每次簽名的反饋消息情況進行調整,再次組成環,以減少視圖切換的頻率,降低共識耗時。
本文所提的基于CBFT的物聯網系統架構如圖2所示,系統架構主要分為3層:感知層、共識層和應用層。每層的功能如下:

圖2 區塊鏈與物聯網設備的系統架構
(1)感知層:該層由具有一定計算與存儲能力的低功耗底層物聯網設備組成,例如溫濕度傳感器、煙霧傳感器、紅外傳感器等。該層設備稱為輕節點(Light Node),具有向全節點和強節點即邊緣服務器發送交易請求和交易信息,存儲部分自身設備信息的功能。由輕節點組成的集合稱為從集合。輕節點具有提出普通交易的權限,普通交易主要用于根據不同的底層設備應用要求,改變這條鏈上的總賬本狀態。比如,各種類型傳感器等。
(2)共識層:該層由具有計算與存儲邊緣服務器組成。邊緣服務器在該層中根據信用評價的等級劃分為強節點(Junior Node)與全節點(Senior Node)。由強節點組成的集合稱為子集合,由全節點組成的集合稱為父集合。全節點是一定范圍內性能最好的邊緣服務器,參與父集合和子集合兩個集合的共識過程。強節點是性能次于全節點的邊緣服務器,只參與子集合的共識過程。全節點與強節點具有提出配置交易的權限,配置交易用于改變區塊鏈的區塊配置。比如,更新全節點或強節點的信用值以改變當前的集合結構。
(3)應用層:感知層與共識層都服務于一個物聯網系統,該系統利用物聯網設備收集各類感知數據,確保管理者能夠及時監控設備信息。系統中記錄了設備的數量、類型和地理位置信息。此外,管理后臺的管理員賬號具有對設備和其它用戶的管理權限,能夠查看設備當前的狀態等,并為其它用戶授予查詢該設備信息的權限。系統中需要用到的符號及說明見表1。

表1 相關符號說明
針對上述基于區塊鏈的物聯網系統可能存在惡意偽裝設備攻擊和高共識響應延遲,提出了一種基于位置和時間的可信雙層PBFT共識機制。該共識機制周期分為3個階段:初始階段、共識階段和激勵階段。
初始階段包括預分配和遴選兩個部分。
(1)預分配:為每個強節點分配密鑰,分配初始信用幣等。并根據GeoHash(geographical hash,GeoHash)協議將所有的強節點劃分成k個子集合。GeoHash編碼長度越長所表示的位置越精確,兩個編碼的相似度越高代表兩個位置離得越近。最后,各個子集合中Token最多的節點被選為子集合中的全節點。由此,邊緣計算層構成一個雙層多中心化的網絡結構。
(2)遴選:根據邊緣服務器的工作特性,輕節點在規定時間內發送一定數量的位置信息和時間戳信息給距離近的強節點,形成以強節點為中心、四周分布著輕節點的從集合。從集合中的強節點根據輕節點發送的GeoHash和時間戳,生成位置定時器(locational clock,LC),位置定時器見表2,通過位置定時器對從集合中的輕節點進行遴選,挑選出誠信節點,參與共識過程。

表2 位置定時器
強節點遴選輕節點的過程如算法1所示,G(l,t1,t2,n) 是一個功能函數,負責將位置信息、時間戳和信息數量封裝成幀。如果出現發送的信息數量少于信息閾值N,或者邏輯位置映射不同或者時間戳中出現相同的初始時間戳或者相同的當前時間戳的情況,那么這個輕節點將會被認定為不可信。
算法1:偽代碼的算法1名稱
輸入:(L,G(l,t1,t2,n),N)
輸出:l[status]
(1)while IsJuniorNode() do
(2) for eachl∈Ldo
(3)g←G(l,t1,t2,n)
(4) while Len(l)≥Ndo
(5) for eachg1,g2∈gdo
(6) ifg1[loc]≠g2[loc]org1[t1]=g2[t1]org1[t2]=g2[t2]or Len(t2-t1)≤24 h
(7) then
(8)l[status]←false
(9) break
(10) end if
(11)l[status]←true
(12) end for
(13)end while
經過初始階段,輕節點通過遴選被分為k個子集合,每個集合中都具有一個強節點,強節點組成的每個子集合中都有一個信用值最高即Token最多的全節點,為共識做好了準備。
整個共識過程如圖3所示。

圖3 CBFT共識過程


S-prepare:子集合中的全節點在驗證并接收子集合中數量超過2numi+1的準備消息后,向父集合的其它全節點發送準備消息,并接收其它全節點的準備消息,消息格式為 <
S-commit:父集合的全節點向其它的全節點發送確認消息,確認消息格式為<


激勵階段分為Token獎勵與信用重置。僅適用于強節點與全節點。
(1)Token獎勵:Token值的大小代表了節點信用的高低,是表示節點可靠性的一種方式,這里使用R代表節點的Token值。在一輪共識完成后,系統根據激勵模型對節點的行為獎勵一定數量的Token。子集合中每個強節點的R值具體計算如下
(1)

(2)
Δt為第i個子集合中第m個強節點的共識時間,ΔT為第i個子集合所有強節點的共識時間
(3)
k為子集合中強節點的數量
(4)

當強節點在第二輪共識,出現發送交易速度過慢或者離線的情況時,R值會隨著共識時間的增加而減少。當r1和r2不發生變化時,當前共識下R值越高,強節點所得到的Token獎勵越多。
(2)信用重置:對R值過低或者過高的節點進行信用恢復。
按照節點的R值賦予節點等級,如表3,x,y,z為變更等級的閾值,具體取值根據系統對邊緣服務器效率的要求設置。

表3 節點信用級別
當節點的R值低于x時,節點仍可以繼續發送交易,但從下一周期開始,該節點的R值將被重置為c。子集合內連續兩次擔任全節點或者R值高于z的節點,其R值被重置為x并標識。標識后的節點在下面兩個周期中不能參與父集合的共識過程。在兩個周期后,標記節點的信用值重置為c,重新參與共識過程。重置信用能夠激勵信用低的節點規范共識行為以獲得更多的Token獎勵,并防止高信用節點出現中心化的問題。
第一個周期結束時,每個子集合中R值最高的強節點擔任全節點。從第二個周期開始,由全節點負責代表子集合在父集合內進行共識。
本文以共識耗時和系統吞吐量作為指標,分析CBFT共識機制與傳統PBFT共識算法的性能。共識耗時是衡量改進后的共識算法和區塊鏈性能的重要指標。吞吐量是系統處理事務能力的重要指標。
實驗使用的Fabric版本為Fabric0.6,運行環境為Intel i7-10875H CPU 2.30 GHz和16 GB內存,操作系統為Ubantu server20.04,軟件版本為Docker version 20.10.6,build 370c289。
本文中計算共識耗時是輕節點從發送交易到交易被打包成區塊并上鏈發送到云服務器所消耗的時長。
共識響應時延是共識耗時的重要部分,從強節點發出共識請求到最后一個共識節點響應請求為完整的共識響應過程。共識響應時延的最大和最小值分別表示共識節點中最快和最慢的共識響應時間。如圖4所示,PBFT共識算法面對強節點數量少的共識網絡時,共識響應時間并不會發生明顯變化。但隨著強節點數量的不斷增加,共識響應時間會產生明顯變化。當強節點數量不斷增加時,節點間的通信次數成倍增加,使得共識響應時延顯著增加。而CBFT共識算法面對強節點數量少的共識網絡時,平均共識響應時間與PBFT相近。當強節點數量的不斷增加時,CBFT通過集合內與集合間共識的方式,減少強節點間的通信次數,使得共識響應時延顯著降低。

圖4 PBFT共識響應時延最大和最小值
如圖5所示,CBFT在面對數量較多的強節點時,利用雙層共識的特點,提升全節點的比例,提高全節點的共識參與度,增加子集合間的通信次數,降低強節點的共識次數,提升共識響應速度。

圖5 CBFT共識響應時延
如圖6所示,PBFT算法的共識耗時隨著輕節點數量的不斷增加而成倍增加。當參與共識的輕節點數量控制在文獻[4,16]時,PBFT共識算法能夠保證共識效率,一旦超過閾值,其共識效率將得不到基本保證。而CBFT算法的共識耗時隨著輕節點數量的增加卻保持相對穩定。當強節點數量不變時,強節點依據位置定時器遴選出誠實的輕節點,共識過程只在交易所在的子集合和父集合進行,系統的共識耗時不會受到輕節點數量的影響。

圖6 PBFT和CBFT共識耗時對比
實驗選取100個輕節點和16個強節點,其中輕節點分為20個惡意節點或故障節點,80個正常節點。強節點均為誠實節點。
如圖7所示,當節點中出現故障節點和惡意節點時,PBFT相較于CBFT算法不能有效識別故障節點和惡意節點,無法保證輕節點發送的交易質量,降低系統安全性的同時,系統吞吐量下降。
如圖8所示,PBFT算法的吞吐量易受節點數量的影響。節點數量增加時,節點交易質量無法得到保證,系統產生算力冗余,吞吐量顯著下降。而當強節點和全節點數量穩定不變時,CBFT算法的吞吐量在不受節點質量影響的同時,隨著輕節點數量的增加而保持相對穩定。

圖8 PBFT和CBFT系統吞吐量對比
本文旨在針對基于傳統PBFT共識算法的物聯網系統存在共識耗時高、通信開銷大的問題,提出了CBFT共識機制。利用緣服務器的特性,將距離近的物聯網設備組成從集合,依據接收到的信息對從集合中的設備進行遴選,降低故障節點或惡意節點加入共識的可能性,減少底層的通信次數與通信開銷,進一步增加可信設備的共識參與度,提高參與共識的交易質量。同時,通過改進的雙層共識結構,降低邊緣服務器之間的通信次數,降低共識的耗時。最后,通過代幣獎勵和信用重置的激勵機制,提高系統處理大批量數據的能力,提升系統的數據吞吐量。