張利華,張贛哲,曹 宇,萬源華,鄭 琛
(1.華東交通大學 軟件學院,江西 南昌 330013;2.華東交通大學 電氣與自動化工程學院,江西 南昌 330013)
泛在電力物聯網(ubiquitous power internet of things,UPIoT)是物聯網技術在電力系統中的應用,隨著泛在電力物聯網的持續發展,未來的UPIoT設備數量將呈指數級增長[1],當面臨著數以億計的海量終端設備接入和傳輸數據時,由于電力數據價值的增長,UPIoT設備將會成為某些惡意用戶攻擊的對象[2];云存儲方式導致服務器負荷過大,少部分的中心節點存儲了海量的數據,由于缺少備份的數據,保證不了數據的安全性[3];UPIoT中各類傳感器無法對用戶的隱私數據做到完全保密,不具備抵抗諸如拒絕服務攻擊等的隱私保護能力[4]。
數據量級從最初的GB、TB逐漸發展到PB(1024 TB)或EB(1 000 000 TB)甚至更高[5]。如何安全且高效的對PB或EB級別的數據進行存儲成為UPIoT發展的一個重要難題。
由于UPIoT的快速發展,集中式的數據存儲模式難以應對日益多樣化的數據,數據存儲模式也由集中式向分布式轉變[6,7]。針對HBase數據庫查詢靈活性低的問題,王德文等[8]提出優化行鍵設計,構造二級索引,提高變電站設備狀態監測數據檢索的靈活性。但是,隨著索引文件的增加,更多的存儲空間會被這些索引文件占用。在云存儲環境下,非法用戶獲得對電子記錄的控制權時,在云中存儲的數據很容易被復制和篡改,這將給電子記錄的所有者造成無法彌補的損失。
隨著區塊鏈技術的不斷發展,已經有許多的學者對數據如何安全存儲進行研究。文獻[9]采用區塊鏈技術來對電力數據進行安全存儲,提出了一種基于區塊鏈的多級加密電力營銷數據存儲機制,但是隨著節點數目的增多,系統的存儲效率會降低。文獻[10]提出了一種基于區塊鏈與邊緣計算的物聯網數據管理架構來支持分布式的物聯網數據管理,可以為物聯網數據提供分布式存儲和訪問控制,通過引入邊緣計算,解決了區塊鏈系統的可擴展性瓶頸問題。文獻[11]實現了一個3層架構的區塊鏈模型TBchain(three-tier architecture blockchain),通過分割區塊鏈,將其中一部分鎖定在更高級別區塊鏈的區塊中用以提高區塊鏈的可伸縮性,以提高區塊鏈中交易的吞吐量。通過TBchain將一部分交易存儲在本地,增加了區塊鏈的存儲容量的可擴展性。文獻[12]設計了一個充電交易數據存儲方案,在電動汽車充電平臺中利用區塊鏈技術選定若干充電站作為數據中心節點。用戶對交易后的個人數據進行加密用來控制數據的使用權,每個數據中心節點都使用一致性機制來對加密數據進行去中心化同步存儲,能實現安全的數據存儲。文獻[10]與文獻[11]都是采用增加區塊鏈的可擴展性進而提高存儲容量,文獻[12]是通過加密控制數據使用權達到數據的安全有效存儲,但是都不能實現既安全又高效地存儲數據。
本方案將UPIoT感知層傳輸到平臺層的數據進行鏈上與鏈下的混合存儲,鏈下先使用加密算法將原始數據加密成密文,再將這些密文存放到數據庫中,鏈上用來存放數據所對應的索引值與存儲IP地址,運用改進的Hot-Stuff共識算法來形成統一的分布式數據賬本,通過Key-Value鍵值對模型,實現數據的安全存儲與查詢。
本文的主要貢獻如下:
(1)針對海量數據的安全存儲問題,提出了一種基于聯盟鏈的UPIoT數據存儲方案。
(2)通過認證協議建立起用戶和設備端之間的雙向可追溯,防止惡意用戶造成數據的泄露,保障了所有者數據的安全可靠。
(3)引入一種信任管理機制,確保參與共識的節點可靠,采用Hot-Stuff共識算法提高分布式一致性算法的效率,實現了快速響應,同時具備高吞吐和低時延的特性,又運用簽名算法來保證物聯網區塊鏈中的高層次安全。
所提出的數據存儲框架如圖1所示,UPIoT中海量數據被各類傳感器所感知,經由網絡層的控制網關進入聯盟鏈平臺上的服務器。在平臺層,區塊鏈技術被用來存儲和處理這些數據[13]。實現了中心節點數據在平臺層的備份,避免了中心節點故障時對整個網絡的重大影響。限制了存儲在聯盟鏈上的數據,只存儲數據的哈希值,然后對數據進行加密并存儲在鏈下數據庫中。系統框架主要包括UPIoT設備、網關、聯盟鏈和鏈下數據庫。

圖1 系統框架
(1)UPIoT設備
UPIoT設備[14]主要包括部署在電氣設備、輸電線路和附屬設施中的各種傳感器和智能電表。如溫度、濕度、聲音和紅外傳感器,還有一些傳感器可以獲取GIS局部放電、繞組變形和超聲等數據。
(2)網關
網關負責交易管理,以及轉發網絡中終端發起的交易,驗證賬本中新交易的合法性,維護統一賬本。它具有強大的計算能力和較大的存儲空間。
(3)聯盟鏈
聯盟鏈是一個具有不信任節點的半封閉生態交易網絡。它需要授權才能加入和退出,是一個組織內部使用的區塊鏈,需要提前指定幾個節點作為記賬人。每個區塊的交易由所有預先選定的記賬人決定。其它節點可以交易,但它們沒有記賬權限。由于電力設備泛在網本質上是一個集中分布式網絡,聯盟鏈保留了一些集中控制的功能[15],且信息處理功能和擴展性強。所以在本次設計中,選擇了部分集中的聯盟鏈。
(4)鏈下數據庫
所用的鏈下數據庫Redis是一個非關系數據庫(NoSQL數據庫),是一個Key-Vaule型數據庫[16]。它的主要特點是具有極高的并發讀寫性能。它能以最快的速度每秒處理100 000多個讀寫操作,適合于高并發的情況。
將聯盟鏈應用到UPIoT數據存儲的場景之中,提出基于聯盟鏈的UPIoT數據存儲模型,用聯盟鏈平臺替代原先的云平臺。該模型的數據存儲主要由兩部分組成:一是鏈下數據庫,它存儲大部分數據;二是聯盟鏈,它存儲數據的索引值并為分布式存儲數據庫提供系統安全支撐。
主要包括以下流程,UPIoT設備感知到的各類數據存儲在聯盟鏈平臺上和Redis數據庫中,用戶可以對這些數據進行訪問和管理,存儲架構如圖2所示。

圖2 UPIoT設備數據存儲架構
建立個人實體身份與接入設備身份的映射關系,實現用戶(User)與設備端(Device)的雙向可追溯性驗證,防止惡意節點接入。首先,描述了用戶和設備端之間基于證書的認證協議。
(1)身份驗證初始化
步驟1 用戶U和設備端D持有他們的證書CertU和CertD。 證書具有以下數據結構
CertU={IDU,KUpub,DateU,Issuer,SigCA(·)}
(1)
CertD={IDD,KDpub,DateD,Issuer,SigCA(·)}
(2)
其中,ID是設備或用戶的身份信息,Kpub是公鑰,Date是證書發布的日期,Issuer是發行人,SigCA是證書的簽名。
步驟2 U選擇一個隨機整數rU, 1≤rU≤n-1, 其中G是基點,并且計算
QU=rUG
(3)
步驟3 D選擇一個隨機整數rD, 1≤rD≤n-1, 其中G是基點,并且計算
QD=rDG
(4)
(2)D驗證U
步驟1 用戶U通過KDpub對CertU加密,如下所示
CU=EKDpub(CertU)
(5)
步驟2 U然后將QU和CU傳遞給設備端D。
步驟3 D然后計算
KDU=rDQU=rDrUG
(6)
步驟4 一旦D接收到QU和CU, 則D通過KDU驗證CertU的有效性;如果驗證正確,則表明CertU是由U發出的。
(3)U驗證D
步驟1 設備端D通過KUpub對CertD加密,如下所示
CD=EKUpub(CertD)
(7)
步驟2 D然后將QD和CD傳遞給用戶U。
步驟3 U然后計算
KUD=rUQD=rUrDG
(8)
步驟4 一旦U接收到QD和CD, 則U通過KUD驗證CertD的有效性;如果驗證正確,則表明CertD是由D發出的。
事實上,很容易看出KUD=rUrDG=rDrUG=KDU, 這就是一個會話密鑰。
由于聯盟鏈是一種分布式、去中心化的鏈式結構,必須有共識機制來對交易進行驗證以及對產生的區塊驗證和打包,最后才能形成一個統一的分布式賬本。在電力物聯網聯盟鏈的場景中,共識節點沒有主觀惡意動機。只有網絡出現故障,或者通信中斷,才會出現拜占庭節點。本方案所用到的共識機制為改進的Hot-Stuff算法,Hot-Stuff算法[17,18]是一種PBFT的改進算法,它將PBFT中的準備和承諾階段合并成一個階段,能夠在很大程度上提升內部共識的效率。
不同于PBFT的網狀通信網絡拓撲,Hot-Stuff是星形通信網絡拓撲,即每次通信都依靠主節點,所以主節點的選取至關重要。在Hot-Stuff中,每個視圖只有一個主節點,主節點是以輪轉的方式交替更換,一旦主節點出現問題,由備份節點發起視圖轉換功能。由于泛在電力物聯網中的大多數設備為低功耗設備,如傳感器,無法承擔共識任務,它是一種資源受限的節點,不具備參與聯盟鏈網絡分布式共識的能力。而對于有些計算能力和存儲能力強的節點,如網關,可以承擔共識任務,充當共識節點,它們不僅可以進行數據存儲交易,執行共識算法,還可以為數據擁有者提供存儲空間以存儲數據。所以可以將設備分為兩類,一類是共識節點,另一類是其它節點。
為了減小電力數據在共識過程中受到故障節點的影響,必須先對參與共識的節點進行可靠性考查,用百分數來對節點進行量化與評估。如果節點發生錯誤的次數越多,則說明它發生故障的概率越大,那么它的信任度越低,可靠性就越差,在下一階段被選為共識節點的概率就越小。
一個設備出現多次故障的時間間隔x是服從指數分布的,所以采用指數分布來構建一段時間內節點的信任值。
系統采用先進的監測技術監測節點Ni在一小段時間t內發生故障的次數fi,則每個節點中的λi=fi/t, 然后,為了避免偶然性,我們可以通過概率密度函數或概率分布函數求出在一大段時間T內節點Ni發生故障的概率

(9)
最后,每個節點Ni的信任度TNi=1/PNi×100%。 通過對節點進行這樣的處理之后,可以選取出穩定可靠的主節點,避免頻繁的進行視圖更換,降低了通信復雜度。
分布式共識達成過程如下:
(1)客戶端發送交易請求消息m至網絡中的節點,包括主節點和其它備份節點。
(2)主節點收到客戶端上傳的請求消息m,賦予消息序列號n,計算得到預準備消息 (pre-prepare,H(m),n,v), 其中H(·) 是單向哈希函數,v代表的是此時的視圖(view),主節點將預準備消息發送給其它備份節點。
(3)備份節點收到預準備消息后,驗證H(m) 的合法性,若驗證通過,則備份節點計算準備消息 (pre-prepare,H(m),n,v) 并將其在全網廣播。同時,所有節點收集準備消息,如果它們的數量大于或等于2f+1個,則將其組成準備證書。
(4)如果在準備階段中,節點收集到準備消息并生成了準備證書,那么節點將計算承諾消息 (commit,n,v) 并廣播,將消息m放到本地日志中。如果合法的承諾消息數量大于或等于2f+1個,則將其組成承諾證書,至此消息m完成最終確認。
(5)主節點將交易記錄打包成區塊并添加到聯盟鏈中,備份節點驗證區塊并將區塊同步到聯盟鏈。
為了解決數據存儲中高層次的數據安全問題,當客戶端向認可節點提交高級安全建議時,系統啟動簽名算法。客戶端將提議消息m提交給認可節點Pi(1≤i≤n) 和管理節點PM。

y=gxmodp
(10)
其中,公鑰為y,私鑰為x,將y發送給管理節點PM。
步驟2 對于消息m,首先隨機選取整數k∈[1,p-2], 然后計算
r=gkmodp
(11)
s=(h(m)-xr)k-1mod(p-1)
(12)
則m的簽名為 (r,s), 其中h(·) 為Hash函數。將 (r,s) 發送給管理節點PM。
步驟3 管理節點要驗證以下條件是否滿足
yrrs=gh(m)modp
(13)
如果上式成立,則 (r,s) 是消息m的有效簽名;反之,則是無效簽名。
電力物聯網聯盟鏈的交易流程如圖3所示。

圖3 電力物聯網聯盟鏈交易流程
UPIoT設備終端或網關發起新的數據存儲交易,加密算法和數據簽名確保數據不可被篡改,交易請求會觸發預先部署在區塊鏈上的智能合約,然后在P2P網絡上進行交易的廣播,共識機制會驗證交易并記賬,產生新的區塊,在P2P網絡中廣播驗證結果,最后網內各節點驗證該區塊內數據無誤后加入本地賬戶。
通過可信計算對主要數據進行加密和存儲,實現數據的安全存儲,并通過可信計算驗證系統在數據存儲中的完整性。數據區塊需要加密的原因是聯盟鏈是一個去中心化的系統,所有參與的節點都可以檢查鏈上的內容[19]。使用參數xc,f∈{0,1} 表示數據文件fi∈F是否會存儲在共識節點ci上,其中共識節點ci∈C。 則數據文件在共識節點的存儲情況表示為
(14)
則存儲在共識節點ci處的數據文件份數為
Ωi,|F|=xi,1+xi,2+…+xi,|F|
(15)
為了防止存儲的數據文件丟失,數據文件fj可以在多個節點備份,則fj的副本數量為
Ω|C|,j=x1,j+x2,j+…+x|C|,j
(16)
用戶請求訪問數據必須先經過身份認證,為了確保個人隱私保護和信息安全,所提方案先將原始數據加密成密文再進行存儲,所用到的數據加密算法是密鑰長度為192 bit 的對稱加密算法AES[20]。
針對UPIoT感知層設備所采集的海量數據信息,這些數據信息涉及到用戶的個人隱私[21],需要對其進行安全性分析,數據安全包括數據的機密性、可用性和完整性。
(1)數據機密性分析。方案通過AES加密算法對原始的UPIoT數據進行加密,使數據以密文的形式進行傳輸與存儲,數據保密意味著數據只對授權方公開[22],未授權者短時間內無法得知數據內容,可以更有效的對數據進行保護,因此可以保證數據的機密性。
(2)數據可用性分析。數據可用性與授權用戶能否隨時隨地訪問數據有關,區塊鏈網絡上有許多備份節點,這些備份節點可以保證單個系統發生故障時,數據可恢復。
(3)數據完整性分析。數據完整性是在數據的整個生命周期中維護并保證數據的準確性和一致性[23]。數據完整性驗證過程描述如下:
當數據所有者(data owner,DO)需要驗證存儲在聯盟區塊鏈中的數據的完整性時。首先,UPIoT設備生成不同大小的數據塊(DataBlock),在每個數據塊生成后,然后將其上傳到區塊鏈平臺(blockchain platform,BCP)。DO使用本地加密庫獲取數據塊的哈希值,UPIoT設備上的數據所有者應用程序(data owner application,DOA)在本地加密哈希(數據塊),然后使用唯一的數據塊ID寫入數據完整性服務(data integrity service,DIS),稍后可以使用該ID查詢加密的Hash(DataObject)。在DOA將數據塊上傳到BCP后,數據塊應該存儲在與數據塊哈希值相同的數據塊ID中。如果BCP有數據塊的另一個對象ID,BCP需要發回對象ID,DOA在數據塊ID和BCP中的對象ID之間建立連接。將對象ID標識為BCP中存儲的數據塊的標識。
UPIoT設備上的DOA或由UPIoT設備以外的其它機器托管的DOA需要驗證數據集完整性時,使用該數據集中數據塊的一些對象ID來挑戰BCP。BCP使用對象ID計算相應數據塊的哈希值并將其返回給DOA。在接收到BCP的反饋后,DOA使用連接到對象ID的塊ID來查詢DIS并得到數據塊的加密散列,DOA對加密后的數據塊哈希進行解密,并與BCP的反饋進行比較。
實驗環境:4臺PC機搭建基于聯盟鏈的多級分布式系統,每臺PC機的配置均為32 GB RAM和Intel i5處理器,操作系統為Windows 10企業版64位。同時,眾多類型的UPIoT設備采用筆記本電腦來模擬,實驗平臺由基于以太坊的Solidity語言來實現,系統模型中存儲的數據均為普通的文檔數據。同時,借助IPFS實現本文提出的鏈上與鏈下混合存儲的機制。
將所提方案與文獻[8]以及文獻[9]數據存儲方案進行3方面的對比,一是CPU的能耗;二是節點連接耗時;三是數據吞吐量。將這3個作為性能指標來具體評估所提出的方案。為了能更好地模擬出在UPIoT環境下本文所提出的數據存儲模型,實驗選用了2、4、6、8、10、12個節點。通過實驗得到圖4、圖5和圖6。

圖4 CPU能耗對比

圖5 節點連接耗時對比

圖6 系統吞吐量的對比
CPU的能耗與節點個數的關系如圖4所示,通過增加節點的數量來監測節點CPU的能耗情況,由圖4可以看出,在12節點處,文獻[8]方案的CPU能耗為0.08 kW·h,文獻[9]為0.075 kW·h,而本文所提方案的CPU能耗為0.07 kW·h,這說明相比于文獻[8]與文獻[9]所提方案,采用本方案的存儲機制CPU能耗更低,因此計算開銷也更小。
節點連接耗時與節點個數的關系如圖5所示,節點連接耗時反映出共識速率,通過圖5可以發現,節點數量較少時,3種方案的節點連接耗時差異不大,當節點數量變多,節點連接耗時變長,比如在節點數量為10時,文獻[8]的節點連接耗時為50 ms,文獻[9]為40 ms,而本方案為33 ms,與文獻[8]以及文獻[9]所提方案對比連接耗時更少,這意味著共識速率越快。
圖6是系統吞吐量與節點個數之間的關系,由圖6可以看出,隨著節點數目的增多,3種方案的系統吞吐量都隨之增加,在2節點到6節點之間,曲線比較陡峭,此時增速最快。在節點數量為6時,文獻[8]的系統吞吐量為100 tx/s,文獻[9]為130 tx/s,本方案為140 tx/s。而在6節點之后,曲線趨于平緩,增速較慢。這說明3種方案在處理少量節點都有著較高的效率,但隨著節點數量的增加,存儲的效率會降低。在相同節點處,本文所提方案達到的吞吐量最高,這表明本方案與其它兩種方案相比,存儲的效率得到了改進。
針對UPIoT中海量數據的存儲問題,采用分布式數據存儲方式,將聯盟鏈技術與之相結合,提出了先加密數據,采用鏈下和鏈上混合存儲的方案,使數據以分散的方式安全存儲,解決了數據集中存儲的潛在安全風險,保證了UPIoT中數據的安全存儲。區塊鏈以較小的成本開銷實現了數據的分布式安全存儲,對泛在電力物聯網的發展產生深遠影響,下一步的研究方向可以針對具體的泛在電力物聯網應用場景來對本方案進行改進和優化。