林江南, 吳秋新, 馮 偉
1(北京信息科技大學(xué) 理學(xué)院, 北京 100192)
2(中國科學(xué)院 軟件研究所 可信計(jì)算與信息保障實(shí)驗(yàn)室, 北京 100190)
在物聯(lián)網(wǎng)發(fā)展迅速的今天, 物聯(lián)網(wǎng)設(shè)備早已遍布人們?nèi)粘I畹闹車? 物聯(lián)網(wǎng)設(shè)備通常使用低功耗的嵌入式智能設(shè)備, 用于執(zhí)行一些特定的任務(wù), 比如發(fā)送、傳輸以及處理一些在環(huán)境中所獲得的數(shù)據(jù)[1], 從而構(gòu)成了物聯(lián)網(wǎng)系統(tǒng), 以此提高整個(gè)網(wǎng)絡(luò)的運(yùn)行速度和服務(wù)質(zhì)量.
由于嵌入式物聯(lián)網(wǎng)設(shè)備的低成本, 大量的物聯(lián)網(wǎng)設(shè)備應(yīng)用于日常生活中, 但其內(nèi)存、計(jì)算能力等方面都存在限制, 特別是缺乏安全機(jī)制[2]. 從而導(dǎo)致嵌入式設(shè)備系統(tǒng)容易成為網(wǎng)絡(luò)攻擊的目標(biāo), 如Mirai[3], 將僵尸程序傳播至網(wǎng)絡(luò), 感染在線設(shè)備, 從而形成僵尸網(wǎng)絡(luò),導(dǎo)致很多網(wǎng)絡(luò)服務(wù)功能癱瘓, 無法進(jìn)行正常工作, 從而造成無法挽回的損失.
而遠(yuǎn)程證明能夠證明設(shè)備完整性這一特性, 恰好可以用于解決嵌入物聯(lián)網(wǎng)設(shè)備的安全問題. 利用遠(yuǎn)程證明基于證明者提供的可信度建立起一個(gè)安全的交互式協(xié)議[4]. 目前學(xué)術(shù)界已經(jīng)提出了很多的遠(yuǎn)程證明協(xié)議, 大體可以分為3類: (1) 基于軟件的證明, 無需硬件支持, 但往往基于實(shí)踐中難以實(shí)現(xiàn)的假設(shè), 如SAKE[5]、VIPER[6]; (2) 基于硬件的證明, 由于其昂貴且復(fù)雜的特性, 對(duì)于資源受限的嵌入式物聯(lián)網(wǎng)設(shè)備不太實(shí)用, 如TrustVisor[7]、Flicker[8]; (3) 混合證明, 旨在提供最小化的硬件支持來彌補(bǔ)純軟件證明的安全性不足, 實(shí)現(xiàn)與基于硬件相似的安全保護(hù), 如TrustLite[9]、TyTAN[10].
本文提出了一種基于信譽(yù)機(jī)制和Merkle樹的安全集群證明及修復(fù)方案, 主要貢獻(xiàn)如下:
(1) 本文方法使用信譽(yù)機(jī)制實(shí)現(xiàn)了多對(duì)一的證明協(xié)議, 能有效解決單點(diǎn)故障, 消除了固定的驗(yàn)證設(shè)備,可以從設(shè)備觸發(fā)驗(yàn)證, 使得證明更加及時(shí), 并且適用于半動(dòng)態(tài)網(wǎng)絡(luò).
(2) 引入Merkle樹進(jìn)行度量, 能夠快速精確地判斷出被惡意軟件感染的代碼塊, 再形成定制的補(bǔ)丁進(jìn)行恢復(fù), 不僅減少數(shù)據(jù)傳輸, 還能高效地修復(fù)受損設(shè)備.
(3) 本文還對(duì)提出的集群證明方法進(jìn)行了安全性分析和性能評(píng)估, 結(jié)果表明, 本文集群證明在提高了安全性的同時(shí)所導(dǎo)致的性能開銷是可以接受的.
本文結(jié)構(gòu)如下: 第2節(jié)介紹集群證明的相關(guān)工作;第3節(jié)給出本文基于的系統(tǒng)模型與假設(shè); 第4節(jié)詳細(xì)給出本文提出的集群證明協(xié)議與修復(fù)機(jī)制; 第5節(jié)對(duì)本文提出的協(xié)議進(jìn)行安全性分析; 第6節(jié)為性能評(píng)估,包括計(jì)算、通信、內(nèi)存、運(yùn)行時(shí)間以及能源開銷方面的分析、本方案與ESDRA[11]及HEALED[12]的安全性對(duì)比以及仿真模擬的實(shí)驗(yàn)結(jié)果; 第7節(jié)對(duì)本文工作進(jìn)行總結(jié).
集群證明. 縱觀集群證明的發(fā)展歷程, 隨著第一個(gè)集群證明協(xié)議SEDA[13]提出至今, 不少集群證明的方案呈現(xiàn)在公眾的視野中. 大多數(shù)都是以SEDA為基礎(chǔ)的一對(duì)多證明協(xié)議. 這些證明協(xié)議以驗(yàn)證者為根構(gòu)造生成樹, 從根往下進(jìn)行證明, 最后不斷將證明結(jié)果匯聚至驗(yàn)證者, 這也就意味著這類協(xié)議只能應(yīng)用于靜態(tài)網(wǎng)絡(luò). 比如, SeED[14]在SEDA的基礎(chǔ)上增加了抵抗DoS攻擊, 從而形成了非交互式的拒絕服務(wù)攻擊的認(rèn)證方案. 在2019年, ESDRA提出了第一個(gè)多對(duì)一的集群證明協(xié)議, 通過設(shè)備端發(fā)起的證明, 從而可以適用于半動(dòng)態(tài)的網(wǎng)絡(luò). POSTER[15], SALAD[16]都是基于設(shè)備的自身認(rèn)證, 積累個(gè)體驗(yàn)證報(bào)告, 最后共享至整個(gè)網(wǎng)絡(luò), 從而實(shí)現(xiàn)適用于動(dòng)態(tài)網(wǎng)絡(luò)的認(rèn)證協(xié)議.
安全修復(fù). 目前大多數(shù)協(xié)議只提出了證明方案, 對(duì)于后續(xù)的修復(fù)沒有詳細(xì)的介紹.已有的修復(fù)協(xié)議方案,如HEALED, 利用集群相同軟件配置的可信設(shè)備對(duì)其進(jìn)行修復(fù), 從而將受損設(shè)備回滾至可信狀態(tài).
在大規(guī)模的集群 S 中包含著軟硬件配置不同的異構(gòu)設(shè)備, 并且在通信過程中,能耗隨距離增加而急劇增加. 面對(duì)著無處不在的各式攻擊, 如果讓管理者一一驗(yàn)證, 不僅存在驗(yàn)證不及時(shí)的風(fēng)險(xiǎn), 并且驗(yàn)證者的性能將成為整體認(rèn)證方案效率的瓶頸. 為了提高驗(yàn)證效率以及降低功耗, 我們將集群S 中的每個(gè)設(shè)備按照通信距離分成若干個(gè)簇, 每個(gè)簇都有一個(gè)簇頭節(jié)點(diǎn). 在簇內(nèi), 各個(gè)設(shè)備節(jié)點(diǎn)之間相互證明從而構(gòu)建出集群的可信環(huán)境.此外, 檢測(cè)到受損設(shè)備應(yīng)當(dāng)給予修復(fù)的機(jī)會(huì), 若是修復(fù)不了, 即可判定修復(fù)成本大于他自身的價(jià)值, 可以進(jìn)行移除操作. 當(dāng)然, 為了識(shí)別集群中由于遭受物理攻擊而探測(cè)不到的設(shè)備, 實(shí)施在線探測(cè)及時(shí)識(shí)別可能受到攻擊的設(shè)備, 并進(jìn)行隔離驗(yàn)證.
在本文集群證明系統(tǒng)中, 主要的參與者包含: 網(wǎng)絡(luò)管理者 M, 負(fù)責(zé)初始化以及修復(fù)集群中受損的設(shè)備節(jié)點(diǎn); 簇頭節(jié)點(diǎn)Di, 負(fù)責(zé)管理簇內(nèi)設(shè)備; 組內(nèi)普通節(jié)點(diǎn)Dij,由簇頭節(jié)點(diǎn)Di進(jìn)行管理.
本文方法基于以下幾點(diǎn)假設(shè):
(1) 假設(shè)所有節(jié)點(diǎn)都滿足安全遠(yuǎn)程證明的最低硬件要求, 即只讀存儲(chǔ)器和簡單的內(nèi)存保護(hù)單元, 可以通過SMART[17]等機(jī)制實(shí)現(xiàn).
(2) 假設(shè)證明例程為原子程序運(yùn)行, 并且證明代碼無法被修改.
(3) 為了確保證明結(jié)果的可靠性, 假設(shè)每個(gè)節(jié)點(diǎn)應(yīng)至少有3個(gè)鄰居設(shè)備.
(4) 假設(shè)物理攻擊會(huì)導(dǎo)致設(shè)備一段時(shí)間不可用, 從而攻擊期間無法探測(cè)到設(shè)備.
(5) 由于DDoS攻擊幾乎不可能被完全抵抗, 與其他集群證明方案一樣, 本文不考慮DDoS攻擊.
本方案提出一個(gè)多對(duì)一的集群證明及修復(fù)方案.如圖1所示, 方案可分為兩個(gè)階段: 離線階段和在線階段. 在離線階段完成設(shè)備的初始化以及設(shè)備之間的連接過程, 從而構(gòu)建出整個(gè)集群的網(wǎng)絡(luò). 而在線階段主要完成對(duì)設(shè)備的驗(yàn)證以及發(fā)現(xiàn)受損設(shè)備后進(jìn)行的修復(fù)協(xié)議. 此外, 在線階段還加入了缺失探測(cè)機(jī)制, 可以及時(shí)發(fā)現(xiàn)因物理攻擊導(dǎo)致不可達(dá)的節(jié)點(diǎn), 將其隔離出集群,再進(jìn)行修復(fù)或者徹底移除操作. 表1定義了本文所用的符號(hào)及參數(shù).
表1 符號(hào)和參數(shù)
圖1 協(xié)議網(wǎng)絡(luò)圖
離線階段包括設(shè)備的初始化( i nitial協(xié)議)以及設(shè)備連接( j oin協(xié)議). 設(shè)備初始化過程中, 網(wǎng)絡(luò)管理者對(duì)新增設(shè)備進(jìn)行初始化工作; 設(shè)備連接過程是設(shè)備之間通過網(wǎng)絡(luò)管理者提供的安全通道建立連接, 為后續(xù)證明及信息交流提供基礎(chǔ).
4.1.1 設(shè)備初始化
如圖2所示, 當(dāng)新設(shè)備 D7要加入網(wǎng)絡(luò)時(shí), 網(wǎng)絡(luò)管理者 M 就會(huì)對(duì)D7執(zhí) 行i nitial協(xié)議, 生成設(shè)備對(duì)應(yīng)的配置信息, 其中包括: 私鑰 s k7, 公鑰 pk7, 身份證書c ert(pk7), 代碼證書c ert(c7), 網(wǎng)路管理員公鑰 pkM, 初始信譽(yù)值w7, 最后驗(yàn)證時(shí)間 ta7以及唯一設(shè)備標(biāo)識(shí)符d7, M保存軟件配置代碼c7, 便于后續(xù)修復(fù)(h eal)協(xié)議的使用. 對(duì)新設(shè)備的初始化可以表述為:
圖2 離線階段
每個(gè)設(shè)備的公私鑰對(duì)都是基于SM2 ECC密鑰體制[18]生成. 代碼證書c ert(ci)包含設(shè)備的可信散列代碼ci以及證書的公共信息. tai和te主要是在證明階段提供可靠的標(biāo)準(zhǔn), 當(dāng)前時(shí)刻為 tai+te時(shí), 就會(huì)對(duì)該設(shè)備執(zhí)行設(shè)備證明( a ttest協(xié)議). 由于觸發(fā)驗(yàn)證條件在于設(shè)備本身, 集群內(nèi)就可以并發(fā)執(zhí)行a ttest協(xié)議. 此外, 每個(gè)設(shè)備的信譽(yù)值取決于它參與的每次證明例程. 在證明例程中, 任何一個(gè)節(jié)點(diǎn)沒有權(quán)限為其他節(jié)點(diǎn)報(bào)告信譽(yù)值. 一旦發(fā)現(xiàn)某個(gè)節(jié)點(diǎn)是不可信的, 其信用值將被設(shè)置為-wmax. 在我們的方案中, 信譽(yù)值更高節(jié)點(diǎn)在鄰居節(jié)點(diǎn)的最終證明結(jié)果生成中擁有更大的權(quán)重.
4.1.2 設(shè)備連接
當(dāng)設(shè)備 Di初始化或者更新后, 通過網(wǎng)絡(luò)管理者M(jìn)提供的安全通道, 與鄰居設(shè)備進(jìn)行配置信息的交換.如圖2所示, D7初 始化后, 與鄰居設(shè)備D4和D5進(jìn)行連接. 在連接過程中, 它們雙方交換自身的公鑰 pki、身份證書 c ert(pki) 、代碼證書c ert(ci) 、當(dāng)前信譽(yù)值wi、最后驗(yàn)證時(shí)間tai以及唯一設(shè)備標(biāo)識(shí)符di. 設(shè)備的配置信息存儲(chǔ)在受硬件保護(hù)的內(nèi)存之中, 這就意味著設(shè)備節(jié)點(diǎn)無法虛報(bào)配置信息. 通過已認(rèn)證的密鑰協(xié)商協(xié)議生成基于雙方私鑰的會(huì)話密鑰k, 在本文中使用非相鄰形式橢圓曲線Diffie-Hellman密鑰交換協(xié)議[19]. 在后面的證明和修復(fù)過程中, k是雙方進(jìn)行數(shù)據(jù)交流的保證. 設(shè)備連接過程可描述為:
網(wǎng)絡(luò)管理者 M會(huì)周期性地根據(jù)簇頭選擇算法來選取簇頭, 使得簇頭的分布能覆蓋整個(gè)集群, 本文采用基于最佳簇半徑的無線傳感器網(wǎng)絡(luò)分簇路由算法[20]. 簇頭節(jié)點(diǎn)通過信息的傳輸形成了以 M為根節(jié)點(diǎn)的樹形結(jié)構(gòu), 其他普通設(shè)備節(jié)點(diǎn)以傳輸距離為參照連接到對(duì)應(yīng)的簇, 從而形成集群. 普通設(shè)備保存簇頭的公鑰 pkM, 便于后期提交證明報(bào)告. 對(duì)于網(wǎng)絡(luò)管理者 M , 存儲(chǔ)集群中所有設(shè)備當(dāng)前的信譽(yù)值, 在每次證明例程后會(huì)更新對(duì)應(yīng)設(shè)備的信譽(yù)值. 當(dāng)簇頭發(fā)現(xiàn)不可信的設(shè)備節(jié)點(diǎn)時(shí), 其信譽(yù)值將被設(shè)為- wmax, 將wi以 及di發(fā) 送給 M , 然后 M 對(duì)其進(jìn)行隔離, 再執(zhí)行h eal協(xié)議或者移除網(wǎng)絡(luò)等操作.
在線階段包括對(duì)設(shè)備進(jìn)行驗(yàn)證(a ttest)、對(duì)設(shè)備的修復(fù)( heal)以及缺失探測(cè)3個(gè)子協(xié)議. 一旦有設(shè)備Di觸 發(fā)驗(yàn)證條件, 鄰居設(shè)備就會(huì)對(duì)其執(zhí)行a ttest協(xié)議, 每個(gè)鄰居生成臨時(shí)的證明結(jié)果上傳至簇頭, 由簇頭生成最終的驗(yàn)證結(jié)果, 最后將 Di的最新信譽(yù)值上報(bào)網(wǎng)絡(luò)管理者 M. M 接收到Di的最新信譽(yù)值, 若等于信譽(yù)值最大值- wmax, M 就會(huì)對(duì)Di執(zhí) 行h eal 協(xié)議, Di將最終修復(fù)結(jié)果反饋 M. 在缺失探測(cè)中采用心跳協(xié)議來進(jìn)行, M廣播心跳請(qǐng)求, 由簇頭節(jié)點(diǎn)負(fù)責(zé)收集反饋, 找出不可達(dá)節(jié)點(diǎn),從而對(duì)其進(jìn)行修復(fù)或移除等操作.
在此, 我們引入Merkle樹對(duì)設(shè)備當(dāng)前的軟件狀態(tài)進(jìn)行度量. 由于Merkle樹能夠自下而上計(jì)算度量值,從而匯聚到根節(jié)點(diǎn). 因此, 在證明階段, 鄰居設(shè)備僅需驗(yàn)證根節(jié)點(diǎn)的度量值即可形成臨時(shí)驗(yàn)證報(bào)告. 在修復(fù)階段, 如圖3所示, 證明設(shè)備 Di將待證明的代碼分成ω段等長的部分: c1,c2,···,cω, 并對(duì)應(yīng)計(jì)算哈希值:hi[ω+1],hi[ω+2],···,hi[2ω], 然后以這些哈希值為葉子節(jié)點(diǎn),c′i為根, 構(gòu)造Merkle哈希樹, 其中, 2 ω表示Merkle hash tree (MHT)中除根節(jié)點(diǎn)之外的節(jié)點(diǎn)數(shù). 受惡意軟件感染的代碼段會(huì)導(dǎo)致沿著根路徑生成錯(cuò)誤的哈希值. 通過這種方式, 可以確認(rèn)受惡意軟件感染的代碼段.
圖3 Merkle哈希樹
4.2.1 設(shè)備證明
每當(dāng)設(shè)備 Di的 信譽(yù)值wi<wmin或者到達(dá)驗(yàn)證時(shí)刻,鄰居設(shè)備 Dj就會(huì)對(duì)Di發(fā)出挑戰(zhàn), 并記錄發(fā)送時(shí)間, 挑戰(zhàn)包含隨機(jī)數(shù) Nij. Di結(jié)合挑戰(zhàn)和自身當(dāng)前狀態(tài)以及會(huì)話密鑰kij生成消息驗(yàn)證碼μij來報(bào)告其軟件狀態(tài), 在此采取基于MHT進(jìn)行度量, 最終度量為以為根節(jié)點(diǎn)的樹. Dj接 收到結(jié)果后, 通過連接階段保存的cij以及密鑰kij驗(yàn)證 μij的正確性, 若 μij驗(yàn)證成功, 則Dj生成臨時(shí)驗(yàn)證結(jié)果 bij=1, 反之則推斷 Di受 到攻擊, 即bij=-1, 而當(dāng)Di無 響應(yīng), 即為超時(shí), 則bij=0. 形式化為:
簇頭接收所有鄰居節(jié)點(diǎn)的臨時(shí)證明結(jié)果后, 通過信譽(yù)機(jī)制進(jìn)行最終驗(yàn)證結(jié)果, 每個(gè)鄰居設(shè)備的信譽(yù)值代表著其參與生成最終驗(yàn)證結(jié)果的權(quán)重. 最后廣播Di的唯一設(shè)備標(biāo)識(shí)di以 及當(dāng)前的信譽(yù)值wi. 對(duì)于鄰居設(shè)備Dj, 簇頭會(huì)將最終驗(yàn)證結(jié)果 f與各鄰居節(jié)點(diǎn)的臨時(shí)證明作對(duì)比, 做出相對(duì)應(yīng)的獎(jiǎng)懲措施. 最終驗(yàn)證結(jié)果及新信譽(yù)值計(jì)算公式如下:
其中, x 為 Di鄰居數(shù)量, wmed為鄰居節(jié)點(diǎn)信譽(yù)值中位數(shù),它能夠?qū)τ诟咝抛u(yù)值的設(shè)備起到制衡作用, λ為調(diào)和參數(shù), 且λ ∈(0,1], 隨λ 增加驗(yàn)證的條件越是嚴(yán)格. a ttest協(xié)議流程如算法1所示.
Dj Di attest算法1. 鄰居設(shè)備對(duì)的算法Nijc′icijkij輸入: ; ; ;b輸出:Dj 1: // 運(yùn)行程序reqij=mac(kij;Nij)Nij Di 2: 發(fā)送 , 給 ;startTimer()3: ;Timerout()=1 bij=0 4: if then ;Vermac(kij;Nij||cij,μij)=1 bij=1 5: else if then ;bij=-1 6: else ;7: end if bij 8: 將 發(fā)送至簇頭Di 9: // 運(yùn)行程序Vermac(kij;|reqij)=1 10: if thenμij=mac(kij;Nij||c′i)11:12: end if
4.2.2 設(shè)備修復(fù)
網(wǎng)絡(luò)管理者 M接收簇頭上報(bào)證明結(jié)果, 包括證明設(shè)備 Di的更新信譽(yù)值wi以 及唯一設(shè)備標(biāo)識(shí)符di. 當(dāng)wi=-wmax, M 對(duì)Di執(zhí)行heal協(xié)議. 具體流程如下.
由于每個(gè)設(shè)備都有 M的公鑰, 因此 M 可以在集群中與任意設(shè)備進(jìn)行通信, M 向Di發(fā)送一個(gè)請(qǐng)求信息reqi. Di接收后將其軟件配置和一個(gè)新的隨機(jī)數(shù)Ni利用MHT算法度量后用 M 的公鑰加密后發(fā)送給 M . M將自己保存的軟件配置 ci以同樣方式度量進(jìn)行MHT的遍歷, 直到到達(dá)葉子節(jié)點(diǎn). 最后, M為每個(gè)異常的葉子節(jié)點(diǎn)添加一個(gè)代碼段l, 用自身私鑰 s kM對(duì)l進(jìn)行簽名生成補(bǔ)丁Γ, 并將其發(fā)送回Di. 一個(gè)代碼段l ={s,e,p}包含其起始地址s、結(jié)束地址e , 其代碼p. Di進(jìn)行補(bǔ)丁修復(fù),修復(fù)成功輸出 r =1. 否則, 輸出r =0. h eal過程可以通過如下公式表述為:
Di可以謊報(bào)修復(fù)結(jié)果來躲避補(bǔ)丁修復(fù), 因此, 當(dāng)heal 結(jié)束后, 將Di的信譽(yù)值設(shè)置為0, 這樣Di就會(huì)觸發(fā)attest 協(xié)議, 對(duì)Di進(jìn)行再次證明, 若證明可信, 則說明Di已經(jīng)恢復(fù)正常的軟件配置. 反之, Di的信譽(yù)值將被設(shè)置為- wmax, 從而需要進(jìn)行再次修復(fù), 直到其配置正常. 此外, 為了避免同一設(shè)備a ttest 與h eal反 復(fù)執(zhí)行, M記錄設(shè)備執(zhí)行 heal 的時(shí)間, 如果出現(xiàn)連續(xù)3次執(zhí)行h eal失敗, 將直接移除該設(shè)備. h eal協(xié)議的算法流程如算法2所示.
M Di heal算法2. 網(wǎng)絡(luò)管理者對(duì)的算法Nic′i{hi[0],···,hi[2ω]}pkM ci{hM[0],···,hM[2ω]}輸入: ; ; ; ; ;r輸出:M 1: //運(yùn)行程序reqi=Sign(skM;Ni) Di 2: 發(fā)送 給 ;wait()3: //等待接收反饋decrypt(skM;d′i)=1 4: if then k<2ω 5: while ( ) then hi[k]!=hM[k]6: if ( ) then k=2k+1 7: ;8: else k++9: ;10: end if 11: end if l={s,e,p}12: ;Γ=Sign(skM;l) Di 13: 將 發(fā)送至wait() Di 14: //等待 回復(fù)后r=0 15: if then attest()16: ;17: end if Di 18: // 運(yùn)行程序VerSign(pkM;Ni||reqi)=1 19: if then di=MHT(c′i)20: ;d′i=encrypt(pkM;di) M 21: 將 發(fā)送至22: end if wait()23: //等待接收補(bǔ)丁VerSign(pkM;Γ)=1 24: if then DoPatch(Γ)25: ;
r=1 26: ;27: else r=0 28: ;29: end if r M 30: 將 加密后發(fā)往
4.2.3 在線探測(cè)
在線探測(cè)階段負(fù)責(zé)對(duì)整個(gè)集群設(shè)備進(jìn)行定期的探測(cè), 監(jiān)測(cè)設(shè)備的運(yùn)行狀態(tài). 本文采用基于多級(jí)心跳協(xié)議[21],由網(wǎng)絡(luò)管理者定期給簇頭節(jié)點(diǎn)發(fā)出心跳信息, 簇頭節(jié)點(diǎn)在組內(nèi)廣播心跳信息, 并收集組內(nèi)普通節(jié)點(diǎn)的心跳信息, 形成一個(gè)alive-node消息, 發(fā)給網(wǎng)絡(luò)管理者. 若在規(guī)定的時(shí)間未接收到節(jié)點(diǎn)設(shè)備的心跳信息, 利用多級(jí)心跳協(xié)議增加和刪除節(jié)點(diǎn)的便利性, 將其從集群的拓?fù)渚W(wǎng)絡(luò)中刪除, 經(jīng)過驗(yàn)證為可信后, 再重新連接進(jìn)入集群中.
我們將這個(gè)過程形式化為一個(gè)安全實(shí)驗(yàn)EXPADV敵手 A DV可以與其相連的設(shè)備進(jìn)行通信, 至少修改一個(gè)設(shè)備 Di的軟件配置, A DV可以篡改、竊聽或刪除所有通過 Di傳輸?shù)男畔? 經(jīng)過一個(gè)多項(xiàng)式步驟后, Di被驗(yàn)證簇頭最終驗(yàn)證為1, 即為證明成功. 也就是敵手成功攻破Di.
定義1. 安全集群證明. F是一個(gè)關(guān)于?N,?sign,?hmac的多項(xiàng)式函數(shù). 受損設(shè)備通過證明的概率為Pr[f=1|EXPADV(1?)=b] 在?=F(?N,?sign,?hmac)中被認(rèn)為是可以忽略的, 則證明和修復(fù)方案是安全的.
定理1. 如果底層簽名、加密和MHTMAC方案是選擇性防偽的, 則本方案是一個(gè)安全的集群證明方案.
證明: ADV 可以通過欺騙鄰居節(jié)點(diǎn)返回b =1或欺騙網(wǎng)絡(luò)管理者返回 r=1來破壞本方案的安全. 下面通過兩種情況來分析:
(1) ADV 攻擊a ttest: A DV 想要使得b =1來通過鄰居節(jié)點(diǎn)的驗(yàn)證可以使用以下策略: 1) 使用基于原始代碼的先前的HMAC μold; 2) 計(jì)算出基于新挑戰(zhàn)的HMAC μ′; 3) 入侵多個(gè)鄰居節(jié)點(diǎn), 影響最終的證明結(jié)果.
對(duì)于策略1), 每次的挑戰(zhàn) N 都是新的隨機(jī)值, 當(dāng)且僅當(dāng) N =Nold時(shí) , 驗(yàn)證可以通過. 然而N =Nold的概率為2-?N. 所以通過驗(yàn)證的概率可以忽略. 對(duì)于策略2), 一旦軟件配置發(fā)生改變生成的HMAC無法通過鄰居節(jié)點(diǎn)的驗(yàn)證, 因此μ′通過驗(yàn)證的概率也可以忽略. 對(duì)于策略3), 對(duì)于單個(gè)節(jié)點(diǎn)而言, P r[f=1|EXPADV(1?)=b]是可以忽略的, 而同時(shí)攻破 k個(gè)節(jié)點(diǎn)概率為(Pr[f=1|EXPADV(1?)=b])k, 也是可以忽略的.
(2) ADV 攻擊h eal: h eal 協(xié)議由網(wǎng)絡(luò)管理者 M 對(duì)受損設(shè)備 Di進(jìn)行修復(fù), A DV 可以以下策略來逃避h eal協(xié)議: 1) 偽造r =1返 回給 M ; 2) 在Di安裝補(bǔ)丁前篡改補(bǔ)丁.
對(duì)于策略1), 雖然可以逃避補(bǔ)丁Γ 安裝, 但是在之后的證明例程依舊被檢測(cè)出來, 超過3次將被移出集群. 對(duì)于策略2), 與a ttest 類似, A DV 試圖提取Γ 中提取補(bǔ)丁代碼再進(jìn)行修改的概率是可以忽略的.
因此, ADV 通過攻擊a ttest 協(xié)議h eal協(xié)議來攻破良性設(shè)備的概率在 ?N,?sign,?hmac上可以忽略不計(jì), 再加上在線探測(cè)階段對(duì)物理攻擊進(jìn)行檢測(cè), 由此可證明本方案是一個(gè)安全的集群證明方案.
本節(jié)將從計(jì)算開銷、通信開銷、內(nèi)存開銷、運(yùn)行時(shí)間以及能源開銷這幾個(gè)方面對(duì)本協(xié)議進(jìn)行分析, 此外我們還對(duì)本文集群證明協(xié)議進(jìn)行了仿真, 并與其他幾個(gè)類似方法進(jìn)行了對(duì)比.
(1) 計(jì)算開銷. 對(duì)于普通設(shè)備而言, 主要計(jì)算開銷在于一些密碼操作. 在證明階段, 證明設(shè)備需要計(jì)算mi個(gè)m ac() 并驗(yàn)證mi個(gè)V ermac() , 其中mi表示Di鄰居設(shè)備的數(shù)量. 鄰居設(shè)備驗(yàn)證一個(gè) V ermac() 并 計(jì)算一個(gè) S ign().對(duì)于簇頭設(shè)備, 需要驗(yàn)證 mi個(gè)V erSign()并計(jì)算2個(gè)Sign(), 一個(gè)發(fā)往網(wǎng)絡(luò)管理者 M, 一個(gè)廣播到組內(nèi)各個(gè)節(jié)點(diǎn). 在修復(fù)階段, 修復(fù)設(shè)備需計(jì)算2個(gè)e ncrypt()驗(yàn)證2個(gè)d ecrypt() , 而 M 需要驗(yàn)證2個(gè)V erSign()并計(jì)算2個(gè)Sign().
(2) 通信開銷. 我們使用SM3實(shí)現(xiàn)MHTMAC, 密鑰協(xié)商算法和簽名方案都是采用基于SM2的算法. 以len(x)=1 表 示 x 的長度為1 B. 因此,len(MHTMAC)=32ω-16, 其中ω 為 驗(yàn)證代碼分割的段數(shù), l en(Sign)=64,len(N)=16, l en(μ)=16, l en(w)=4, l en(t)=4, l en(d)=4,len(b)=4, l en(r)=4. 證書的大小取決于密鑰和簽名,所以 l en(cert)=48. 因此, 在證明階段, 證明設(shè)備而言,需發(fā)送( 32ω-16)miB以及接收1 6miB; 鄰居設(shè)備而言,需發(fā)送20 B以及接收 ( 32ω-16) B; 簇頭節(jié)點(diǎn)需發(fā)送(128+8ni) B接收4 miB; 網(wǎng)絡(luò)管理者 M 接收64 B. 在修復(fù)階段, 修復(fù)設(shè)備需接收36 B以及發(fā)送( 32ω-12) B,M發(fā)送36 B以及接收( 32ω-12) B.
(3) 內(nèi)存開銷. 每個(gè)普通設(shè)備需要存儲(chǔ): 1)自己的密鑰對(duì) ( ski,pki)和 設(shè)備標(biāo)識(shí)符di; 2)鄰居設(shè)備的設(shè)備標(biāo)識(shí)符dj及 其信用值wj、 最近證明時(shí)間taj、 代碼證書cert(hj)和會(huì)話密鑰kij; 3) 簇頭的公鑰. 簇頭設(shè)備還需要存儲(chǔ)簇內(nèi)所有節(jié)點(diǎn)的設(shè)備標(biāo)識(shí)、相應(yīng)的信用值和公鑰. 因此,普通節(jié)點(diǎn)需要 ( 52+80mi) B的存儲(chǔ)空間, 簇頭節(jié)點(diǎn)需要(52+80mi+24ni)B的存儲(chǔ)空間.
(4) 運(yùn)行時(shí)間. 我們使用th、 tp、 tca、 ttr、 ts、 tv來表示計(jì)算或驗(yàn)證 MHTMAC、生成隨機(jī)數(shù)、一跳訪問信道并傳輸一個(gè)字節(jié)、簽名或驗(yàn)證簽名的時(shí)間. H是群的生成樹的高度. 因此, 總證明時(shí)間tattest為:
總修復(fù)時(shí)間theal為 :
(5) 能源開銷. 我們分別使用 Es、 Er、 Ep、 Eh、 Esg、Ev表示發(fā)送 1 B、接收 1 B、生成隨機(jī)數(shù)、計(jì)算或驗(yàn)證 MHTMAC 以及簽名和驗(yàn)證或簽名的能源開銷. 在一個(gè)證明過程中, 簇頭節(jié)點(diǎn)的最大能耗為:
E≤(128+8(ni+1)Es)+4miEr+2Esg+tvmiEv
證明設(shè)備的最大能耗為:
Ei≤(32ω-16)miEs+16miEr+miEh+Ev
鄰居設(shè)備的最大能耗為:
Ej≤20Es+(32ω-16)Er+Ep+Esg+Ev
在一個(gè)修復(fù)過程中, 修復(fù)設(shè)備的最大能耗為:
Ei≤(32ω+24)Es+(32ω+24)Er+Ep+Eh+4Esg+4Ev
本方案還與ESDRA、SEDA、SALAD在運(yùn)行時(shí)間、平均能耗等方面進(jìn)行比較, 具體數(shù)據(jù)展示如表2所示.
表2 不同方案對(duì)比
(6) 安全性對(duì)比. 我們將本方案與ESDRA、HEALED進(jìn)行安全性對(duì)比. 如表3所示, 在我們的方案中, 增加了在線探測(cè)技術(shù), 可以針對(duì)物理攻擊造成探測(cè)不到的設(shè)備進(jìn)行識(shí)別, 從而預(yù)防物理攻擊. 在ESDRA中, 簇頭與所有簇內(nèi)設(shè)備公用一個(gè)會(huì)話密碼, 存在會(huì)話密鑰泄露的風(fēng)險(xiǎn), 本方案改用簇頭的公鑰進(jìn)行加密, 僅有簇頭本身能夠解密, 解決了會(huì)話密鑰竊取的風(fēng)險(xiǎn). 此外, 在ESDRA中, 證明設(shè)備的新信譽(yù)值計(jì)算存在高信譽(yù)值影響整個(gè)結(jié)果的風(fēng)險(xiǎn), 一旦攻擊者入侵高信譽(yù)值設(shè)備, 足以影響整個(gè)集群的安全性, 本方案引入中位數(shù), 計(jì)算每個(gè)證明設(shè)備的鄰居設(shè)備信譽(yù)值的中位數(shù), 以此作為基準(zhǔn), 從而規(guī)避高信譽(yù)值設(shè)備“一票否定”的情況, 而在HEALED中, 利用傳遞性, 也同樣存在高信任度的設(shè)備, 再加上證明節(jié)點(diǎn)的任意性, 很難快速找到受損設(shè)備.
表3 安全性比較
(7) 仿真結(jié)果. 我們使用OMNet++[22]對(duì)本文集群證明協(xié)議進(jìn)行了仿真模擬, 并與ESDRA、SEDA、SALAD幾個(gè)代表性工作進(jìn)行了比較. 在仿真過程中, 我們使用嵌入式開發(fā)板上測(cè)得的密碼算法性能數(shù)據(jù)[23]進(jìn)行仿真, 相關(guān)密碼算法在嵌入式開發(fā)板上的數(shù)據(jù)如表4所示.
表4 采用的密碼操作耗時(shí)
對(duì)于本方案, 我們?cè)O(shè)置初始信譽(yù)值為3, 最大信譽(yù)值wmax為5, 最小信譽(yù)值wmin為 1, 調(diào)和參數(shù)λ 為0.8, 獎(jiǎng)勵(lì)信譽(yù)值為1, 懲罰信譽(yù)值為2. 通過仿真模擬, 以上4個(gè)方案得出數(shù)據(jù)如圖4、圖5所示.
圖4展現(xiàn)了本方案與ESDRA、SEDA以及SALAD關(guān)于證明設(shè)備不同鄰居數(shù)量的驗(yàn)證時(shí)間. 相較于ESDRA,由于本方案在上報(bào)臨時(shí)驗(yàn)證結(jié)果是采用簇頭的公鑰進(jìn)行加密, 并且后期廣播證明設(shè)備的驗(yàn)證結(jié)果采用簇頭簽名, 因此運(yùn)行時(shí)間有所增加, 但在總體看來, 為了提高協(xié)議的安全性, 這些性能犧牲還是在可以接收的范圍內(nèi), 并且分布式證明的優(yōu)勢(shì)依舊可以體現(xiàn). 圖5描繪了本方案與ESDRA、SEDA以及SALAD關(guān)于不同的集群設(shè)備數(shù)量所進(jìn)行的證明時(shí)間, 本方案對(duì)于集群數(shù)量的增大, 受影響的幅度較小.
圖4 鄰居節(jié)點(diǎn)數(shù)量與運(yùn)行時(shí)間關(guān)系圖
圖5 集群設(shè)備數(shù)量與運(yùn)行時(shí)間關(guān)系圖
本文提出了一種基于信譽(yù)機(jī)制和Merkle樹的安全集群證明及修復(fù)方案. 利用信譽(yù)機(jī)制實(shí)現(xiàn)了多對(duì)一的證明協(xié)議, 不僅能有效解決單點(diǎn)故障, 可以從設(shè)備觸發(fā)驗(yàn)證, 并且適用于半動(dòng)態(tài)網(wǎng)絡(luò). 引入Merkle樹進(jìn)行度量, 能夠快速精確地識(shí)別被惡意軟件感染的代碼塊,并進(jìn)行高效地恢復(fù)到可信狀態(tài). 通過對(duì)方案的安全性分析和性能評(píng)估, 結(jié)果表明, 本文集群證明在提高了安全性的同時(shí)導(dǎo)致的性能開銷是可以接受的.