牛淑芬 楊平平* 謝亞亞 杜小妮
①(西北師范大學計算機科學與工程學院 蘭州 730070)
②(西北師范大學數學與統計學院 蘭州 730070)
為了節省本地的數據管理開銷和系統維護開銷,數據擁有者會選擇將數據上傳到云端服務器中,云存儲數據共享技術就成為信息交互的一種重要方式[1]。但云存儲在給用戶帶來便利的同時也會造成用戶隱私泄露問題[2]。
可搜索加密技術[3,4]實現了數據用戶利用關鍵字搜索陷門對密文數據進行檢索,同時也不會泄露關鍵字。基于屬性加密技術[5–7]在實現數據隱私的同時還能夠實現細粒度訪問控制。盡管如此,基于云存儲的數據共享模式大多數依賴第三方,一旦受到攻擊或缺乏監控,第三方可能會竊取、泄露、篡改或濫用數據。還有傳統的云存儲模式以集中存儲方式運行,存在單點故障等可能導致系統崩潰的問題[8]。
區塊鏈技術[9]的發展能夠解決云存儲中數據可能被篡改、完整性得不到保證的問題。區塊鏈技術是一種特定的數據結構,這種數據結構按照時間順序將數據區塊組合成鏈條,由此來保證其不可篡改性和不可偽造性[10];區塊鏈也是一種去中心化的分布式數據庫,它由區塊鏈網絡中的所有節點共同維護數據,每一個節點都會對數據進行備份。但是,如何在區塊鏈中實現數據隱私保護以及如何實現只有授權數據用戶才能訪問數據是目前所要面臨的一個挑戰[4]。
針對以上問題,本文提出一種區塊鏈上基于云輔助的密文策略屬性基(Ciphertext Policy Attribute Based Eencryption, CP-ABE)數據共享加密方案,將基于屬性加密技術和可搜索加密技術相結合,實現了數據共享的隱私保護和數據安全。在本方案中,使用對稱加密算法對數據文件進行加密,將加密的數據文件存儲在云服務器上。基于屬性加密算法則對對稱密鑰進行加密,并且將訪問策略與關鍵字加密結合,密文存儲在區塊鏈上,由區塊鏈完成搜索。保證了只有當數據用戶的屬性集滿足密文中的訪問策略并且關鍵字匹配時,區塊鏈才能夠返回搜索結果。本文方案中訪問策略使用的是線性秘密共享矩陣[11](Linear Secret Sharing Scheme,LSSS),不僅能夠實現細粒度訪問控制,而且具有較高的計算效率。
區塊鏈技術起源于文獻[9]發表的論文《比特幣:一種點對點電子現金系統》,是一種去中心化、不可篡改、可信的分布式賬本。根據不同的應用場景,區塊鏈可分為公有鏈、聯盟鏈和私有鏈。本文方案中所使用的區塊鏈為聯盟鏈,是指由特定的組織或個人參與建立的,由該群體內部共同許可的多個節點作為記賬人,所有區塊的產生也由這些節點之間的共識規則決定。
本文中區塊的數據結構由塊頭和有效負載組成。塊頭包括塊標識(Block ID)、塊的大小(Block size)、前一個區塊的哈希值(Pre-block hash)和時間戳(Timestamp);有效負載包括塊產生者的身份(Block producer ID)、塊產生者的簽名(Block producer signature)和交易單(Transaction)。數據結構如表1所示。

表1 區塊數據結構
共識機制的作用就是驗證無中心的分布式網絡環境中數據的真實性和一致性。共識機制保證了所有節點在不依賴中心協調的情況下使得所有交易以可靠方式進行。目前,區塊鏈在聯盟鏈環境下最常用的是實用拜占庭容錯(Practical Byzantine Fault Tolerant,PBFT)共識算法[12]。PBFT算法過程[13]如下:客戶端負責將交易上傳至主節點,主節點對全網交易單進行打包并廣播給從節點;從節點執行驗證操作,并將驗證結果返回給客戶端;客戶端接收從節點返回的結果,若驗證正確結果數大于f+1,則表示上鏈存儲成功。

本方案的系統模型如圖1所示,主要包括以下5個實體:

圖1 系統模型
(1) 屬性授權中心 (Attribute Authority, AA):AA是一個可信機構,主要生成系統參數、系統主密鑰以及數據用戶DU和云服務器CS的私鑰。定義屬性集合,當DU加入系統時,屬性授權中心AA為其分配一個唯一標識u id和一個屬性集Suid。
(2) 云服務器 (Cloud Server, CS):CS負責存儲數據擁有者DO提供的加密的數據文件F以及將文件存儲位置Fid發送到DO在區塊鏈的賬戶。如果數據用戶DU滿足訪問策略,CS則進行部分解密并將部分解密的密文A和相應加密的數據文件Ek(F)發送到DU在區塊鏈的賬戶。
(3) 區塊鏈 (BlockChain, BC):區塊鏈上DO將關鍵字索引作為交易存儲在BC上,前提是這一交易需要經過區塊鏈驗證者的驗證。本文中區塊鏈采用PBFT共識算法,該算法在全網節點不超過1/3的情況下,保證分布式節點網絡的一致性。DU將搜索陷門上傳到BC上,BC進行關鍵字密文搜索。當搜索成功后,BC將與對稱密鑰k有關的密文返回給CS,云服務器CS進行部分解密運算。
(4) 數據擁有者 (Data Owner, DO):DO從數據文件中提取關鍵字,使用對稱密鑰加密數據文件得到CF,然后建立關鍵字索引。DO定義數據文件的訪問策略,并對訪問策略下的對稱密鑰進行加密從而獲得相應的密文C以及對關鍵字和每個屬性加密得到Ci。最后,DO將加密的數據文件CF和密文C上傳到CS上并且將關鍵字密文Ci和存儲地址Fid構成的交易上傳至區塊鏈BC上形成新的區塊。
(5) 數據用戶 (Data User, DU):數據用戶DU搜索陷門上傳到區塊鏈上,驗證通過后,區塊鏈將加密的數據文件Ek(F)與部分解密的密文A返回到DU在區塊鏈的賬戶上,DU使用自己的私鑰對A解密得到對稱密鑰k,從而能夠對加密的數據文件進行解密,得到數據文件明文。


3.3.1 選擇明文攻擊下的不可區分性

OSK(Params,L):A2選擇用戶的 ID和公共參數Params給挑戰者B。B運行密鑰生成算法輸出私鑰。
OTrapdoor(w):攻擊者A2輸入關鍵字w,挑戰者B設置陷門發送給攻擊者A2。
挑戰階段: 詢問階段1完畢,攻擊者A2選擇兩個關鍵字(w0,w1)和挑戰身份ID?發送給挑戰者B。挑戰者B回應挑戰陷門。
詢問階段2:攻擊者A2進行詢問,除挑戰密文及其衍生不能詢問外,其他同詢問階段1一致。
猜測階段:最后敵手返回猜測δ′,如果δ′=δ,則挑戰成功,輸出1;否則輸出0。
本文所提出的方案由以下6個概率多項式時間算法組成,算法模型如圖2所示,具體設計如下:

圖2 算法模型
系統建立(Setup):AA隨機選取一個安全參數λ,輸入系統安全參數后,輸出系統公共參數Params和主密鑰MSK。設G和GT分別是兩個階為素數q的循環群,g是G的一個生成元,e:G×G →GT是一個雙線性映射。AA定義屬性集合U,每個屬性x ∈U。隨機選取α,β,a ∈Zp,將α作為系統主密鑰MSK;然后選擇兩個哈希函數:H1:{0,1}?→G,H2:{0,1}?→G;最后,AA公布Params ={G,GT,e(g,g)α,gβ,ga,H1,H2}。

關鍵字加密:DO從數據文件F中提取關鍵字w,然后定義LSSS訪問策略(M,ρ)將對稱密鑰k和關鍵字w進行加密。其中,M是l×n的矩陣,ρ為內映射函數,是矩陣M的每一行Mx到屬性集合中屬性ρ(x)的映射,每個屬性在矩陣M中都有唯一的行與之對應。隨機選取向量v=(s,y2,···,yn)∈Zq,s為要分享的秘密值。對于矩陣的每一行i ∈[1,l],計算λi=Mi·v,其中Mi為矩陣M的第i行向量。DO計算

如果等式不成立,則輸出錯誤符號"⊥";如果等式成立,區塊鏈節點則根據數據文件位置Fid將B以及數據用戶DU在區塊鏈上的賬戶發送到云服務器CS上。

正確性證明:






本節從理論角度分析本文方案與文獻[15,16]在計算效率上的優劣。其中,主要比較的運算有雙線性運算TP、指數運算TE、點乘運算TM和哈希運算TH。nU為系統屬性值數量、nS為數據用戶屬性值數量。比較結果如表2所示。

表2 效率分析
由表2可知,本文方案在系統建立階段的計算量與文獻[15]一樣;本文方案在密鑰生成階段、加密階段以及解密階段的計算量均小于文獻[15]方案;本文方案在陷門生成階段和測試階段的計算量大于文獻[15]方案。本文方案在系統建立階段、密鑰生成階段、測試階段以及解密階段的計算量均小于文獻[16]方案;本文方案在加密階段和陷門生成階段的計算量大于文獻[16]方案。
本節對方案算法進行數值模擬實驗。數值模擬實驗是在Windows10操作系統下使用C語言的PBC(Pairing-Based Cryptography)庫[17]實現的。在PC機(華碩電腦,3.1 GHz CPU, 4 GB RAM)的VC++6.0中運行。通過改變屬性的數量分析本文方案的計算效率,屬性的數量n分別取1, 4, 8, 12,16。實驗結果是算法運行50次的平均值,如圖3所示。
圖3(a)、圖3(b)、圖3(c)分別表示系統建立算法、密鑰生成算法和加密算法的運行時間與屬性數量的關系。由圖3(a)可知,本文方案在系統建立階段的計算效率高于文獻[16],系統建立算法的運行時間不會隨著屬性個數的增加而改變。由圖3(b)可知,本文方案在密鑰生成階段的計算效率高于文獻[16]。文獻[16]密鑰生成算法的運行時間隨著屬性個數的增加呈線性增長,而本文方案密鑰生成算法的運行時間不會隨著屬性個數的增加而改變。由圖3(c)可知,本文方案在加密階段的計算效率低于文獻[16]。

圖3 屬性數量與運行時間
圖3(d)、圖3(e)、圖3(f)分別表示陷門生成算法、測試算法和解密算法的運行時間與屬性數量的關系。由圖3(d)可知,當屬性個數>4時,本文方案在陷門生成階段的計算效率低于文獻[16]。由圖3(e)可知,本文方案在測試階段的計算效率高于文獻[16]。本文方案與文獻[16]密鑰生成算法的運行時間都在隨著屬性個數的增加呈線性增長,而本文方案在這一階段運行時間增長較為緩慢。由圖3(f)可知,本文方案在解密階段的計算效率高于文獻[16]。文獻[16]解密算法的運行時間隨著屬性個數的增加呈線性增長,而本文方案解密算法的運行時間不會隨著屬性個數的增加而改變,這在一定程度上減少了數據用戶的計算量。
本文提出了一種區塊鏈上基于云輔助的CP-ABE數據共享加密方案,該方案使用基于屬性加密技術和可搜索加密技術實現了細粒度訪問控制以及關鍵字密文搜索。搜索過程在區塊鏈上進行,竊聽者無法猜出關鍵字,保證了搜索的安全性。本文所提方案中還是存在一些問題有待解決:如何設計更高效的訪問結構;細化區塊鏈上對新區塊的驗證。在未來的工作中,將對本文方案進行改進,解決這些存在的難題。