馮春波,阿不都熱衣木江·阿白,葛 翔,王 軼,程 力
(1.中國科學院 新疆理化技術研究所,新疆 烏魯木齊 830011;2.中國科學院大學,北京 100049;3.新疆民族語音語言信息處理實驗室,新疆 烏魯木齊 830011;4.新疆維吾爾自治區信息中心,新疆 烏魯木齊 830011;5.國網新疆電力公司營銷服務中心(資金集約中心、計量中心),新疆 烏魯木齊 830011;6.湖北大學,湖北 武漢 430000)
區塊鏈(Blockchain)[1]是一種由多方共同維護的分布式賬本技術,具有去中心化、不可篡改、可溯源等特性。區塊鏈技術的去中心化特性與物聯網的海量感知網絡具有天然的耦合性[2-3],而基于密碼學原理的不可篡改性和可溯源性則為物聯網設備的身份認證、數據安全和可信存儲提供了理論基礎和全新的設計思路。
物聯網網關是物聯網中感知設備和上層應用連接的樞紐,同時也是物聯網與區塊鏈融合的關鍵設備,將區塊鏈技術引入網關,可以增強物聯網系統的安全性。然而,網關作為一種資源受限的物聯網設備,一般不具備足夠的計算和存儲資源,無法支撐區塊鏈節點功能的正常運行。其次,在網關中對感知設備進行可靠的身份認證,是保障物聯網-區塊鏈融合安全的重要基礎。最后,作為一種數據匯集設備,網關運行時持續從感知設備獲取感知數據,感知數據包含大量的正常感知數據與少量的異常感知數據。相較于正常感知數據,由于環境異常或設備本身異常而產生的異常感知數據對應用安全和設備安全更具價值。因此,如何在資源受限的物聯網網關中,通過區塊鏈技術保障設備接入和運行狀態安全,仍是一個值得探究的重要問題。
針對以上問題,該文設計了一種基于聯盟鏈的輕量級區塊鏈-物聯網網關原型。首先,基于聯盟鏈的SPV[1](Simplified Payment Verification)架構搭建了輕量級的物聯網-區塊鏈網關原型框架,該框架僅存儲本組織相關的交易數據;其次,基于感知設備的流量指紋與行為模式進行感知設備運行狀態下的可信接入檢測;再次,通過高效的機器學習算法識別關鍵異常感知數據并進行上鏈可信存儲;最后,在資源受限網關的輕節點中對區塊頭中的默克爾樹進行剪枝,進一步降低節點的存儲空間需求并大幅度優化關聯交易數據的鏈上驗證時間性能。
近年來,區塊鏈技術的興起為物聯網安全研究開辟了新方向。區塊鏈-物聯網融合系統中,在融合架構方面,輕量級的融合架構是當前研究中需要解決的重要問題。B. Bünz等人[4]提出了基于NIPoPoWs(Non-Interactive Proofs of Proof-of-Work)的FlyClient,其只存儲本地區塊頭數據。王思源等人[5]在其工作中引入SPV節點和超輕節點的概念,將權能令牌以交易的形式存儲在區塊鏈上,并且SPV節點只需存儲區塊頭就能完成交易驗證,而超輕節點只需維護一個令牌哈希值。H. Yahya等人[6]提出每個節點隨機存儲部分區塊鏈數據,并通過鼓勵相互驗證提高數據可信性。上述工作對區塊鏈節點進行的輕量化改進,在進行交易驗證時需要向全節點請求數據,增加了網絡中的通信開銷。
在感知設備安全認證方面,S. Saha等人[7]提出了一種方案,即感知設備和網關之間相互認證,同時網關和邊緣服務器之間也相互認證。邊緣服務器從網關中提取傳感數據并添加到區塊鏈中,在該方案中,它能夠將傳感數據添加到區塊鏈中,從而保證數據的安全性和可靠性,但是感知設備無法與區塊鏈直接建立信任。S.C. Cha等人[8]提出為網關和每個新增設備分別創建智能合約,將兩個智能合約綁定在一起,以實現設備在網關中的認證。沈海波等人[9]和F. Xu等人[10]則直接在網關中增加區塊鏈相關功能模塊。盡管這些方案都有一定的優點,但它們在智能合約、賬本數據等區塊鏈模塊在資源受限的傳統網關中應用所帶來的壓力問題方面考慮不足。
在融合框架的數據處理方面,張利華等人[11]針對電力物聯網數據的數據存儲提出了一種基于聯盟鏈的解決方案。P. Kumar等人[12]面向智慧城市場景,通過區塊鏈技術保證相關的隱私安全。G.S. Aujla等人[13]將區塊鏈技術應用于室內健康監測,通過區塊鏈技術進行數據的安全傳輸。T.H. Pranto等人[14]和M. Sultan等人[15]將區塊鏈技術應用于農產品供應鏈場景中相關數據的安全存儲。上述區塊鏈在物聯網中的應用多是將相關的數據全部存儲在區塊鏈中,這樣物聯網系統產生的高頻感知數據占用了大量的存儲資源。
該文提出了一種基于聯盟鏈的輕量級網關框架,該框架主要由SPV模塊、邊緣計算模塊和外部接口模塊組成,如圖1所示。

圖1 輕量級網關原型框架
SPV模塊是一個輕量級的聯盟鏈節點,其中,數據同步功能同步與本組織相關的交易數據,以降低節點的存儲壓力。默克爾樹剪枝功能對SPV節點區塊頭的默克爾樹進行剪枝優化,進一步降低節點的存儲空間需求,并大幅降低交易驗證速度。本地存儲以LevelDB[16]為載體將區塊鏈數據存儲在網關節點本地,數據服務為其他應用或設備提供交易查詢、驗證服務;邊緣計算模塊包括設備行為模式監測和感知數據異常檢測兩個核心功能,用于感知設備身份合法性判斷和篩選出高價值的異常數據;外部接口模塊用于支撐網關與IPFS(Inter Planetary File System)[17]、云服務器和區塊鏈節點等系統或平臺進行交互,從而實現分布式存儲、大數據分析、智能合約等功能。
網關從感知設備采集感知數據,并從這些數據中提取感知設備的行為模式數據。網關主要處理這兩類數據,其處理流程如圖2所示。

圖2 數據處理流程
網關對設備行為模式數據進行上鏈存儲,并同步存儲在網關的SPV模塊,用于設備的可信接入認證。感知數據經過邊緣計算模塊中感知數據異常檢測功能的處理之后分為正常感知數據和異常感知數據。對于正常感知數據在邊緣側進行聚合形成日志數據,定期存入鏈下擴展存儲—IPFS中,而日志數據的哈希值存儲到區塊鏈上。對于異常感知數據,它們可能對應用的安全或設備的安全產生積極的意義,在邊緣側通過設備的運行狀態判斷異常產生的原因,然后將設備狀態與感知數據一起進行數據上鏈。
設備可信接入既是保障物聯網系統安全的重要手段,也是區塊鏈中數據可信的基礎。本團隊前期研究工作通過基于感知設備流量指紋[18]的方式實現了設備的可信接入,但是缺少對感知設備在運行時行為合法性的監控。為此,該文進一步在網關中實時采集感知設備的行為模式,并通過JS散度(Jensen-Shannon Divergence)衡量感知設備當前的行為模式和鏈上存儲到歷史行為模式的差別,進而判斷感知設備行為的合法性。這種基于JS散度對設備行為進行合法性判斷的算法是一種具有敏捷性的輕量化身份認證算法,只需消耗較少的計算資源。
JS散度是對KL散度(Kullback-Leibler Divergence)缺少對稱性的改進,可以更好地度量兩個概率分布的相似程度。KL散度和JS散度的計算方法如公式:
(1)
(2)
公式中,P表示真實的概率分析,G表示預期的概率分布;DJS(P‖G)取值范圍為[0,1],其取值越小表示兩個分布越相似。
用D表示一個感知設備,T表示行為模式監測周期,p為判斷閾值。通過設備的行為模式判斷設備行為合法性的步驟為:
步驟1:初始化階段,定期統計設備D向網關發送數據包的時間間隔,計算其均值和標準差,并使用得到的均值和標準差進行正態分布建模。記得到的正態分布的概率密度為f0(x)。
步驟2:設備正常運行時,持續計算網關接收到設備D數據包的時間間隔。然后,在每個周期結束計算當前周期網關接收到設備D發送的數據包時間間隔的均值和標準差,并將其進行正態分布建模,記其概率密度函數為ft(x)。
步驟3:從本地同步的區塊數據中獲取設備D在當前周期之前3個周期設備的行為模式,記設備D在上述3個周期中網關接收到設備D發送數據時間間隔的概率密度函數為f1(x),f2(x),f3(x)。
步驟4:將{ft(x),f0(x)},{ft(x),f1(x)},{ft(x),f2(x)}和{ft(x),f3(x)}4組概率密度函數帶入公式,得到DJS(ft‖f0),DJS(ft‖f1),DJS(ft‖f2),DJS(ft‖f3)。
步驟5:為DJS(ft‖f0),DJS(ft‖f1),DJS(ft‖f2)和DJS(ft‖f3)分配權重,分別為0.5,0.25,0.15和0.1,計算得到加權JS散度DJS(AVG)。
步驟6:如果DJS(AVG)大于p,則將結果判定為異常,否則判定結果為正常。
在生產環境中,網關采集到的感知數據通常包含大量的正常數據和少量的異常數據。由于區塊鏈的存儲方式采用了多節點冗余存儲的架構,在資源受限的邊緣側尤其需要降低網關節點的存儲壓力。因此,該文選擇只存儲高價值的異常感知數據,以減少節點存儲空間需求。通過基于LSTM(Long Short Term Memory)加滑動窗口的方式進行感知數據的異常檢測,這種異常檢測方法通過Tensorflow Lite實現,只需要較少的計算和存儲資源。
用P和R分別表示在t時刻感知設備的預測值和實際值,在t時刻的誤差計算公式為:
(3)
異常區間指以兩個連續異常為端點所形成的區間。滑動窗口是從歷史誤差數據中取出的一段連續誤差的集合,用于確定當前時刻誤差在歷史誤差中的相對位置。為了具有代表性,滑動窗口應包含一定數量的異常區間。然而,在某個時間段內,異常發生的情況可能比較密集,也可能比較稀疏。因此,為滑動窗口長度設置最小值minLen和最大值maxLen。
感知數據異常檢測分為建立模型、確定滑動窗口、異常判斷和上鏈存儲四個階段。
(1)建立模型:用{…t-2,t-1,t0,t1,t2…}表示一個時間序列,其中t0表示當前時刻,用r0表示t0時刻網關采集到的實際感知數據,在t-1時刻,將t0之前一段時間的感知數據作為LSTM模型的輸入,可以得到t0時刻的預測值p0。將p0,r0帶入公式,可以得到t0時刻的誤差e0,使用同樣的方法可得到t0之前的誤差集E。
(2)確定滑動窗口:用[ws,we]表示一個滑動窗口。用wn表示滑動窗口中包含異常區間的數量。設ln為當前時刻之前出現的第n(n≥0)個異常的時間點,則ws等于l0,we等于lwn。當歷史異常值的數量小于wn時,將we的值設為ws+minLen。
(3)異常判斷:計算E中數據的平均值(μ)和標準差(σ)。當e0大于μ+1.96σ時,將結果判定為異常,否則判定為正常。
(4)上鏈存儲:當結果判斷為異常時,根據網關邊緣計算模塊中的設備行為模式數據對感知數據異常的來源進行判斷。若是因為設備自身而產生的異常,則將異常數據進行簡化上鏈存儲。否則,將異常數據進行完整的上鏈存儲。
網關作為一種資源受限的設備,與其相連的設備對數據的需求大多為本組織中的交易數據,因此在網關中可以只同步存儲與本組織相關的交易數據。
默克爾樹剪枝算法的基本思想為:網關輕量級節點中只存儲了本組織相關的交易數據,默克爾樹剪枝算法在上述基礎上實現了在區塊頭的默克爾樹中剪掉與本組織無關交易的哈希值。這進一步簡化了默克爾樹,并降低了交易驗證時的時間消耗。
在默克爾樹剪枝過程中,首先計算交易的數量,并添加虛擬交易使交易能夠構成一個高度最小的滿二叉樹。將虛擬交易的交易字段設為空,此時在以虛擬交易生成的節點作為葉子節點的樹中,各層的哈希值是一致的,從而,在交易驗證階段不需要多次進行哈希計算,這保證了即使大量增加了虛擬交易,交易驗證的工作量不會出現大幅的增加。
對連續多個不屬于本組織的交易形成的葉子節點集進行分組,分組的方法為依次從葉子節點集取出能組成最高子樹的葉子節點作為一個子集,直到葉子節點集變為空集,然后,用各個子集中的節點作為葉子節點所組成樹的根作為該子集中節點的摘要存儲在網關本地。具體示例如圖3所示。

圖3 默克爾樹剪枝示例
圖3中包含8個交易(Transaction,TX),默克爾樹剪枝時對非本組織的交易{TX1,TX2,TX3,TX5,TX6}作丟棄處理。對相應的葉子節點{1,2,3,5,6},將節點A和B分別作為葉子節點{1,2}和{5,6}的摘要存儲在網關本地。為了保證TX4可驗證,將葉子節點3存儲在網關中,最終形成一個以{A,3,4,B,7,8}為葉子節點,以{TX4,TX7,TX8}為交易的簡化默克爾樹。簡化默克爾樹能夠在節省存儲空間的情況下,保證{TX4,TX7,TX8}的可驗證性,并加快交易的驗證速度。
簡化默克爾樹中的葉子節點使用起始值和終止值字段標識該節點所代表的原始葉子節點的范圍,例如,圖3中的葉子節點A的起始值和終止值字段的數值分別為1和2,節點{4,7,8}的起始值和終止值字段的數值均為其自身的編號。
通過默克爾樹剪枝算法,可以降低默克爾樹的存儲空間,同時,能夠加快交易驗證效率。默克爾樹剪枝算法如下(算法1):
算法1:默克爾樹剪枝偽代碼
輸入:交易數據集TXs,虛擬交易哈希序列virtualTXHashs,本組織編號LocOrgID
輸出:剪枝后的交易數據集
1.計算交易組成的MerkleTree高度TXsHeight
2.for mkH:=0; mkH 3.distance := 2^i 4.定義tempTXs用于存儲臨時交易列表 5.for i:=0;i 6.if TXs[i].OrgID!=LocOrgID &&TXs[i+1].OrgID!= LocOrgID 7.if TXs[i]和TXs[i+1]的葉子節點距離均等于distance 8.由TXs[i]和TXs[i+1]計算生成哈希值TxHASH,若其葉子節點為虛擬節點則TxHASH=virtualTXHashs[mkH] 9.將TxHASH添加到tempTXs中,i+=2 10.else 11.將TXs[i]添加到tempTXs中,i+1=1 12.Return tempTXs //返回剪枝后交易 交易驗證的基本思路是根據最新節點的區塊頭哈希獲取上一個區塊頭,并在其中尋找到指定高度的區塊。一旦找到該區塊,就從其區塊頭中獲取葉子節點列表。接著,需要遍歷葉子節點列表中的哈希值,若目標哈希值在哈希值列表中存在,則可以驗證該交易的合法性。 交易合法性的驗證流程如下:首先,從區塊頭中取出葉子節點列表,并確定默克爾樹的高度。接下來,按照從下到上的順序對默克爾樹進行逐層驗證。在進行每一層驗證時,假設當前層高為n,則交易間隔為2n。遍歷葉子節點列表中的節點,通過節點中的起始值和終止值確定該節點的交易間隔。當節點的交易間隔為2n時,對該節點及其相鄰的后續節點進行哈希計算。依此類推,直到葉子節點列表中只剩下一個節點時,該節點即為交易默克爾樹的根節點。交易驗證流程的算法偽代碼如下(算法2): 算法2:交易驗證偽代碼 輸入:交易所在區塊高度blockH,交易哈希值TxHash,最新區塊頭哈希HeadHash 輸出:交易是否合法 1.根據HeadHash查詢區塊,并從中取前區塊的HeadHash,直到查詢到目標區塊block 2.merkleLeafNodes :=block.MerkleLeafNodes 3.for i := 0; i 4.if merkleLeafNodes[i].TxHash == TxHash &&blockH == blockHeight Then flag = True 5.if flag == False Then return Fale 6.for i:=0; i 7.定義tempNodes用于存儲臨時節點數據 8.for j:=0; j 9.if merkleLeafNodes[j].range == 2^i //2^i表示當前處理節點對應原始節點的數量 10.TxHash=SHA(merkleLeafNodes[j].key+ (merkleLeafNodes[j+1].key) 11.將通過merkleLeafNodes第j,j+1生成的節點放入tempNodes,j+=2 12.else 13.將merkleLeafNodes[j]放在tempNodes中,j+=1 14.merkleLeafNodes = tempNodes 15.root = merkleLeafNodes[0] 16.if block.MerkleRoot != root 17.return False 18.return True 4.1.1 實驗硬件基礎 實驗環境硬件包括1臺在VMware ESXiTM7.0平臺中部署的虛擬機、1臺樹莓派4B和1臺PC,分別在其中部署了長安鏈2.1.0網絡、文中的網關系統和感知設備模擬程序。虛擬機硬件資源配置為CPU: Intel(R) Xeon(R) Gold 6140 CPU @ 2.30 GHz,16核心,內存16 GB,操作系統為CentOS8.2。樹莓派4B硬件資源配置為CPU:Broadcom BCM2711 @ 1.5 GHz,4核心,內存4 GB,操作系統為Ubuntu21.04。PC硬件配置為CPU: 11th Gen Intel(R) Core(TM) i5-1135G7 @ 2.40 GHz,4核心,操作系統為Windows10。 4.1.2 區塊鏈網絡 虛擬機中的長安鏈網絡由4個通過Docker啟動的共識節點組成,網絡采用RAFT共識算法,單個區塊的最大交易數為100,出塊間隔為2 000 ms。感知數據異常檢測滑動窗口的minLen和maxLen分別為60和200。 4.1.3 數據集 英特爾伯克利研究室(IBRL)傳感器數據集為IBRL在2004年使用54個傳感器采集到的約230萬條的感知數據。該文將原始數據按照設備編號分組并按時間順序排序整合為標準數據集。在標準數據集的基礎上為每個設備添加了5% A.B. Sharma等人[19]所定義的異常數據,并將得到的數據集發布在Github (https://github.com/Trible863/GatewayTestDataset)上。通過將原始標準數據集進行復制實現增加設備數量到90個。取每個設備前10 000條數據,其中,前8 000條作為模型訓練集,后2 000條用于本實驗測試。 4.2.1 感知設備安全 為了驗證設備可信接入功能的有效性,進行了感知設備異常行為檢測實驗,實驗分為正常分組和異常分組。正常分組中各個設備以其自身初始化階段的行為模式為基準,異常分組中各個設備以其它設備初始化階段的行為模式為標準模型。之后以100秒為周期計算各個設備的JS散度值。 實驗結果如圖4所示。 根據實驗結果顯示,在正常分組中各個設備的數據包時延JS散度幾乎均小于0.1,這表明正常設備的數據包時延呈現出一定的相似性和穩定性。相反,在異常分組中,各個設備的數據包時延JS散度幾乎均大于0.1,這意味著異常設備的數據包時延具有更大的差異性和不確定性。綜合分析可以得出結論,將判斷閾值設為0.1時,通過設備行為模式對設備行為進行監測能夠有效地識別設備的正常行為和異常行為。因此,該感知設備異常檢測方案不僅能夠幫助檢測感知設備的異常行為,而且還能夠增強物聯網系統的安全性。該方案可以在現有的物聯網系統中應用,以提高物聯網系統的可靠性和安全性。 4.2.2 感知數據安全 感知數據異常檢測能夠從大量低質量的重復數據中篩選出有價值的異常數據,該文采用了LSTM和滑動窗口方法對感知數據進行異常檢測。在提出的預測方法中進行了3 000次的預測,圖5顯示了將預測誤差按1‰的組距分組統計的結果。 圖5 模型預測性能 從實驗結果看,隨著誤差率的增加,分組統計和累積比重逐漸增加。同時,當預測誤差在0.9%以下時,占比達到了97.8%。這表明該預測模型的效果能夠滿足生產環境中的異常檢測需求。 4.3.1 節點運行時延分析 為了分析在網關中采用輕量級節點和在長安鏈全節點中進行數據上鏈和交易查詢的時延情況,分別在網關節點和長安鏈節點中進行了數據上鏈和交易驗證的實驗。實驗分9組進行測試,模擬感知設備的數量分別為{10,20,30,40,50,60,70,80,90},實驗結果如圖6所示,圖6中“本地”和“節點”分別指在網關節點和長安鏈中進行實驗得到的實驗結果。 圖6 網關運行時延 實驗結果顯示:在數據上鏈時延方面,在網關節點中和在長安鏈節點中的時延幾乎一致,說明在網關中進行數據上鏈不會明顯增加時延開銷。在交易驗證時延方面,在網關中向網關節點進行交易驗證請求相較于向長安鏈節點進行交易驗證請求,能夠大幅度降低交易驗證時延開銷。 4.3.2 默克爾樹剪枝分析 為了驗證文中默克爾樹剪枝方案的優勢,進行了區塊節點壓縮測試、交易驗證和默克爾樹驗證實驗,對比方案為K. Saito等人[20]提出的輕量級節點方案(K. Saito方案),將K. Saito方案通過代碼實現進行相關實驗。 為了測試默克爾樹剪枝方案相較于K. Saito方案在節點壓縮上的優勢,首先,根據不同的組織數量隨機生成了5 000個交易,并模擬K. Saito方案區塊中不同的交易數隨機生成2 000個區塊。然后,采用默克爾樹剪枝算法對區塊中默克爾樹進行了剪枝,并計算默克爾樹剪枝后葉子節點的平均數量。表1顯示了文中方案相較于K. Saito方案(表1中基線方案)在葉子節點壓縮上的效果。 表1 默克爾樹剪枝結果 從實驗結果看,當組織數量分別為4,6,8和10時,文中方案區塊中的葉子節點數相較于K. Saito方案分別降低了36.6%,49.3%,57.4%和62.9%。這表明提出的默克爾樹剪枝算法能夠顯著降低區塊中的葉子節點數。 將組織數設為4,進行交易驗證時延和默克爾樹驗證時延測試。在進行交易驗證時延實驗時,將區塊中交易數設為100,然后,在不同的區塊高度情況下測試了5 000次交易驗證時延的情況并計算其均值,實驗結果如圖7(a)所示。進行默克爾樹驗證時延實驗時,在默克爾樹中包含一定交易數的情況下,隨機生成了5 000個默克爾樹。然后,測試默克爾樹的交易驗證時延,并計算默克爾樹交易驗證時延的均值,實驗結果如圖7(b)所示。 (a)交易驗證時延 從圖7可以看出,文中方案相比于K. Saito方案,具有更優秀的性能表現。在圖7(a)中,文中方案的交易驗證時延均小于K. Saito方案的交易驗證時延,而且總體上比K. Saito方案優化了32.3%。這表明文中方案可以更快速地完成交易驗證,從而提高了整個交易處理過程的效率。在圖7(b)中,文中方案的驗證時延相較于K. Saito方案明顯降低。綜上,文中方案可以被廣泛應用于區塊鏈輕量級節點技術的實踐中,提高區塊鏈系統的整體性能和效率。 該文提出了一種基于聯盟鏈的輕量級區塊鏈-物聯網網關模型,在資源受限的設備上實現了物聯網設備的可信接入、感知數據與設備的快速異常發現以及高效的數據處理,為區塊鏈技術在物聯網場景中的融合應用提供了可行的方案。 未來的工作將基于提出的新型智能物聯體系架構,結合實際的物聯網場景和感知數據類型,進一步優化提出的區塊鏈網關系統。特別是,在區塊鏈默克爾樹中交易排序方面進行研究,以更好地優化輕量級節點的存儲需求,實現輕量級、高可信和自適應的特性。這將有助于提升物聯網系統的安全性和效率,并為實際應用場景提供更好的服務。4 實驗設計與評估
4.1 實驗設計
4.2 安全性分析

4.3 輕量級節點分析



5 結束語