袁 剛,溫圣軍,唐 琦,馬宇飛,豐 蘇,3+
(1.北京郵電大學 軟件學院,北京 100876;2.國家市場監(jiān)督管理總局 信息中心,北京 100820;3.火箭軍工程大學 理學院,陜西 西安 710025)
區(qū)塊鏈技術具有良好的發(fā)揮前景,有望滿足物聯(lián)網(wǎng)(internet of things,IoT)中的安全要求[1-4]。區(qū)塊鏈的功能是為了解決加密貨幣的雙重支付問題而開發(fā)[5],其驗證機制有多種,如工作量證明(proof of work,PoW)、權益證明(proof of stake,PoS)和委托權益證明(delegated proof of stake,DPoS)等[6]。
目前很多研究關注區(qū)塊鏈與IoT系統(tǒng)的集成,但分析區(qū)塊鏈在滿足IoT安全要求中的作用較少。如Seyoung等[7]提出了將區(qū)塊鏈集成到IoT的方法,但該研究未給出用例詳情,且考慮了對象的完全匿名性,即允許任何用戶使用系統(tǒng)。Thomas等[8]提出了鏈錨方法,將IoT設備集成到云系統(tǒng)中。但其目標是參與設備的完全匿名性,不適用于需要身份驗證的大量IoT設備的情況。Ge等[9]提出了一種基于區(qū)塊鏈技術的輕量級物聯(lián)網(wǎng)信息共享安全框架。以分布式的方式存儲IoT設備活動,但該研究需要考慮存儲需求。借助區(qū)塊鏈與風險理論,Ren等[10]提出一種適用于分布式物聯(lián)網(wǎng)的信任管理方法。Ouaddah等[11]提出了IoT中基于區(qū)塊鏈的訪問控制框架,其工作方式與基于角色的訪問控制[12](role-based access control,RBAC)相同,但其僅考慮了基于策略的兼容系統(tǒng)和用例,不適用于大規(guī)模IoT環(huán)境。
為此,本文提出了高效的去中心化身份驗證機制。該機制在共有區(qū)塊鏈以太坊上實施,旨在建立可供設備安全通信的安全虛擬區(qū)。實驗驗證提出的方法能夠滿足IoT的安全要求,對組成IoT系統(tǒng)的不同類型設備的影響及其實施成本方面具有優(yōu)勢。
IoT身份驗證方案必須滿足各種安全要求,以確保系統(tǒng)的可持續(xù)性和復原性。
完整性:保持完整性是每個方案必須滿足的關鍵要求。本文研究背景下,完整性分為兩部分:①消息(交易/通信)完整性:網(wǎng)絡傳輸過程中,交換的消息一定不能被變更或修改。②數(shù)據(jù)完整性:維持數(shù)據(jù)在整個生命周期中的一致性和可信度。由此,僅授權用戶才可修改存儲的數(shù)據(jù)。
可用性:必須保證合法用戶可按需訪問資源。由此,系統(tǒng)必須能夠抵御拒絕服務(denial of service,DoS)攻擊,特別是針對身份驗證服務的DoS攻擊。
可擴展性:本文研究中,可擴展性即確保系統(tǒng)規(guī)模不會影響系統(tǒng)性能。
不可否認性:確保實體不能否認已執(zhí)行的給定操作。
可識別性:這是大部分IoT場景中的主要要求??勺R別性表示與匿名性相反的意義。舉例來說,在智能停車場景中,當一個車位的傳感器發(fā)出通知時,管理系統(tǒng)必須明確知曉正在通信的是哪個傳感器,以準確更新停車位的狀態(tài)。
雙向身份驗證:身份驗證是證明身份的機制。雙向身份驗證表示通信雙方必須對彼此進行認證。
本節(jié)將介紹威脅模型。
(1)網(wǎng)絡模型:身份驗證方案旨在允許多個節(jié)點在不可信網(wǎng)絡上,以可信的方式進行通信。本文考慮的網(wǎng)絡中,包含在集中式或分布式架構下提供或使用不同IoT服務的物品集合。每個物品均與大量其它物品進行通信。通過不可靠的有損通信網(wǎng)絡(例如互聯(lián)網(wǎng))來交換消息。假定所有參與者均不可信。事實上,網(wǎng)絡中智能物品數(shù)量越多,存在惡意物品的風險也越高。此外,現(xiàn)有設備為異構類型,且不屬于相同用例。網(wǎng)絡功能僅為轉發(fā)數(shù)據(jù)包,不提供安全保證(例如完整性或身份驗證)。因此,惡意用戶可讀取、修改、丟棄或注入網(wǎng)絡消息。
(2)攻擊者模型:本文假定攻擊者或惡意用戶對所用網(wǎng)絡具有完全控制,即攻擊可忽略延遲,有選擇性地對消息進行任意的嗅探、丟棄、重放、重排序、注入、延遲和修改。但設備可接收未修改的消息。攻擊者的計算力和存儲量不受實施設備的限制。但未考慮對設備的物理攻擊,并假定對象免受物理攻擊,因為可通過使信息僅對設備自身可讀來防御物理攻擊[13]。
(3)攻擊:攻擊者可有多個攻擊目標,例如發(fā)送錯誤信息以誤導系統(tǒng)該決策或拒絕系統(tǒng)服務。攻擊者可實施各種攻擊,包括女巫攻擊、嗅探攻擊、消息替換攻擊、拒絕服務攻擊、消息重放攻擊等。本文僅分析與身份驗證服務相關的攻擊,主要安全要求和攻擊見表1。
表1 主要評價標準
本文方法旨在IoT環(huán)境中建立安全虛擬區(qū)。每個設備僅與同區(qū)設備通信,并將其它設備視為惡意設備。安全虛擬區(qū)中的成員均可彼此信任。虛擬區(qū)中的設備是受保護的,非成員設備不可訪問虛擬區(qū)。提出的系統(tǒng)基于智能合約的共有區(qū)塊鏈而實現(xiàn)。本文使用共有而非私有區(qū)塊鏈,從而使系統(tǒng)向任何用戶開放。另外,系統(tǒng)中的通信被視為交易,必須通過區(qū)塊鏈的驗證。舉例來說,若設備A向設備B發(fā)送一條消息,那么:①A將消息發(fā)送至區(qū)塊鏈;②若區(qū)塊鏈完成對A的身份驗證,則確認該交易的有效性;③B可以讀取該消息。
所提方法可應用于大量IoT用例,且沒有特殊的硬件要求。但需要進行初始化。該階段中,將一個設備設計為虛擬區(qū)主節(jié)點(該設備擁有私鑰/公鑰對),可被視為類似發(fā)證機構。任何給定設備均可成為主節(jié)點。此外,系統(tǒng)中的每個對象稱之為從屬節(jié)點。每個從屬節(jié)點生成橢圓曲線(elliptic curve, EC)私鑰/公鑰對。其后,向每個從屬節(jié)點均發(fā)放提供票據(jù),票據(jù)為64字節(jié)的輕量級證書,其中包含:①groupID(簡稱grpID),代表該對象所屬的虛擬區(qū);②objectID(簡稱objID),表示該從屬節(jié)點在虛擬區(qū)中的身份標識;③pubAddr,從屬節(jié)點的公共地址,代表該從屬節(jié)點的公鑰的Keccak[14](SHA-3)散列值的前20個字節(jié);④簽名結構,使用虛擬區(qū)主節(jié)點的私鑰生成的橢圓曲線數(shù)字簽名算法(elliptic curve digital signature algorithm,ECDSA)簽名。與傳統(tǒng)簽名算法例如RSA相比,ECDSA在密鑰大小和簽名時間等方面更具優(yōu)勢,適用于IoT背景。
所提方法以及系統(tǒng)生命周期的所有階段如圖1所示。算法1給出了不同參數(shù)和功能。在網(wǎng)絡中,連接物品可屬于各種領域(醫(yī)療、工業(yè)、環(huán)境等)。
圖1 所提方法以及系統(tǒng)生命周期
算法1: 參數(shù)和函數(shù)定義
參數(shù):
bc:Blockchain
obj:Object
sender:Object
receiver:Object
constfailed:State
定義 主節(jié)點:0
定義 從屬節(jié)點:1
函數(shù): objIDExists(IntegerobjID, Blockchainb)
// 檢查對象標識符在區(qū)塊鏈中是否已被使用
函數(shù): grpIDExists(IntegergrpID, Blockchainb)
// 檢查組標識符在區(qū)塊鏈中是否已被使用
函數(shù): AddrExists(IntegerobjAddr, Blockchainb)
// 檢查對象地址在區(qū)塊鏈中是否已被使用
函數(shù): Error()
// 返回出錯消息
階段A表示初始化階段,其中,主節(jié)點選擇組標識(grpID)。此外,每個對象均被提供一張由主節(jié)點簽名的票據(jù)。一旦準備好建組,階段B包含在區(qū)塊鏈層面上創(chuàng)建虛擬區(qū)。主節(jié)點發(fā)送包含主節(jié)點標識符及其希望創(chuàng)建的組的組標識符的交易。區(qū)塊鏈檢查grpID和主節(jié)點的objID的唯一性。若交易有效,則創(chuàng)建虛擬區(qū)(例如zone F9,zone 0A等)。由于區(qū)塊鏈為共有,因此任何用戶均可創(chuàng)建虛擬區(qū)。
在圖1的階段C中,從屬節(jié)點發(fā)送交易,以便與各自虛擬區(qū)相關聯(lián)。在區(qū)塊鏈層面上,智能合約驗證從屬節(jié)點身份標識(objID)的唯一性,其后利用虛擬區(qū)主節(jié)點的公鑰,檢查從屬節(jié)點的票據(jù)的有效性。若未滿足所有條件,則該對象不可與虛擬區(qū)相關聯(lián)。關聯(lián)階段如算法2所述。一旦從屬節(jié)點的第一筆交易(關聯(lián)請求)成功,則從屬節(jié)點將不再需要利用票據(jù)來認證自身(即無需在交換消息中發(fā)送票據(jù))。
算法2: 智能合約虛擬區(qū)的關聯(lián)規(guī)則
begin
if(objIDExists (obj.id,bc)=true)then
returnError()
ifAddrIdExists(obj.grpID,bc)then
returnError()
if(obj.type=master)then//對象類型若為主節(jié)點
ifgrpIDExists(obj.grpID,bc)=truethen
returnError ()
elseif(obj.type=follower)then
//對象類型若為從屬節(jié)點
ifgrpIDExists(obj.grpID,bc)=falsethen
ReturnError()
if(bc.Ticketverif (obj.ticket)=failed)then
//若票據(jù)未通過檢查
ReturnError()
else
ReturnError() //成功完成關聯(lián)
安全虛擬區(qū)的通信如圖2所示,其中,F(xiàn)表示從屬節(jié)點設備,其已得到主節(jié)點M簽名的一張票據(jù)。該票據(jù)包含grpID=XX、objID=YY以及公鑰PubKey_F。圖2中的數(shù)字含義如下:
圖2 安全虛擬區(qū)內(nèi)的通信
(1)第一個客戶端交易代表關聯(lián)請求。發(fā)送的消息以從屬節(jié)點的私鑰簽名,并包含從屬節(jié)點的票據(jù);
(2)當區(qū)塊鏈接收到交易時,利用從屬節(jié)點的公鑰對簽名進行檢查,以驗證完整性。其后,利用主節(jié)點的公鑰檢查從屬節(jié)點的票據(jù);
(3)若票據(jù)有效,則區(qū)塊鏈保存grpID、objID和公鑰的一個關聯(lián),即存儲(XX,YY,PubKey_F);
(4)第4個步驟描述的案例中,F(xiàn)發(fā)送關聯(lián)請求之外的另一個交易(n)。交易n中包含:①交換的數(shù)據(jù);②XX;③YY;④使用從屬節(jié)點的私鑰,得到的之前字段的串聯(lián)的ECDSA簽名;
(5)區(qū)塊鏈接收到交易時,利用從屬節(jié)點的公鑰進行簽名檢查,以驗證交易完整性;
(6)若簽名有效,則區(qū)塊鏈檢查用于交易驗證的公鑰,是否被保存并關聯(lián)到交易內(nèi)的grpID、objID;
(7)若關聯(lián)被保存且有效,那么;
(8)設備成功通過身份驗證。
圖1中的階段D給出了區(qū)塊鏈如何進行對象和交易的訪問控制,舉例來說,①主節(jié)點5E可創(chuàng)建組39,但主節(jié)點BB不可創(chuàng)建組0A,因為該組已經(jīng)存在。②屬于組OA的1B和DE可交換消息,但屬于組F9的對象50與屬于組OA的對象6F的交換消息將被拒絕。
最后,圖1中的階段E描述了系統(tǒng)全局視圖。已認證設備(持有票據(jù))可隨時加入到其所屬的組中。理論上,由于采用了完全去中心化架構,每組的設備數(shù)量是不受限制的。沒有票據(jù)或持有虛假票據(jù)的對象將無法與安全虛擬區(qū)相關聯(lián),因此,也無法與虛擬區(qū)內(nèi)的節(jié)點相互通信。利用交易的簽名,確保對象的身份驗證和交換數(shù)據(jù)的完整性。最后,虛擬區(qū)是完全分離的,不同虛擬區(qū)內(nèi)的節(jié)點不能相互發(fā)送或接收消息。
為評價所提方法的時間和能耗,使用了3個終端節(jié)點:兩臺配置相同的筆記本電腦聯(lián)想Thinkpad和一個微型電腦RPi。其中一臺筆記本作為主節(jié)點,其它兩個終端節(jié)點作為從屬節(jié)點。使用C++語言開發(fā)終端節(jié)點的應用。
對于終端節(jié)點和區(qū)塊鏈的交互,創(chuàng)建了C++結構,對發(fā)送至或來自以太坊的數(shù)據(jù)進行編碼或解碼,使用JSON遠程過程調(diào)用(remote procedure call,RPC)實現(xiàn)這些交互(JSON為標準文本數(shù)據(jù)格式)。此外,還使用以太坊的測試和開發(fā)工具TestRPC,模擬與區(qū)塊鏈的交互。
由于通信傳輸時間取決于所使用的網(wǎng)絡技術和協(xié)議,本文主要關注所提方法對設備的影響,所有結果均在設備層面上測量。實驗給出100次實驗的結果,測量了:
(1)準備一個關聯(lián)請求所需的時間;
(2)準備一條數(shù)據(jù)消息所需的時間;
(3)準備一個關聯(lián)請求的CPU功耗;
(4)準備一條數(shù)據(jù)消息的CPU功耗;
(5)網(wǎng)絡接口控制器(network interface controller,NIC)發(fā)送一個關聯(lián)(發(fā)送請求+需求響應)的功耗;
(6)NIC發(fā)送一條數(shù)據(jù)消息(發(fā)送消息+接收回執(zhí))的功耗。
實際上,主節(jié)點僅需一次交易以創(chuàng)建虛擬區(qū)。在建立虛擬區(qū)后,簽發(fā)票據(jù)之外,主節(jié)點也可作為從屬節(jié)點進行消息發(fā)送和接收。
3.2.1 安全要求評價
本章將驗證所提方法能夠滿足不同的安全要求,并可抵御各種攻擊。
(1)雙向身份驗證和消息完整性:系統(tǒng)的每個對象在第一次交易中使用票據(jù)(等同于證書)。票據(jù)僅在初始化階段發(fā)放至合法對象。所有交換的消息均利用ECDSA算法,使用與票據(jù)相關的私鑰進行簽名。由此,簽名確保了設備的身份驗證以及消息的完整性。
(2)可識別性:每個對象均擁有一個身份標識(objID),該標識與組標識(grpID)及其公共地址相關聯(lián)。票據(jù)中主節(jié)點的簽名確保該身份標識是可信的。該對象的每條消息均用與身份標識相關的私鑰進行簽名。由此,系統(tǒng)可輕易識別對象。
(3)不可否認性:由于使用僅為對象所知的私鑰對消息進行簽名,因此對象無法否認其消息簽名。
(4)可擴展性:本文系統(tǒng)基于以點對點網(wǎng)絡為基礎的共有區(qū)塊鏈。而點對點網(wǎng)絡是滿足大規(guī)??蓴U展性的最優(yōu)解決方案之一。
(5)防御女巫攻擊:本文設計中,在給定時間,每個對象僅可擁有一個身份表示,且每個身份標識僅可有一個密鑰對。每個通信消息必須經(jīng)過與該身份標識相關聯(lián)的私鑰的簽名。此外,所有身份表示均必須通過系統(tǒng)批準。因此,攻擊者無法使用偽造的身份標識。
(6)防御仿冒攻擊:與身份驗證或女巫攻擊防護同理,攻擊者無法仿冒另一個對象的身份標識,因為這需要該對象的私鑰。
(7)消息替換防護:由于所有消息均經(jīng)過簽名,若攻擊者更改或替換了一條消息,其必須使用有效私鑰對消息簽名。然而在初始化階段僅對可信對象發(fā)放票據(jù)(有效密鑰對)。
(8)消息重放攻擊防御:所有消息均被視為交易。每個交易均包含時間戳,且需要經(jīng)過共識階段以成為有效交易。因此,攻擊者無法重放消息,因為會被共識機制所拒絕。相關研究[15]也解釋了區(qū)塊鏈抵御重放攻擊的方式。
(9)DoS/DDoS攻擊:區(qū)塊鏈的完全去中心化架構使其能夠很好地抵御DoS/DDoS攻擊。事實上,服務被復制并分布在不同的網(wǎng)絡節(jié)點上。即使攻擊者屏蔽了一個節(jié)點,也無法屏蔽所有其它節(jié)點。此外,交易成本較高,攻擊者不會為此發(fā)送大量交易。
3.2.2 時間消耗
表2給出了在100次實驗中計算出的關聯(lián)請求和數(shù)據(jù)消息準備時間的平均值和標準偏差,其中,Avg表示均值,SD表示標準偏差。聯(lián)想筆記本和RPi完成關聯(lián)請求的平均用時分別為1.55 ms和28.02 ms。兩者的標準偏差值都很低,驗證計算穩(wěn)定性較高。數(shù)據(jù)消息發(fā)送的平均耗時較低,對筆記本和RPi分別僅為0.04 ms和0.81 ms。這是因為與數(shù)據(jù)消息發(fā)送操作相比,關聯(lián)請求的復雜度較高。
表2 實驗結果統(tǒng)計值
3.2.3 能量消耗
表2的第6列~第9列給出了實現(xiàn)關聯(lián)請求和發(fā)送數(shù)據(jù)消息的CPU能耗的均值和標準偏差。RPi實現(xiàn)關聯(lián)請求的能耗為64.15 mW,筆記本則僅為9.74 mW。對于消息發(fā)送,RPi和筆記本的平均能耗分別為16.29 mW和3.35 mW。同樣,能耗差異源自于關聯(lián)請求和消息發(fā)送的復雜度不同。
表2的第10列~第13列給出了網(wǎng)絡接口控制器(NIC)實現(xiàn)關聯(lián)請求和數(shù)據(jù)消息發(fā)送的能耗均值和標準偏差。RPi需要89.24 mW來執(zhí)行一次關聯(lián)請求,筆記本則需要16.14 mW。對于消息發(fā)送,RPi和筆記本的能耗均值分別為31.22 mW和12.54 mW。
圖3給出了消息發(fā)送對測試設備的CPU和動態(tài)隨機存取存儲器(dynamic random access memory,DRAM)能耗的影響。圖3展示了系統(tǒng)功能的3個階段:①空閑階段;②執(zhí)行100條消息發(fā)送的循環(huán),每條消息間隔100 ms;③返回空閑階段。使用RAP測量工具得到測量值。從圖中可發(fā)現(xiàn),執(zhí)行循環(huán)對筆記本和RPi的影響均可忽略不計。
圖3 消息處理對筆記本電腦和RPi的影響
3.2.4 實施成本
在智能住宅中考慮:①智能洗衣機每周發(fā)送一條請求(將洗衣粉加入購物清單),即每周需要一筆交易。該交易涉及一次調(diào)用操作以檢索信息。②智能冰箱每周下兩次訂單。③購物清單應用每周下兩次訂單。④智能灑水系統(tǒng)每周使用兩次。⑤智能吸塵器每周使用3次。由此,每月共觸發(fā)40筆交易和40次調(diào)用。
在智能工廠中考慮:每天工作12小時,擁有30只機械臂(分兩種類型)和10輛無人駕駛汽車。第一個機械臂完成作業(yè)后,發(fā)送消息以觸發(fā)第二個機械臂。第二個機械臂完成后,向無人駕駛車輛發(fā)送消息,后者運輸成品并向管理應用發(fā)送一條通知。每個產(chǎn)品生產(chǎn)時長為30分鐘(每臺機器15分鐘)。因此,工廠的每臺機器每隔15分鐘發(fā)送一筆交易,并觸發(fā)1次調(diào)用。由此,每天共計1920筆交易和1920次調(diào)用(每月45 360次交易/調(diào)用)。
在我國滬陜高速某段高速路的電子警察:在2018年通過雷達檢測到809 087次超速違章,使用該數(shù)據(jù),考慮每月超速違章為67 423.91次。
安全虛擬區(qū)的成本計算器如算法3所示,其中,ETH是以太坊代幣,gas是以太坊中執(zhí)行一次交易或合約的內(nèi)部費用。該評價中使用了以太坊經(jīng)典加密貨幣(ETC),也可使用其它加密貨幣。表3根據(jù)每月交易數(shù)量,給出不同場景的財務估計成本,使用算法3得到表3中的數(shù)值。
表3 不同IoT用例下的估計財務成本/月
算法3: 安全虛擬區(qū)的成本計算器
const_trans_cost= 500 //gas
const_call_cost= 20 // gas
const_gas_in_eth= 0.00001 // ETH
const_eth_in_yuan= 1270 // ETH與人民幣匯率
成本函數(shù) fun(doubletrans_number,doublecall_number)
begin
return((trans_number×_trans_cost)+(call_number×_call_cost))×_gas_in_eth×_eth_in_yuan;
3.2.5 與其它方法的比較說明
Seyoung等[7]和Thomas等[8]提出了基于數(shù)據(jù)包傳輸層安全性(DTLS)算法[16]的身份驗證方案。在DTLS中,關聯(lián)階段(DTLS握手)需要至少5條消息。此外,還可添加其它消息,例如更改密碼套件消息。最后,關聯(lián)階段可包含8條消息。Ge等[9]提出了基于區(qū)塊鏈技術的輕量級物聯(lián)網(wǎng)信息共享安全框架。其中關聯(lián)階段需要5條消息。此外,還需要使用網(wǎng)關,這會造成消息數(shù)量增加。Nir[15]提出了用于IoT的身份驗證方案,其中關聯(lián)階段需要4條消息。
輸入/輸出操作會產(chǎn)生最高成本(如表2實驗結果所示)。因此,消息數(shù)量越少,則系統(tǒng)消耗越低,特別對于受限設備更是如此。與其它方法相比,本文方法僅需要兩條消息:①從設備發(fā)送至區(qū)塊鏈的交易;②區(qū)塊鏈響應。因此,若實施在相同硬件上,本文方法的能耗和計算均較少。此外,本文方法通過ECDSA算法實現(xiàn)消息的身份驗證,且橢圓曲線加密是適用于受限設備的輕量級方案[17]。
提出的區(qū)塊鏈身份驗證系統(tǒng)基于共有區(qū)塊鏈,具有共有鏈的所有安全屬性。確保設備的正確識別和認證,并保護數(shù)據(jù)的完整性和可用性。在安全虛擬區(qū)中,設備可通過安全方式相互通信。評價表明,所提方法能夠滿足安全要求,可抵御各種攻擊。在能耗、時間消耗等方面表現(xiàn)優(yōu)秀。
本文方法主要問題是不適用于實時應用,因為該方法依賴于共有區(qū)塊鏈,每筆交易(區(qū)塊)的驗證需要一定的時間周期(共識所需時間),該問題可通過使用私有區(qū)塊鏈來解決。此外,所提方法在初始化階段需要服務供應商的干預。未來,本文將改進所提方法,以允許選定虛擬區(qū)集合之間的受控通信;并針對被攻陷節(jié)點實施撤銷機制。