高艷芳, 姚 蘭, 馬衍崧, 李鳳云
(東北大學 計算機科學與工程學院, 遼寧 沈陽 110169)
無線體域網(wireless body area network,WBAN)是以人體為中心的小型網絡[1].WBAN通過在人體的皮膚表面、衣物、人體周圍嵌入的傳感器節(jié)點收集人體生理信息.WBAN收集的人體血壓、心電、體溫、腦電波甚至血液參數(shù)等各種信息,被視為個人敏感數(shù)據[2],這些數(shù)據被醫(yī)院、學校、政府部門、疾病研究機構等許多行業(yè)使用.隨著WBAN的發(fā)展,WBAN產生了大量的數(shù)據,但WBAN節(jié)點的存儲能力有限,將WBAN數(shù)據上傳到云服務器存儲可以解決WBAN不能存儲大量數(shù)據的問題[3-4].
WBAN數(shù)據上傳到云存儲服務器時,數(shù)據被多用戶共享,數(shù)據不再是本地存儲和計算,完全受控于云服務器,使得存儲在云服務器上的數(shù)據面臨著以下嚴重的安全挑戰(zhàn).
1) 數(shù)據在上傳到云服務器的過程中,可能受到惡意的攔截和篡改.
2) 人體參數(shù)的各項數(shù)據通常具有隱私性,數(shù)據存儲在云上時,需要保證數(shù)據對云存儲服務商的不可見,否則云存儲服務商可能會對數(shù)據惡意傳播,數(shù)據隱私性將遭到破壞.
3) 假設云存儲服務商不可信,可能由于自身利益等原因,對云服務器上使用頻率低的數(shù)據進行修改和刪除,使數(shù)據的完整性遭到破壞.
4) 對于未授權的機構要避免其訪問數(shù)據.云存儲數(shù)據由于多方共享,授權的不同機構對數(shù)據處理有著不同的要求,如何多方協(xié)調處理數(shù)據,避免單獨機構在未經多方同意的情況下修改數(shù)據也是當前面臨的重要問題之一.
區(qū)塊鏈技術革命性地解決了“拜占庭將軍問題”,具有不可更改、不可偽造、完全可追溯的安全特性,實現(xiàn)了一種無信任的共識網絡系統(tǒng)[5-6].區(qū)塊鏈系統(tǒng)一般由應用層、合約層、激勵層、共識層、網絡層、數(shù)據層等5個部分組成[7].區(qū)塊鏈技術具有分布式存儲和共識機制,對于解決訪問控制和完整性驗證兩方面的安全問題都具有優(yōu)勢.
針對數(shù)據的訪問控制問題,基于區(qū)塊鏈技術設計了如圖1所示的訪問控制框架.框架中有數(shù)據上傳者(DUP)、數(shù)據訪問者(DAP)、數(shù)據操作授權中心(DAAC)、區(qū)塊鏈網絡(BCN)、云存儲服務商(CSSP)等5種角色.BCN邏輯上是由集合U={U1,U2,U3,…,Un}構成的區(qū)塊鏈網絡;物理上,Ui是已經被DAAC授予云存儲服務的用戶節(jié)點,Ui使用區(qū)塊鏈存儲訪問請求,Ui具有DUP和DAP的雙重身份,能夠進行數(shù)據上傳和訪問,Ui可提出訪問請求、進行訪問控制和驗證BCN對訪問請求的控制結果.
在本框架中,各節(jié)點密鑰的生成及簽名方式,采用無可信中心的數(shù)字簽名方法[8].密鑰生成首先需要進行數(shù)據初始化,H為一個單向哈希函數(shù),(P,P′)為兩個安全的大素數(shù),g為GF(P)階,為P′的生成元,2511
圖1 基于BCN的訪問控制框架
各節(jié)點收到訪問請求時,生成子簽名,Uj發(fā)送訪問請求O到BCN,BCN的用戶節(jié)點Ui查看訪問請求O,生成隨機數(shù)di,并計算ri=αdi,發(fā)送ri到BCN,表示同意此訪問請求.同意訪問請求O的用戶節(jié)點構成集合U={U1,U2,U3,…,Uw},如果w≥n/2+1表示BCN中超過50%的節(jié)點同意此訪問請求.同意訪問請求O的節(jié)點Ui利用自己的密鑰SKi和各個節(jié)點收到的αfj(Idi)來生成子簽名,子簽名si如式(1)所示:
(1)
Ui生成子簽名后,選取隨機數(shù)ki,滿足gcd(ki,P′)=1,并計算zi,si′,zi=gkimodP,si′=ki-1(si-αfi(0)×zi)modP′,此時Ui可將消息{O,si,ri,zi,si′}發(fā)送給Uj.Uj收到各節(jié)點發(fā)來的子簽名后,計算(R,S),式(2)計算R,式(3)計算S.
(2)
(3)
此時Uj生成自己對訪問請求O的數(shù)字簽名,Uj在區(qū)間[1,P-1]生成隨機數(shù)ej,計算lj,zj,lj=gejmodP,zj=(αfj(0)×O′-ej×lj)mod(P-1),其中zi∈[1,P-2],O′=H(O).隨后BCN各節(jié)點可通過gS≡y(O′)n/2+1×RmodP驗證群簽名的真實性,驗證成功,則將訪問請求存儲到自己的區(qū)塊中.
BCN中的共識機制是通過改進Raft算法實現(xiàn)的.首先通過心跳機制交互信息選取出記賬人(Leader節(jié)點),記賬人隨后通過區(qū)塊鏈長度和區(qū)塊鏈中最后一個區(qū)塊的哈希值進行一致性判斷,如果不相同,則進行區(qū)塊補充,最終使得各節(jié)點區(qū)塊鏈達到一致.Leader節(jié)點使得BCN中各個節(jié)點的區(qū)塊鏈達到一致后,當添加區(qū)塊時,需要BCN各節(jié)點利用區(qū)塊的哈希值對區(qū)塊進行驗證,如果BCN中大部分節(jié)點區(qū)塊驗證成功,則將區(qū)塊記錄.Leader節(jié)點隨后將區(qū)塊發(fā)送至云存儲服務器.
在本文設計的框架中,BCN中各節(jié)點均可對請求進行投票,協(xié)同控制請求的有效性,并且通過區(qū)塊記錄請求.BCN中通過改進的Raft算法,使得各節(jié)點的區(qū)塊鏈一致,隨后對區(qū)塊的真實性進行驗證,保證了上傳到云存儲服務中的區(qū)塊是真實可信的.
WBAN數(shù)據上傳到CSSP進行存儲,WBAN感知數(shù)據的存儲格式舉例如表1所示.體溫、血氧、心率這些信息是BCN用戶節(jié)點在某一時刻收集的,數(shù)據D表示為(數(shù)據號,用戶號,體溫,血氧,心率).
表1 WBAN感知數(shù)據格式
CSSP存儲WBAN數(shù)據是通過數(shù)組節(jié)點之間數(shù)據號的間隔為M的有序數(shù)組和Merkle樹相結合的方式.有序數(shù)組每個位置對應1棵Merkle樹,添加數(shù)據時只需修改數(shù)組節(jié)點對應的Merkle樹即可;有序數(shù)組節(jié)點存儲的是(數(shù)據號,Merkle樹根節(jié)點指針),M表示Merkle樹存儲葉子節(jié)點數(shù)量的上限.Mekle樹節(jié)點分為內部節(jié)點和葉子節(jié)點,內部節(jié)點使用的哈希算法為MD5,葉子節(jié)點使用的哈希算法為同態(tài)哈希算法.內部節(jié)點包含的信息是(R,哈希值),葉子節(jié)點包含的信息是(R,哈希值,加密數(shù)據D′),葉子節(jié)點的R為(D′的數(shù)據號-對應有序數(shù)組節(jié)點數(shù)據號),內部節(jié)點的R為子節(jié)點中較大的R.葉子節(jié)點同態(tài)哈希值是使用文獻[9]的同態(tài)哈希算法計算的.
數(shù)據D(數(shù)據號,用戶號,體溫,血氧,心率)經過SHK加密后為數(shù)據D′(數(shù)據號,用戶號,SHK(體溫),SHK(血氧),SHK(心率)),SHK為BCN各節(jié)點使用的數(shù)據共享密鑰用來加密數(shù)據,數(shù)據D′的數(shù)據部分SHK(體溫),SHK(血氧),SHK(心率),這三項數(shù)據可通過1×m的矩陣FD表示,由于數(shù)據號、用戶號作為主要唯一標識,不對其進行加密,所以初始化m=3,F(xiàn)D表示如式(4)所示:
(4)
其中,修改請求X(數(shù)據號,SHK(血壓),SHK(體溫),SHK(心率))的數(shù)據部分可通過矩陣FX表示,如式(5)所示:
(5)
當CSSP處理修改請求X時,根據X中的數(shù)據號找到加密數(shù)據D′后,計算D′+X=D″,數(shù)據部分相加如式(6)所示:
FD+FX=(d1+x1,d2+x2,d3+x3).
(6)
可證明得到hK(FD+FX)=hK(FD)×hK(FX),即算法滿足乘法同態(tài),其中K為同態(tài)哈希密鑰.當CSSP設置M為4時,存儲結構如圖2所示.
圖2 CSSP存儲結構圖
區(qū)塊鏈由區(qū)塊鏈式連接而成.區(qū)塊頭部分包含父哈?!弦粎^(qū)塊哈希值;時間戳——區(qū)塊確實存在某一時刻;Merkle樹根節(jié)點哈希——區(qū)塊中的Merkle樹經過運算得到的根節(jié)點哈希值;當前區(qū)塊哈?!狹D5(父哈希+時間戳+Merkle樹根節(jié)點哈希).每次區(qū)塊生成時,首先將上一個區(qū)塊的哈希作為父哈希,然后計算當前區(qū)塊哈希,通過父哈希與上一個區(qū)塊相連,形成鏈式結構.
區(qū)塊體包含Merkle樹——當要將區(qū)塊加入到區(qū)塊鏈中時,通過哈希表中存儲的訪問請求生成Merkle樹;哈希表——訪問請求經過BCN驗證成功后將被放入到區(qū)塊的哈希表;認證路徑數(shù)組——Merkle樹葉子節(jié)點的認證路徑的二維數(shù)組表示.Merkle樹的葉子節(jié)點存儲訪問請求.初始區(qū)塊被稱為創(chuàng)世區(qū)塊,即每個BCN用戶節(jié)點區(qū)塊鏈的第一個區(qū)塊.其中Merkle樹為空,父哈希值為空,時間戳為BCN統(tǒng)一規(guī)定的時間,哈希值為MD5算法處理時間戳后得到的哈希值.區(qū)塊鏈結構如圖3所示.
圖3 區(qū)塊鏈結構
針對BCN的區(qū)塊結構和CSSP存儲WBAN數(shù)據的存儲結構,利用同態(tài)哈希算法的同態(tài)特性對上傳到CSSP的WBAN數(shù)據進行完整性驗證.本文中,由于BCN用戶節(jié)點均存儲訪問請求,BCN用戶節(jié)點不需要委托可信第三方,即可對數(shù)據進行完整性驗證,同時支持數(shù)據的動態(tài)操作.
1) 數(shù)據完整性驗證模型. 數(shù)據完整性驗證模型中的角色有上傳節(jié)點Uj使用密鑰SHK加密數(shù)據,使用同態(tài)哈希密鑰K生成加密數(shù)據的哈希值,BCN驗證節(jié)點Ui隨機選取數(shù)據號,進行數(shù)據驗證,CSSP存儲加密數(shù)據,BCN節(jié)點Uk返回認證路徑,保證修改請求的可靠性.數(shù)據驗證模型如圖4所示.
圖4 完整性驗證模型
2) 數(shù)據完整性驗證方案.數(shù)據完整性驗證方案由生成密鑰(KeyGen),標簽生成(TagBlock),挑戰(zhàn)(Challenge),證據生成(ProofGen)和證據驗證(Verify)5部分組成,說明如下:
① 密鑰生成階段:密鑰生成算法DAAC采用同態(tài)加密算法Paillier完成對密鑰(PHK,SHK)的生成;
② 標簽生成階段:數(shù)據上傳時,上傳節(jié)點對加密后的數(shù)據D′進行同態(tài)哈希運算,生成標簽hK(D′).云存儲服務器對數(shù)據進行存儲,生成標簽PD(PD1,PD2,PD3,…),PD為在CSSP存儲結構中數(shù)據D′的Merkle樹的認證路徑.BCN用戶節(jié)點Uk存儲修改請求X時,生成標簽hK(X),PX(PX1,PX2,PX3,…),PX為修改請求X在區(qū)塊結構的Merkle樹中的認證路徑;
③ 挑戰(zhàn)階段:驗證節(jié)點Ui選取數(shù)據號NM,并發(fā)送NM到數(shù)據上傳節(jié)點Uj,Uk,CSSP;
④ 證據生成階段:CSSP收到NM后,查找標簽PD(PD1,PD2,PD3,…),將PD發(fā)回到Ui,上傳節(jié)點Uj收到NM后,查找標簽hK(D′),將hK(D′)發(fā)回給Ui,BCN用戶節(jié)點Uik收到NM時,查找修改請求數(shù)據號為NM認證路徑PX,發(fā)送PX到Ui;
⑤ 證據驗證階段:驗證節(jié)點Ui收到PX后,Uk可驗證查找的標簽hK(X)是否可靠.假設PX是3維向量(PX1,PX2,PX3),PX3為區(qū)塊中Merkle樹根哈希,通過式(7)驗證PX是否正確.
PX3=MD5(MD5(hK(X)+PX1)+PX2).
(7)
如果式(7)成立,說明Ui查找的請求標簽hK(X)正確,隨后對數(shù)據完整性進行驗證,假設PD是三維向量(PD1,PD2,PD3),PD3為CSSP存儲結構中Merkle樹根哈希,通過式(8)可對數(shù)據完整性進行驗證.
PD3=MD5(MD5(hK(X)×hK(D′)+PD1)+PD2).
(8)
如果式(8)成立,說明CSSP存儲的數(shù)據沒有被惡意篡改,數(shù)據完整.
本文設計的框架主要是保證BCN用戶節(jié)點能夠協(xié)同控制對云存儲數(shù)據的訪問,保證云存儲數(shù)據的安全.下面針對框架的訪問控制能力進行實驗和安全分析,并對本文提出的數(shù)據完整性驗證方案進行評估.
3.1.1 實驗環(huán)境
本文的編程軟件主要使用了Pycharm,以Linux系統(tǒng)為平臺,通過Docker容器模擬分布式環(huán)境的搭建,編程語言采用Python,通過Redis數(shù)據庫進行數(shù)據存儲.
3.1.2 實驗數(shù)據
本文的實驗數(shù)據集使用的是已經脫敏的北京市某醫(yī)院通過WBAN采集的病人生理信息數(shù)據,其數(shù)據構成如表2所示.
表2 人體生理數(shù)據
表2所示的是部分病人的身體信息,由于這些數(shù)據只是單點采集,而本文討論的是多個節(jié)點收集的WBAN感知數(shù)據的云存儲,所以針對分布式的環(huán)境對數(shù)據格式進行了調整(格式見表1),其中用戶號表示收集、使用數(shù)據節(jié)點節(jié)點號,數(shù)據號為數(shù)據在云存儲中的唯一表示.
數(shù)據隱私性:BCN各節(jié)點將數(shù)據上傳到CSSP時,利用共享密鑰SHK對數(shù)據進行加密,保證數(shù)據對CSSP不可見.
抗單點安全:本文設計的框架保證了BCN用戶節(jié)點提出的訪問請求被多個BCN用戶節(jié)點的協(xié)同控制,通過無可信中心的門限簽名方法實現(xiàn)了控制權限的分配,訪問請求只有通過BCN網絡中大多數(shù)節(jié)點的同意才能被CSSP處理.
問責機制:BCN用戶節(jié)點提出訪問請求時需要進行數(shù)字簽名,訪問請求經過多數(shù)BCN用戶節(jié)點同意后,需要將訪問請求和數(shù)字簽名一起存儲到區(qū)塊中.通過數(shù)字簽名可以知道BCN網絡中的哪個用戶節(jié)點提出的訪問請求.
區(qū)塊驗證:BCN采用改進的Raft算法,Leader節(jié)點維護BCN各用戶節(jié)點區(qū)塊鏈的一致,如果Leader節(jié)點偽造訪問請求,則區(qū)塊無法通過BCN其他用戶節(jié)點的驗證,驗證失敗,Leader節(jié)點自動放棄記賬權.區(qū)塊驗證保證了BCN網絡中Leader節(jié)點無法偽造訪問請求,BCN用戶節(jié)點驗證區(qū)塊的基礎是節(jié)點區(qū)塊鏈長度保持一致,圖5為BCN在選舉出Leader節(jié)點后,BCN各節(jié)點區(qū)塊鏈長度隨著時間的變化情況.
圖5表明在Leader選舉后的100 ms內,就能保證BCN各節(jié)點區(qū)塊鏈的一致.BCN節(jié)點區(qū)塊鏈長度一致,說明各節(jié)點均參與了訪問控制.結果表明,設計的框架能夠有效地保證數(shù)據的隱私性、訪問請求的合理性,惡意的訪問請求和未授權的訪問請求均不能對云存儲的數(shù)據加以訪問,并且方便了追蹤問責.
圖5 一致性維護
在數(shù)據完整性驗證的實驗中,選取了多個節(jié)點對多條數(shù)據進行完整性驗證,并對完整性驗證結果進行統(tǒng)計.圖6是BCN用戶節(jié)點對隨機選取數(shù)據號進行完整性驗證的結果,其中圓形節(jié)點表示驗證成功,菱形節(jié)點表示驗證失敗.實驗結果表明,不同BCN用戶節(jié)點對數(shù)據的完整性驗證結果一致,表明完整性驗證方案支持各用戶均能進行完整性驗證.
圖6 BCN節(jié)點的數(shù)據完整性驗證
針對WBAN數(shù)據存儲在云服務器中存在的諸多安全問題,本文設計了基于區(qū)塊鏈技術的訪問控制框架,限制了多用戶對云存儲中WBAN感知數(shù)據的訪問,之后在框架的基礎上提出了數(shù)據完整性驗證方案.最后,對框架的安全性進行了實驗和分析,并對所提出的數(shù)據完整性驗證方案進行了實驗評估,實驗分析結果表明了方案的正確性、可行性,具有一定的理論和實用價值.