趙保華,王志皓,陳連棟,任春卉,余發(fā)江,徐慶
(1. 北京工業(yè)大學(xué) 計算機(jī)學(xué)院,北京 100124;2. 國網(wǎng)智能電網(wǎng)研究院有限公司,北京 102209;3. 電力系統(tǒng)人工智能國家電網(wǎng)公司聯(lián)合實驗室(國網(wǎng)智能電網(wǎng)研究院有限公司),北京 102209;4. 國網(wǎng)河北省電力有限公司信息通信分公司,河北 石家莊 050021;5. 武漢大學(xué) 國家網(wǎng)絡(luò)安全學(xué)院,湖北 武漢 430072)
隨著電力物聯(lián)網(wǎng)的不斷發(fā)展[1-4],數(shù)據(jù)規(guī)模越來越大,結(jié)構(gòu)越來越繁雜,傳統(tǒng)的集中控制式數(shù)據(jù)處理信息系統(tǒng)已無法適應(yīng)新環(huán)境,云邊協(xié)同[5]數(shù)據(jù)處理的電力物聯(lián)網(wǎng)架構(gòu)被提出,但現(xiàn)有架構(gòu)存在以下問題和需求:(1)電力物聯(lián)網(wǎng)設(shè)備的安全性需要得到保障,需要對其進(jìn)行可信度量認(rèn)證,以及時發(fā)現(xiàn)問題設(shè)備,采取管控措施;(2)在云端平臺對設(shè)備進(jìn)行逐一認(rèn)證會導(dǎo)致平臺壓力大,系統(tǒng)傳輸需求高,系統(tǒng)響應(yīng)慢等問題;(3)可以借助邊緣計算架構(gòu)[6-10],使用靠近設(shè)備側(cè)的邊緣代理來處理設(shè)備度量信息,但邊緣代理自身資源有限,無法完成所有認(rèn)證和存儲工作。
對于電力物聯(lián)網(wǎng)終端設(shè)備的可信度量,可以采用可信計算技術(shù)[11-14]。然而傳統(tǒng)的基于可信計算的完整性度量技術(shù)如IMA[15]等,存在以下問題:(1)其存儲完整度量信息的日志結(jié)構(gòu)是線性的,線性結(jié)構(gòu)不易支持設(shè)備的大批量認(rèn)證,只能逐個單獨認(rèn)證,效率低下;(2)認(rèn)證時需要所有設(shè)備的度量信息,不利于設(shè)備的隱私性保護(hù);(3)在認(rèn)證過程中需要遍歷線性結(jié)構(gòu)的日志,當(dāng)度量對象過多,日志會變得很大,此時度量消耗過大;(4)當(dāng)驗證失敗時,不能準(zhǔn)確定位到出錯的設(shè)備。
IMA的后續(xù)工作PRIMA[16]通過策略規(guī)約的思想對IMA進(jìn)行了優(yōu)化,但本質(zhì)上仍沒有解決核心問題。針對IMA 的不足,文獻(xiàn)[17]提出一種保護(hù)隱私的高效遠(yuǎn)程驗證機(jī)制,該機(jī)制使用默克爾哈希樹結(jié)構(gòu)存儲度量值,在一定程度上解決了隱私泄露問題。默克爾哈希樹是一棵平衡的二叉樹,葉子節(jié)點驗證路徑較長,樹的中間節(jié)點數(shù)量較多,嚴(yán)重影響驗證效率。文獻(xiàn)[18]提出了一種基于非平衡哈希樹的完整性遠(yuǎn)程驗證機(jī)制,使用非平衡哈希樹存儲設(shè)備度量信息,節(jié)省了存儲空間和驗證時的計算時間,但是該非平衡樹中每個度量值都對應(yīng)一個葉子節(jié)點,在對設(shè)備進(jìn)行持續(xù)性可信度量時,同一設(shè)備需要存儲多個度量值,這會導(dǎo)致樹的葉子節(jié)點較多,樹的高度較高。這些方案中都沒有針對電力物聯(lián)網(wǎng)的邊緣計算架構(gòu)做適配,并沒有采用批量認(rèn)證機(jī)制。
綜上所述,現(xiàn)有的可信連接架構(gòu)和度量技術(shù)沒有考慮電力物聯(lián)網(wǎng)的設(shè)備特點和需求。本文提出了一種云邊端協(xié)同的可信樹形批量認(rèn)證機(jī)制,并經(jīng)原型實現(xiàn)和性能分析驗證了所提機(jī)制的有效性。
基于云邊端協(xié)同[19-20]的可信樹形批量認(rèn)證機(jī)制主要涉及三類實體:電力物聯(lián)設(shè)備、邊緣代理、云端認(rèn)證平臺。幾類實體間架構(gòu)如圖1所示。
圖1 電力物聯(lián)網(wǎng)可信樹形批量認(rèn)證機(jī)制Fig. 1 A trusted batch authentication mechanism based on unbalanced hash tree for power Internet of things
(1)電力物聯(lián)設(shè)備 E ,使用輕量級的可信架構(gòu)進(jìn)行自身可信度量并傳遞度量信息至邊緣代理;(2)邊緣代理 A ,采用輕量級可信架構(gòu)進(jìn)行自身可信度量,同時對 E 進(jìn)行身份認(rèn)證,接收其度量信息并存儲在度量樹T中;在云端認(rèn)證平臺請求認(rèn)證時,生成認(rèn)證所需多路徑信息并傳遞至云端平臺;(3)云端認(rèn)證平臺 P ,具有設(shè)備的度量基準(zhǔn)值,對邊緣代理進(jìn)行身份驗證,對設(shè)備的度量信息進(jìn)行批量認(rèn)證。
該可信樹形批量認(rèn)證機(jī)制過程包括設(shè)備的可信度量、邊緣代理對設(shè)備的身份驗證、邊緣代理的度量樹更新、云端認(rèn)證平臺對設(shè)備度量信息的批量認(rèn)證幾個部分。
實體:電力物聯(lián)設(shè)備 E ,邊緣代理 A ,云端認(rèn)證平臺 P ;基礎(chǔ): E 和 A 各具有受保護(hù)的隨機(jī)唯一設(shè)備標(biāo)識di和一小段不可更改的可信根代碼tr,P有設(shè)備基準(zhǔn)度量值sv。
可信樹形批量認(rèn)證機(jī)制如下。
(1)可信度量: E基于 d iE和 trE生成復(fù)合設(shè)備標(biāo)識 c diE,根據(jù) c diE生成設(shè)備密鑰 d kE,再根據(jù)應(yīng)用固件的度量值和 c diE生成認(rèn)證密鑰 a kE。
(2)身份驗證: A 生成隨機(jī)數(shù)r1并發(fā)送給E, E用dk私鑰(sdkE)對r1和ak公鑰(pakE)簽名得到σE并將其和pakE發(fā)送給A,A對σE進(jìn)行驗證,驗證通過得到正確的pakE。
(3)度量樹更新: A 找到 E 在度量樹T中對應(yīng)的葉子節(jié)點,并用pakE進(jìn)行更新得到樹T'。
(4)批量認(rèn)證: P 將隨機(jī)數(shù)r2和需認(rèn)證設(shè)備集合S={E1,E2,...,Ei}發(fā)送給A,A根據(jù)S從度量樹T中獲取認(rèn)證所需多路徑信息wp,用sdkA對wp和pakA簽名得到σA并發(fā)送給P,P先對σA進(jìn)行驗證,然后根據(jù)sv和wp進(jìn)行重構(gòu)比較,得到設(shè)備認(rèn)證結(jié)果。
假設(shè)有攻擊者針對本文提出的系統(tǒng)進(jìn)行攻擊,系統(tǒng)存在以下威脅:(1)攻擊者入侵并攻擊電力物聯(lián)設(shè)備 E ,根據(jù)自己的攻擊目的改變其固件層代碼C1。(2)攻擊者入侵邊緣代理 P ,篡改邊緣代理用于存儲設(shè)備度量信息的非平衡哈希樹結(jié)構(gòu)。(3)攻擊者對設(shè)備與邊緣代理、邊緣代理與云端認(rèn)證平臺間的通信信息進(jìn)行攻擊,實施阻斷、監(jiān)聽、竊取等攻擊。
考慮到電力物聯(lián)系統(tǒng)設(shè)備規(guī)模龐大、升級困難,且受到成本限制,缺乏成熟的安全解決方案,且大部分的設(shè)備缺少專用的安全芯片TPM,本文電力物聯(lián)設(shè)備和邊緣代理均采用一種輕量級可信架構(gòu)[21-22]進(jìn)行可信度量,完成本體固件層度量值的提取。
可使用該輕量級度量架構(gòu)的設(shè)備只需滿足如下2個條件:(1)具備唯一的設(shè)備標(biāo)識di。di是廠商在生產(chǎn)過程中寫入設(shè)備硬件的一個隨機(jī)數(shù),出廠后不可更改。(2)設(shè)備加電啟動時首先執(zhí)行的核心層的首段代碼作為可信根tr。可信根代碼不可更改,負(fù)責(zé)核心層代碼的完整性評估和度量。作為整個電力物聯(lián)系統(tǒng)信任鏈的起點,可信根擁有對di的唯一訪問權(quán),以保證整個系統(tǒng)的可信和安全。在核心層之上,是設(shè)備的可更新固件層(包含電力系統(tǒng)應(yīng)用固件代碼)。由于各層級之間對代碼的度量和信任的傳遞過程是類似的,此輕量級架構(gòu)也適用于裝載程序-操作系統(tǒng)-電力應(yīng)用程序多層級軟件架構(gòu)的電力物聯(lián)設(shè)備。
在電力物聯(lián)設(shè)備啟動時,設(shè)備使用如圖2所示的輕量級架構(gòu)進(jìn)行可信度量并獲取度量信息。算法首先執(zhí)行可信根代碼,由可信根對核心層代碼C0進(jìn)行度量,再將信任鏈擴(kuò)展到上層代碼,整個度量過程分為4個步驟。
圖2 輕量級可信度量架構(gòu)Fig. 2 Light weight trusted measurement architecture
(1)系統(tǒng)可信根以設(shè)備底層標(biāo)識 d iE和核心層代碼度量值C0作為輸入,計算得到復(fù)合設(shè)備標(biāo)識符 c diE。生成 c diE之后,可信根使用鎖存機(jī)制關(guān)閉對 d iE的訪問權(quán)限。
(2)核心層利用公私鑰對生成函數(shù),以cdiE為輸入,生成設(shè)備公私鑰對d kE, d kE=KeyGen(cdiE)。將 c diE寫入設(shè)備證書 c dkE中(設(shè)備證書在設(shè)備生產(chǎn)或安裝過程中由供應(yīng)商提供,證書中包含dk公鑰,由供應(yīng)商認(rèn)證)。由于設(shè)備核心層代碼一般不會改變,每次啟動生成的dk公私鑰對和設(shè)備廠商處存儲的公私鑰對相同。
(3)隨后核心層計算可更新固件層代碼的度量值,與 c diE一起作為輸入,生成可更新固件層C1的認(rèn)證密鑰 a kE, a kE=KeyGen(cdiE,Hash(C1))。
(4)核心層清除內(nèi)存中的有關(guān)信息,將設(shè)備證書 c dkE、 認(rèn)證密鑰 a kE移 交至固件層。
在設(shè)備E 的可更新固件層獲得認(rèn)證密鑰ak、dk公鑰證書和設(shè)備的控制權(quán)之后,設(shè)備可向邊緣代理 A 發(fā)送請求, A 對 E 進(jìn)行身份驗證。身份驗證可以保證與邊緣代理進(jìn)行通信的電力物聯(lián)設(shè)備身份的正確性。邊緣代理生成一個隨機(jī)數(shù)r1,將其作為挑戰(zhàn)消息發(fā)送給設(shè)備;設(shè)備使用認(rèn)證密鑰dk私鑰(s dkE)對挑戰(zhàn)消息r1和ak公鑰(pakE)進(jìn)行簽 名 得 到 σE=Sign(r1||pakE,sdkE)。 將 簽 名 σE和 寫有cdi的dk公鑰證書 c dkE發(fā)送給邊緣代理。
邊緣代理收到應(yīng)答消息后,利用供應(yīng)商公鑰驗證 c dkE的正確性,驗證通過則用證書中的dk公鑰 p dkE驗證簽名 σE,驗證成功則將設(shè)備包含度量信息的 pakE存儲到樹形結(jié)構(gòu)中,進(jìn)行度量樹更新過程,失敗則報錯。
2.3.1 度量樹結(jié)構(gòu)
邊緣代理采用一棵非平衡哈希樹結(jié)構(gòu)存儲各電力物聯(lián)設(shè)備的度量信息。該非平衡哈希樹中任意節(jié)點的左子樹都是一棵滿二叉樹。樹中節(jié)點的結(jié)構(gòu)定義如下:
樹中的每個葉子節(jié)點都代表一個電力物聯(lián)設(shè)備,每個邊緣代理需要存儲多個電力物聯(lián)網(wǎng)設(shè)備S={E1,E2,...,Ei}的度量值信息,為了對同一設(shè)備進(jìn)行多次可信度量,設(shè)備的最新度量值會以其ak公鑰 pakEi的形式覆蓋到原有葉子節(jié)點中,vali=Hash(pakEi),其中 pakEi=KeyGen(cdi,Hash(C1)),C1為設(shè)備 Ei可更新固件層的度量值。由此方法計算出的 v ali,可以體現(xiàn)度量對象 Ei當(dāng)前的可信狀態(tài),邊緣代理將此值作為樹形結(jié)構(gòu)的葉子節(jié)點值進(jìn)行存儲。除了葉子節(jié)點以外的所有中間節(jié)點值都是其左右子節(jié)點鏈接后的哈希值:valpnt=Hash(valleft||valright)。該樹形結(jié)構(gòu)只需初始化一次,初始樹為空,可以對其多次擴(kuò)展,執(zhí)行節(jié)點添加和更新操作。
2.3.2 度量值添加
當(dāng)添加的度量值是樹中已存儲設(shè)備的新度量值時,直接找到該設(shè)備對應(yīng)葉子節(jié)點,以該新值替換葉子節(jié)點中原有的值,更新該節(jié)點到根節(jié)點路徑上各節(jié)點的值。
當(dāng)添加的度量值是某設(shè)備首次度量值時,執(zhí)行算法1將其添加到樹中。
加入過程需要生成兩個節(jié)點,分別是中間節(jié)點N2a?2以及葉子節(jié)點N2a?1(a為樹形結(jié)構(gòu)中已有葉子節(jié)點的數(shù)量)。首先根據(jù)待加入的設(shè)備度量值信息 pakE,計算出 相應(yīng)葉子節(jié)點N2a?1的 值val2a?1=Hash(pakE)。根據(jù)已有的葉子節(jié)點數(shù)量a的不同,樹形結(jié)構(gòu)有以下3種變化,添加完葉子節(jié)點后a都會加1。
(1)a=2n:如圖3所示,當(dāng)前樹結(jié)構(gòu)為滿樹,將N2a?2作為樹新的根節(jié)點,N2a?1作為根的右子節(jié)點,更新根節(jié)點N2a?2的哈希值。
圖3 a=2時度量樹更新過程Fig. 3 Tree updating process when a=2
(2)a為奇數(shù)(a>1):如圖4所示,將N2a?2作為N2a?1的父節(jié)點,N2a?2的左子節(jié)點為添加前的最后一個葉子節(jié)點N2a?3,并從N2a?2節(jié)點開始向上直至根節(jié)點,重新計算并更新相關(guān)路徑上節(jié)點的哈希值。
圖4 a=3時度量樹更新過程Fig. 4 Tree updating process whena=3
(3)a為偶數(shù)且a≠2n:如圖 5 所示,將N2a?1作為N2a?2的右子節(jié)點,對于中間節(jié)點N2a?2,先找到其應(yīng)在樹中的位置,修改N2a?2節(jié)點的兩個親屬節(jié)點相關(guān)的指針,將N2a?2節(jié)點添加到樹中,插入完成后從N2a?2節(jié)點開始向上直至根節(jié)點,更新相關(guān)路徑上節(jié)點的哈希值。
圖5 a=6時度量樹更新過程Fig. 5 Tree updating process whena=6
云端認(rèn)證平臺為了認(rèn)證設(shè)備度量信息,需要具備設(shè)備的度量基準(zhǔn)值sv,sv通常由設(shè)備廠商提供。當(dāng)云端認(rèn)證平臺請求對S={E1,E2,···,Ei}進(jìn)行認(rèn)證時,生成并向邊緣代理發(fā)送一個隨機(jī)數(shù)r2,邊緣代理先對自身進(jìn)行可信度量,過程與2.1中類似,然后找到各待認(rèn)證設(shè)備對應(yīng)的葉子節(jié)點,生成認(rèn)證所需的多路徑信息wp,wp是從各葉子節(jié)點計算重構(gòu)到樹根節(jié)點需要的所有節(jié)點的哈希值,wp按照稀疏哈希樹多值證明的方法生成[23-24]。
例如,當(dāng)樹中有設(shè)備S={E1,E2,···,E7}時,要認(rèn)證設(shè)備 E3,wp 應(yīng)該為 [N2,N7,N8,N12];要認(rèn)證設(shè)備 E4,wp 應(yīng)該為 [N2,N5,N8,N12], 如圖 6 所示。分別認(rèn)證兩個設(shè)備時,wp共需要存儲8個節(jié)點的值,而當(dāng)批量認(rèn)證兩個設(shè)備時,wp只需存儲3個值即可,如圖7所示。
圖6 a=7時,分別認(rèn)證設(shè)備 E3、 E4時,wp中節(jié)點信息Fig. 6 The node information in wp whena=7 and verifying devices E3and E4respectively
圖7 a=7時,批量認(rèn)證設(shè)備 E3、 E4時,wp中節(jié)點信息Fig. 7 The node information in wp whena=7 and verifying devices E3and E4in bulk
wp生成后,將wp和認(rèn)證密鑰公鑰 pakA一起用 sd kA簽名 得到 σA=Sign(r2||wp||pakA,sdkA), 并 將σA和 c dkA傳送給云端認(rèn)證平臺,云端認(rèn)證平臺首先對邊緣代理自身身份進(jìn)行驗證,驗證過程與2.2中邊緣代理驗證設(shè)備身份類似,驗證成功則對邊緣代理傳遞過來的設(shè)備度量信息進(jìn)行認(rèn)證:(1)對每個葉子節(jié)點,先獲取到設(shè)備標(biāo)準(zhǔn)度量值sv和復(fù)合設(shè)備標(biāo)識符 c diE,然后重構(gòu)出設(shè)備的ak密鑰akE=KeyGen(cdiE,Hash(sv));(2)對每個葉子節(jié)點,由重構(gòu)的ak公鑰重構(gòu)葉子結(jié)點值val=Hash(pakE);(3)對樹形結(jié)構(gòu),利用父節(jié)點與左、右子節(jié)點的關(guān)系式 v alpnt=Hash (valleft||valright),根據(jù)wp中的認(rèn)證路徑重新計算根節(jié)點,比較該根節(jié)點與wp中根節(jié)點是否一致,判斷認(rèn)證路徑上的節(jié)點是否是可信、未被篡改的,批量認(rèn)證過程如下。
實體:邊緣代理 A ,?云端認(rèn)證?平臺 P ;基礎(chǔ): A ? 有設(shè)備密?鑰對 d kApdkA,sdkA,認(rèn)證密鑰對akApakA,sakA和設(shè)備 d kA公鑰證書 c dkA; P 有設(shè)備度量基準(zhǔn)值sv。
批量認(rèn)證過程如下。
(1)P 生成一個隨機(jī)數(shù)r2=Rand(),將其發(fā)送給 A ;
(2) A 根 據(jù)待認(rèn)證的設(shè)備集合S={E1,E2,...,Ei}生成認(rèn)證所需多路徑信息 wp;
(3) A 用 sd kA對wp和 pakA簽名得到σA=Sign(r2||wp||pakA,sdkA),將 σA和 cdkA發(fā)送給 P;
(4) P 使用廠商的公鑰驗證 c dkA,驗證通過則用證書中的 p dkA驗證簽名 σA的合法性,合法則進(jìn)行步驟(5),不合法則報錯;
(5) P 根據(jù)設(shè)備度量標(biāo)準(zhǔn)值sv重構(gòu)設(shè)備的 pakE,由重構(gòu)得到的 pakE重 構(gòu)葉子節(jié)點值 v al=Hash (pakE),然后根據(jù) v al 和 w p得到根結(jié)點的值,判斷根結(jié)點值與 w p中是否一致,一致則設(shè)備可信,否則報錯。
攻擊者改變了設(shè)備固件層的代碼C1后,設(shè)備使用輕量級可信架構(gòu)進(jìn)行度量時,其生成的認(rèn)證密鑰由于云端認(rèn)證平臺認(rèn)證設(shè)備身份時,會根據(jù)設(shè)備 c diE與可更新固件層代碼度量基準(zhǔn)值sv重構(gòu)出認(rèn)證密鑰對 a kE, a kE=KeyGen (cdiE,Hash(sv)), 其 中sv=Hash(C1),并使用重構(gòu)的 a kE公鑰和邊緣代理傳遞過來的多路徑信息wp認(rèn)證設(shè)備度量信息的正確性,需要滿足才能通過認(rèn)證,故有又因為找到了哈希函數(shù)的碰撞。以此,當(dāng)攻擊者改變了設(shè)備固件層代碼時,云端認(rèn)證平臺能夠及時發(fā)現(xiàn)并進(jìn)行后續(xù)處理。
本機(jī)制實體間通信主要包括以下兩個部分。
(1)設(shè)備與邊緣代理。設(shè)備的ak公鑰pakEi包含著設(shè)備的度量信息,2.2節(jié)的驗證過程保證了邊緣代理只有在驗證簽名σE=Sign(r1||pakE,sdkE)成功后才會存儲簽名中的 pakEi,而邊緣代理使用設(shè)備供應(yīng)商提供的公鑰驗證簽名的過程確保了設(shè)備身份的正確性和簽名中信息的完整性。當(dāng)攻擊者截獲傳輸?shù)男畔⒉⑦M(jìn)行偽造時,驗證方能夠通過驗證簽名及時發(fā)現(xiàn),不會將偽造的信息存儲到度量樹中,系統(tǒng)并沒有遭到實質(zhì)性的破壞。
(2)邊緣代理與云端認(rèn)證平臺。在云端認(rèn)證平臺進(jìn)行設(shè)備批量認(rèn)證時,會向邊緣代理發(fā)起請求,邊緣代理將要傳輸?shù)男畔⒂米约旱乃借€sdkA簽名,云端平臺會先對簽名進(jìn)行驗證,此驗證簽名的過程保證了傳輸方身份的正確性和傳輸信息的完整性。攻擊者不能通過阻斷、監(jiān)聽和截獲實體間通信消息的方法破壞系統(tǒng)。
綜上所述,本文提出的機(jī)制能防止攻擊者可能實施的各種攻擊,故該機(jī)制是安全的。
本節(jié)對該樹形批量認(rèn)證機(jī)制的性能進(jìn)行分析,主要從該樹形存儲結(jié)構(gòu)的構(gòu)造時間(節(jié)點添加)、度量值的認(rèn)證時間和批量認(rèn)證時wp的大小進(jìn)行實驗分析。
假設(shè)度量對象(電力物聯(lián)設(shè)備)的數(shù)量為P,每個度量對象平均度量次數(shù)為Q。將每個度量對象對應(yīng)到一個葉子節(jié)點,在該度量對象首次添加度量值時為其編號,該度量對象后續(xù)的度量值都覆蓋在該葉子節(jié)點上,以此大大減少樹中的節(jié)點數(shù)目,有效降低樹的高度,從而利于樹形結(jié)構(gòu)的生成和度量值的認(rèn)證。本實驗在VMware Workstation Pro虛擬機(jī)上進(jìn)行,物理機(jī)為Windows10 專業(yè)版64位操作系統(tǒng),處理器為Intel(R)Core(TM)i5-7200 U CPU @2.50 GHz,系統(tǒng)內(nèi)存 8 GB,虛擬機(jī)系統(tǒng)為Ubuntu18.04,系統(tǒng)內(nèi)存2 GB。
為了簡便,將設(shè)備的每次度量值定為一個隨機(jī)數(shù),葉子節(jié)點存儲該隨機(jī)數(shù)的哈希值,并在同等條件下,對比該非平衡哈希樹結(jié)構(gòu)與默克爾哈希樹添加同等葉子節(jié)點數(shù)消耗的時間。在實際應(yīng)用中,單個邊緣代理負(fù)責(zé)管理的終端設(shè)備數(shù)是靈活可變的,考慮到邊緣代理的負(fù)載能力,通常其管理的設(shè)備數(shù)不應(yīng)過多。實驗分別選取P={ 210,212,214,216,218,220},以使其有足夠的冗余滿足實際應(yīng)用,選取Q為4,測試100次,得出的平均時間如圖8所示。
圖8 非平衡哈希樹與默克爾哈希樹構(gòu)造時間比較Fig. 8 Comparison of construction time between unbalanced hash tree and Merkel hash tree
默克爾哈希樹每次添加節(jié)點都需要進(jìn)行樹的旋轉(zhuǎn)和中間節(jié)點更新的操作,需要存儲的葉子節(jié)點總數(shù)為P×Q。隨著度量對象數(shù)量P和度量次數(shù)Q的增大,構(gòu)建時間呈上升趨勢,P、Q越大,構(gòu)建時耗時越多;本文的非平衡哈希樹結(jié)構(gòu)中,每個度量對象對應(yīng)一個葉子節(jié)點,需要存儲的葉子節(jié)點數(shù)目為P,當(dāng)度量對象的首個度量值添加時,只需找到并修改少量節(jié)點的指針并更新路徑上節(jié)點值,修改指針?biāo)牡臅r間比旋轉(zhuǎn)時的修改耗時少。當(dāng)同一度量對象的后續(xù)度量值添加時,只需找到并修改對應(yīng)葉子節(jié)點和更新路徑,沒有新節(jié)點的生成,有效減緩了樹高度的增長,從而減少了認(rèn)證路徑的長度以及更新操作的耗時,因此該樹形存儲結(jié)構(gòu)的構(gòu)建時間消耗小于默克爾哈希樹,且需存儲的度量值越多,該樹形存儲結(jié)構(gòu)的優(yōu)勢就越明顯。
樹形結(jié)構(gòu)的完整性認(rèn)證過程是基于待認(rèn)證的葉子節(jié)點到根節(jié)點的路徑的,由該路徑信息從下往上依次計算并重構(gòu)出樹形結(jié)構(gòu)的根節(jié)點。該路徑信息的生成以及重構(gòu)計算的耗時與樹的高度有關(guān)。本方案的非平衡哈希樹在構(gòu)建時,同一度量對象的多次度量值只占用一個葉子節(jié)點,樹的高度比默克爾哈希樹低,認(rèn)證耗時更少。
在類似IMA的線性存儲結(jié)構(gòu)中,認(rèn)證時需要遍歷所有度量對象,消耗時間與度量值的數(shù)目P成正比,時間復(fù)雜度為O(P);在默克爾哈希樹存儲結(jié)構(gòu)中,樹的遍歷時間與樹的高度相關(guān),平均時間復(fù)雜度為O(logP);本文的方案中樹的遍歷時間也與樹的高度相關(guān),平均時間復(fù)雜度為O(logP/Q)。在本實驗中,分別選取P={ 210,212,214,216,218,220},Q為 4,測試 100次,得出的線性存儲結(jié)構(gòu)、默克爾哈希樹結(jié)構(gòu)與該非平衡哈希樹方案的平均認(rèn)證時間比較如圖9所示。
圖9 度量值認(rèn)證時間比較Fig. 9 Comparison of verification time
本文提出的機(jī)制通過采用稀疏哈希樹多值證明的方法可以實現(xiàn)設(shè)備的批量認(rèn)證,通過該方法可以有效減少度量過程所需的多路徑信息wp的大小。采用稀疏哈希樹多值證明與線性結(jié)構(gòu)、哈希樹單值證明的wp大小比較如表1所示。
表1 各方案wp大小比較Table 1 Comparison of wp size of different schemes
由表1可以看出,采用稀疏哈希樹多值進(jìn)行設(shè)備的批量認(rèn)證時能有效減少傳輸所需的多路徑信息大小,不僅提高了系統(tǒng)運行效率,也利于邊緣代理中wp的生成和云端平臺的認(rèn)證過程。
本文主要針對電力物聯(lián)網(wǎng)特點和現(xiàn)存方案存在的缺陷,提出了一種適用于電力物聯(lián)網(wǎng)的可信樹形批量認(rèn)證機(jī)制。該機(jī)制采用云邊端協(xié)同架構(gòu),借助靠近設(shè)備側(cè)的邊緣代理緩解云端平臺批量認(rèn)證設(shè)備的壓力,提高了系統(tǒng)響應(yīng)速度,設(shè)備和邊緣代理采用一種輕量級可信度量架構(gòu),適合電力物聯(lián)網(wǎng)設(shè)備特點;邊緣代理采用一棵非平衡哈希樹結(jié)構(gòu)存儲和管理度量信息,構(gòu)造消耗時間和度量信息驗證時間均較少,而且該非平衡哈希樹結(jié)構(gòu)可在一定程度上定位出錯設(shè)備并保護(hù)設(shè)備隱私;采用稀疏哈希樹多值證明的方式生成多路徑信息,提高設(shè)備的批量認(rèn)證效率,同時減少傳輸?shù)亩嗦窂叫畔?shù)據(jù)大小。
本文提出的機(jī)制可以部署到現(xiàn)有的電力物聯(lián)網(wǎng)環(huán)境中,現(xiàn)有的邊緣代理通常存儲資源也比較有限,不能存儲太大的樹形結(jié)構(gòu),所以實際應(yīng)用時需要妥善分配每個邊緣代理所管理的設(shè)備數(shù)量,以免給邊緣代理造成較大的負(fù)擔(dān)。