章振海 虞思城 蔣云杰 吳珂楨 顧國民 陳 園
1(國網(wǎng)浙江省電力有限公司信息通信分公司 杭州 310023) 2(國網(wǎng)浙江德清縣供電有限公司 浙江德清 313200) 3(浙江工業(yè)大學計算機科學與技術(shù)學院 杭州 310023)
近年來,隨著工業(yè)4.0、“智能制造”等技術(shù)的發(fā)展,物聯(lián)網(wǎng)已被廣泛應用于智能電網(wǎng)、智慧家居等各個物聯(lián)網(wǎng)領(lǐng)域,推動人-機-物的全面互聯(lián)與融合.自物聯(lián)網(wǎng)概念[1]被提出以來,物聯(lián)網(wǎng)設備數(shù)量飛速增長,產(chǎn)業(yè)迅猛發(fā)展.與傳統(tǒng)互聯(lián)網(wǎng)相比,物聯(lián)網(wǎng)架構(gòu)將網(wǎng)絡連接擴展到更豐富的物理空間,也面臨越來越多的安全問題.據(jù)預測到2020年底,物聯(lián)網(wǎng)設備數(shù)量將增長至500億[2].海量異構(gòu)設備的接入、頻繁的數(shù)據(jù)通信和信息交換為邊緣設備增加額外的計算負擔.傳統(tǒng)安全防護手段主要面向計算資源豐富的云端服務,成本較高,因此無法直接應用于物聯(lián)網(wǎng)終端設備環(huán)境.
區(qū)塊鏈于2008年問世[3],引發(fā)全世界關(guān)注,已被廣泛應用于醫(yī)療、物流等多個領(lǐng)域.由于物聯(lián)網(wǎng)具備天然的分布式特性,因此物聯(lián)網(wǎng)+區(qū)塊鏈的模式被廣泛看好.如何將區(qū)塊鏈與設備認證結(jié)合,將其不可篡改、信任建立的機制運用于物聯(lián)網(wǎng)終端設備,值得深入探究[4].傳統(tǒng)物聯(lián)網(wǎng)區(qū)塊鏈的應用主要實現(xiàn)對設備數(shù)字證書及憑證的存儲[5],存在交互信息泄露、區(qū)塊鏈確認時間慢等關(guān)鍵問題.
本文將利用以太坊實現(xiàn)一種基于區(qū)塊鏈交易驗證的設備認證方法,在網(wǎng)關(guān)層面同步區(qū)塊頭,構(gòu)建可信網(wǎng)絡;利用簡單支付驗證(SPV)的方式對終端設備進行注冊與認證,降低密鑰在網(wǎng)絡中傳輸?shù)男孤讹L險,減少區(qū)塊鏈交易驗證的等待時間,提高設備認證的安全性和有效性.
設備接入是物聯(lián)網(wǎng)安全的第一道防線,面臨嚴峻挑戰(zhàn).常用的用戶名/密碼的認證方式也已經(jīng)被遺棄,改而使用動態(tài)口令、特征識別以及多音字認證等方法[6].目前,設備認證主要分為以下3種:基于公鑰基礎設施的身份認證方法、基于身份的簽名方案以及基于無證書的簽名認證方法.
基于公鑰基礎設施的身份認證主要以PKI(public key infrastructure)為代表,方案中存在一個CA中心進行數(shù)字證書的發(fā)放和驗證,數(shù)字證書中包含設備需要的公鑰和簽名,設備可通過自身私鑰對消息進行加密,接收方可通過設備公鑰對信息進行驗證,保證傳遞消息的真實性.
基于身份的簽名方案以IBC(identity-based cryptograph)為基礎,通過密鑰生成器進行密鑰生成、分發(fā)和管理.該方案使用雙線性對運算實現(xiàn)對簽名的驗證,即使在傳輸過程中發(fā)生密鑰泄露,仍可實現(xiàn)身份的唯一性驗證.
基于無證書的簽名認證方法中,密鑰分發(fā)中心通過設備的唯一區(qū)分標識為其生成部分對應私鑰,設備可通過設定的secret值和部分私鑰生成唯一私鑰,確保設備接入認證安全.
區(qū)塊鏈不可篡改、分布式存儲、可溯源等特性可滿足物聯(lián)網(wǎng)設備可移動的應用場景安全接入需求.同時,區(qū)塊鏈系統(tǒng)也能為物聯(lián)網(wǎng)數(shù)據(jù)安全提供解決方案.
Shen等人[7]提出一種基于區(qū)塊鏈的跨域身份管理機制,被認證設備將保持匿名狀態(tài),通過協(xié)商密鑰進行安全通信.該方案實現(xiàn)聯(lián)盟區(qū)塊鏈不同區(qū)域之間的信任建立,并進行密鑰存儲以及隱私保護.Danish等人[8]提出一種應用于超長距離擴頻通信(LoRaWAN)的區(qū)塊鏈認證機制.該方案將區(qū)塊鏈作為一種獨立網(wǎng)絡與LoRaWAN同時進行工作,利用智能合約實現(xiàn)LoRa終端設備中的驗證信息及設備信息存證,以達到設備身份驗證的目的.Mohanta等人[9]提出一種基于以太坊的物聯(lián)網(wǎng)設備分布式認證方案,該方案主要通過智能合約進行用戶ID及其關(guān)聯(lián)錢包地址的存儲,運用區(qū)塊鏈解決單服務器單點故障的問題. Ourad等人[10]利用以太坊和智能合約對設備進行認證,用戶向智能合約提供設備認證信息,智能合約將認證憑證分發(fā)至設備和用戶,再完成設備認證.該方案中的區(qū)塊鏈負責憑證生成管理和分發(fā)工作.
現(xiàn)有大部分方案的區(qū)塊鏈主要為設備認證提供憑證存儲和管理等服務,運用區(qū)塊鏈分布式存儲的特點預防因單點故障造成的憑證丟失,同時利用智能合約不可篡改的特性確保認證憑證的唯一性和安全性[11].但是,此類方案仍然存在因設備與區(qū)塊鏈交互造成密鑰憑證泄露的風險,并且區(qū)塊鏈通過共識機制進行信息交易,即憑證存入的確認需要耗時完成一致性驗證,例如比特幣一般耗時10 min、以太坊耗時15 s,無法進行實時響應.因此,本文將結(jié)合區(qū)塊頭同步和簡單支付驗證的方法,提出一種通過Merkle根路徑和根哈希進行區(qū)塊鏈交易驗證的設備認證方案,為基于區(qū)塊鏈的設備接入安全和高效認證提供新思路.
傳統(tǒng)物聯(lián)網(wǎng)設備通過網(wǎng)關(guān)接入互聯(lián)網(wǎng),網(wǎng)關(guān)可提供設備入網(wǎng)所需的網(wǎng)絡服務.本文提出如圖1所示的網(wǎng)絡架構(gòu),設備通過WiFiRS-485,RJ-45,ZigBee等接口連接至網(wǎng)關(guān),由網(wǎng)關(guān)進行數(shù)據(jù)包處理,并連接至預設的物聯(lián)網(wǎng),完成數(shù)據(jù)交互和設備認證等相關(guān)操作.網(wǎng)關(guān)具備可編程能力、計算能力以及存儲能力,可作為邊緣設備.網(wǎng)關(guān)可通過區(qū)塊鏈對終端設備進行認證,基于交易驗證的設備認證方法主要分為以下3個步驟:區(qū)塊頭同步、區(qū)塊頭驗證和設備認證.

圖1 一般的物聯(lián)網(wǎng)架構(gòu)圖
目前常用的區(qū)塊鏈系統(tǒng)有以太坊、超級賬本等,本文采用以太坊.以太坊主要具有3種區(qū)塊同步機制,分別為Full mode,F(xiàn)ast mode,Light mode[12].
Full mode可以從節(jié)點同步完整的區(qū)塊數(shù)據(jù),保存數(shù)據(jù)較為完整,使得全節(jié)點可追溯所有歷史數(shù)據(jù),安全性最高;Fast mode因采用Geth中的默認方法,區(qū)塊同步比Full mode快;Light mode適用于計算資源有限的邊緣設備,其只同步區(qū)塊頭信息,并依賴以太坊子協(xié)議(light Ethereum subprotocol,LES)先對區(qū)塊頭子集進行同步,在有需要時才獲取其他數(shù)據(jù)內(nèi)容[13].
網(wǎng)關(guān)具備較弱的計算和存儲能力,因此借鑒Light mode同步機制,只對區(qū)塊頭進行同步,降低隨著交易增多、賬本體積增大后網(wǎng)關(guān)的存儲壓力.
如圖2所示,此模式下同步區(qū)塊頭依賴于如下3個步驟:
1) 尋找公共祖先區(qū)塊.利用固定間隔法或二分法查找最新的公共祖先區(qū)塊.
2) 獲取骨架.在找到公共祖先區(qū)塊后,同步1組一定間隔的區(qū)塊頭,形成區(qū)塊頭骨架.
3) 填充骨架.以一定間隔區(qū)塊頭為1組,隨機選擇可連接的全節(jié)點,并下載區(qū)塊頭填充骨架,形成完整區(qū)塊頭賬本.如無法正確下載,則同步失敗,丟棄步驟2)中同步骨架并重新開始.

圖2 區(qū)塊頭同步步驟
該同步方式可避免從同一節(jié)點獲取過多區(qū)塊信息,預防區(qū)塊鏈單節(jié)點的不安全行為.如若從惡意節(jié)點同步數(shù)據(jù),則區(qū)塊頭中必然存在被區(qū)塊鏈網(wǎng)絡不認可的信息,造成網(wǎng)關(guān)安全隱患.網(wǎng)關(guān)中維護與全節(jié)點相同的賬本區(qū)塊頭,與區(qū)塊鏈網(wǎng)絡可間接構(gòu)成可信聯(lián)系,確保網(wǎng)關(guān)接入安全.而區(qū)塊頭信息作為設備驗證的依據(jù),為端側(cè)提供可信安全的驗證服務.
交易驗證是保證區(qū)塊鏈入鏈數(shù)據(jù)安全可信的基礎.區(qū)塊頭交易驗證主要分為2部分:合法性校驗和簡單支付驗證(simplified payment verification, SPV)[14].其中通過校驗函數(shù)驗證區(qū)塊頭[15]中定義的字段是否合法.區(qū)塊頭中字段數(shù)據(jù)信息如表1所示.簡單支付驗證主要通過SPV驗證交易是否存在且被區(qū)塊鏈共識確認.

表1 以太坊區(qū)塊頭信息表
1) 區(qū)塊頭合法性校驗
合法性校驗首先定義父區(qū)塊P(BH),通過遞歸長度前綴編碼RLP(recursive length prefix)函數(shù)將區(qū)塊結(jié)構(gòu)轉(zhuǎn)換為字節(jié)序列,KEC表示Keccak-256哈希函數(shù),D0是創(chuàng)世區(qū)塊的難度值,等于131 072.ζ2(diffculty parameter)是Homestead的難度值參數(shù),用于影響出塊時間的動態(tài)平衡.ε是難度符號,會越來越快地使難度值上升.Hnext是不包含nonce和mixHash的新區(qū)塊的區(qū)塊頭.d是當前難度下的DAG(DAG文件在每個epoch都會生成一個DAG,并且會不斷增加,以提供工作量證明),PoW是工作量證明函數(shù).
區(qū)塊頭的合法性校驗主要有以下8條規(guī)則:
規(guī)則1.parentHash與父區(qū)塊的區(qū)塊頭哈希一致.正式表述為
(1)
規(guī)則2.區(qū)塊高度為父區(qū)塊高度加1.正式表述為
HNUM≡P(H)HNUM+1.
(2)
規(guī)則3.difficuilty難度準確.正式表達為
HD=D(H).
(3)
規(guī)則4.gasLimit的差值在合適范圍之內(nèi).正式表述為

(4)

(5)
HL≥5 000.
(6)
規(guī)則5.gasUsed應低于或等于gasLimit.正式表述為
HU≤HL.
(7)
規(guī)則6.timestamp時間戳需在上一區(qū)塊之后.正式表述為
HT>P(H)HT.
(8)
規(guī)則7.mixHash和nonce需滿足工作量證明機制.正式表述為
(9)
(n,m)=PoW(Hnext,HN,d).
(10)
規(guī)則8.extraData長度正確.正式表述為
(11)
若滿足以上8條規(guī)則,則表示同步的區(qū)塊頭合法.
2) 簡單支付驗證
簡單支付驗證主要通過Merkle樹驗證某筆交易在賬本中是否存在.如圖3所示,Merkle樹是由交易兩兩哈希構(gòu)造的一棵哈希樹.交易的驗證生效需要滿足2個條件:一是區(qū)塊已經(jīng)存在于某個區(qū)塊并得到驗證;二是在該區(qū)塊高度之上又進行區(qū)塊同步,并得到共識機制的驗證,且高度在5個以上.簡單支付驗證的過程如下:
① 根據(jù)交易對象計算待驗證交易的哈希;
② 獲取最長鏈所有區(qū)塊頭并存儲在本地;
③ 通過步驟①的交易哈希向全節(jié)點請求得到Merkle樹哈希認證路徑,如交易TxA的路徑即為[Hash0-1,Hash1];
④ 根據(jù)上一步中的路徑,計算Merkle根哈希值并與本地區(qū)塊頭中的Merkle根哈希值遍歷比較,獲取交易存在的區(qū)塊;
⑤ 獲取該區(qū)塊高度,校驗該區(qū)塊是否存在于最長鏈中,且確認5次以上,無法篡改.
該驗證方法可使網(wǎng)關(guān)無需同步完全的區(qū)塊鏈賬本,僅依靠憑證存儲的交易哈希進行完全確認,減少空間存儲和驗證等待時間.

圖3 Merkle根哈希構(gòu)造圖
基于上述區(qū)塊頭同步以及交易驗證,本文提出通過網(wǎng)關(guān)構(gòu)建基于交易驗證的設備認證機制.設備認證主要分為注冊和認證2部分.當網(wǎng)關(guān)接入網(wǎng)絡后,網(wǎng)關(guān)便開始同步區(qū)塊鏈賬本區(qū)塊頭信息,并對區(qū)塊頭信息進行合法性校驗.如圖4所示,在注冊階段,設備提交注冊信息至網(wǎng)關(guān),信息中主要包含設備基本參數(shù),如設備注冊時間、設備編號等.網(wǎng)關(guān)進行區(qū)塊鏈交易對象構(gòu)造,并獲取交易的哈希值下發(fā)至設備進行保存.同時,交易信息將提交至區(qū)塊鏈進行注冊.區(qū)塊鏈接收到交易信息后,由節(jié)點共識機制進行挖礦,驗證交易的合法性后記入賬本.入賬后,區(qū)塊鏈返回網(wǎng)關(guān)交易回執(zhí),告知網(wǎng)關(guān)設備注冊信息已成功入賬.至此,設備注冊完成.

圖4 設備注冊時序圖
在認證階段,設備提交認證請求,在請求中攜帶由網(wǎng)關(guān)下發(fā)的交易哈希值.如圖5所示,網(wǎng)關(guān)對設備認證請求進行處理,使用簡單支付驗證對注冊信息是否存在于區(qū)塊鏈進行認證.首先,網(wǎng)關(guān)通過交易哈希值向區(qū)塊鏈索取該交易所在區(qū)塊的Merkle樹路徑,并通過兩兩哈希計算獲取Merkle樹根哈希值,然后與網(wǎng)關(guān)本地存儲的區(qū)塊頭中的Merkle根哈希值進行一一比對,若存在,且最長鏈中已經(jīng)被確認5次以上,則證明該設備已處于注冊狀態(tài),并已被區(qū)塊鏈多次確認,無法篡改,符合要求且認證成功,否則認證失敗.

圖5 設備認證時序圖

圖6 憑證更新時序圖(忽略網(wǎng)絡時延)
為保證注冊交易哈希唯一性,設置時刻t1和t2,由網(wǎng)關(guān)進行管理.其中時刻t1網(wǎng)關(guān)更新注冊信息,時刻t2設備更新憑證.如圖6所示,因為以太坊出塊時間為15 s,而簡單支付驗證需區(qū)塊持續(xù)共識打包5塊以上才可被確認為不可篡改,所以t2將比t1延遲75 s.當網(wǎng)關(guān)重新提交設備注冊信息75 s后,網(wǎng)關(guān)將對設備認證進行更新,新哈希憑證開始生效.
本節(jié)將對基于區(qū)塊鏈交易驗證的設備認證方案進行性能對比分析實驗.
在硬件方面,網(wǎng)關(guān)分別采用工控機以及樹莓派進行對比實驗,其中工控機處理器為Intel Core i3-4005,內(nèi)存為4 GB,硬盤容量為64 GB,操作系統(tǒng)為ubuntu 18.04;樹莓派采用Raspberry Pi 3B+,處理器為1.4 GHz ARM Cortex-A53,內(nèi)存為1 GB,存儲空間為8 GB的SSD卡,操作系統(tǒng)為Raspbian.
在軟件方面,與區(qū)塊鏈交互端使用Node.js編寫,實現(xiàn)DApp功能,交易驗證端使用Golang語言實現(xiàn).為便于分析與統(tǒng)計,網(wǎng)關(guān)將日志打印到文件,對日志文件分析獲取最終結(jié)果.
為驗證本文提出的網(wǎng)關(guān)接入?yún)^(qū)塊鏈網(wǎng)絡,同步區(qū)塊頭確保網(wǎng)關(guān)可信的合理性與可行性,本文設計2種實驗方案,并對比在不同性能的網(wǎng)關(guān)下,同步需要的時間消耗.
實驗1.網(wǎng)關(guān)模擬Light mode模式,通過區(qū)塊鏈接口和智能合約連接以太坊全節(jié)點,獲取區(qū)塊頭進行賬本同步.
實驗2.網(wǎng)關(guān)部署以太坊節(jié)點,并設置Light mode模式,依賴LES協(xié)議請求全節(jié)點同步區(qū)塊頭.

圖7 區(qū)塊頭同步方案對比圖
實驗結(jié)果如圖7所示,實驗1在計算能力相差較大的設備上都可運行,且時間消耗也在可接受范圍內(nèi).且由于網(wǎng)絡傳輸和延遲的原因,實驗1的耗時比實驗2高,但相較于龐大的區(qū)塊數(shù)據(jù)同步,該時延差距可忽略不計.
實驗2需運行區(qū)塊鏈節(jié)點程序,大約需400 MB的存儲空間,利用Light mode同步區(qū)塊頭信息.雖然多數(shù)物聯(lián)網(wǎng)邊緣設備可以滿足該硬件需求,但是隨著時間的增長,節(jié)點通過PoW進行共識會消耗較多的性能,且節(jié)點的各種功能無法關(guān)閉,影響整體性能.因此綜合時間消耗、空間存儲等方面考慮,方案1更優(yōu).
為驗證利用Merkle樹路徑進行設備認證的優(yōu)勢,并分析不同性能網(wǎng)關(guān)對驗證效率的影響,分別設計如下實驗進行分析.
實驗3.隨著交易次數(shù)增加,對比全節(jié)點和輕節(jié)點存儲數(shù)據(jù)量大小,其中全節(jié)點存儲完整的賬本信息,輕節(jié)點只存儲賬本區(qū)塊頭信息.
實驗4.在不同性能的網(wǎng)關(guān)上,對單位時間內(nèi)可執(zhí)行的簡單支付驗證次數(shù)進行實驗,對比隨著賬本數(shù)據(jù)量增大可執(zhí)行的最大驗證運算次數(shù).
實驗結(jié)果如圖8和圖9所示.在圖8中,全節(jié)點在交易次數(shù)增加時,消耗更多的存儲空間,輕節(jié)點的存儲優(yōu)勢更加明顯.圖9中,隨著交易次數(shù)增多,每秒運算次數(shù)相應減小,但從實驗中可以看出,在包含16筆交易的情況下,性能相對較弱的樹莓派仍然可以進行每秒128次運算.由此可見樹莓派性能完全可以支持輕節(jié)點區(qū)塊同步.

圖8 全節(jié)點與輕節(jié)點數(shù)據(jù)量對比圖

圖9 簡單支付驗證性能對比圖
在該方案中,主要通過2方面維護設備認證安全,分別為網(wǎng)關(guān)安全以及設備認證安全.
1) 網(wǎng)關(guān)安全.網(wǎng)關(guān)通過模擬輕節(jié)點同步區(qū)塊頭信息,并進行合法性驗證,間接維護區(qū)塊鏈網(wǎng)絡.實時更新的區(qū)塊頭保障網(wǎng)關(guān)接入的是當下可信區(qū)塊鏈,為終端設備認證提供安全可信的網(wǎng)絡環(huán)境.同時,確保物聯(lián)網(wǎng)環(huán)境下網(wǎng)關(guān)作為可信設備,不可被替換和篡改.
2) 設備認證安全.設備通過構(gòu)建的交易哈希和由網(wǎng)關(guān)獲取的Merkle樹路徑進行認證.哈希通過網(wǎng)關(guān)生成,并下發(fā)設備存儲.網(wǎng)關(guān)作為物理設備隔離云端網(wǎng)絡和物理設備網(wǎng)絡,哈希作為有效憑證無需上傳至云端進行交互,避免憑證泄露.同時,設備注冊與認證異步進行,間隔75 s為區(qū)塊鏈確認憑證提供時間,無需對憑證存入?yún)^(qū)塊鏈進行確認等待,保證憑證信息不可篡改.
網(wǎng)關(guān)安全以及設備認證安全相互作用,為物聯(lián)網(wǎng)設備提供安全、可靠、高效的接入以及認證方法,降低憑證交互過程中的泄露風險,減少區(qū)塊鏈確認交易的等待時間,保證憑證真實唯一,不可篡改.
設備作為物聯(lián)網(wǎng)的重要組成部分,在安全接入方面面臨嚴峻挑戰(zhàn)[16].本文將區(qū)塊鏈運用于物聯(lián)網(wǎng)設備認證,區(qū)別于將憑證存儲于區(qū)塊鏈的傳統(tǒng)應用方式,提出一種基于區(qū)塊鏈交易驗證的物聯(lián)網(wǎng)設備認證方案.該方案通過同步賬本區(qū)塊頭,將網(wǎng)關(guān)間接接入?yún)^(qū)塊鏈,通過驗證信息合法性,實現(xiàn)網(wǎng)關(guān)的安全可信接入.其次,將簡單支付驗證應用于設備注冊和認證,減少因區(qū)塊鏈共識驗證機制無法確保憑證可信造成的弊端.同時,通過哈希的交易進行注冊認證,降低設備與云端交互造成密鑰泄露的風險.
此外,該方案將設備認證交給網(wǎng)關(guān),將云端和終端物理環(huán)境進行隔離,設備無法直接訪問云端服務,降低云端安全風險.基于區(qū)塊鏈交易驗證的設備認證方法為區(qū)塊鏈應用于物聯(lián)網(wǎng)設備安全領(lǐng)域提供新思路,但在跨域驗證、網(wǎng)關(guān)間消息安全傳遞等方面仍可改進擴展.下一步將重點研究如何通過區(qū)塊鏈及網(wǎng)關(guān)構(gòu)建邊緣設備認證以及探究如何對網(wǎng)關(guān)進行安全加固,實現(xiàn)云邊端協(xié)同安全防護,增強物聯(lián)網(wǎng)安全性.