牛淑芬 楊平平* 謝亞亞 杜小妮
①(西北師范大學計算機科學與工程學院 蘭州 730070)
②(西北師范大學數(shù)學與統(tǒng)計學院 蘭州 730070)
為了節(jié)省本地的數(shù)據(jù)管理開銷和系統(tǒng)維護開銷,數(shù)據(jù)擁有者會選擇將數(shù)據(jù)上傳到云端服務(wù)器中,云存儲數(shù)據(jù)共享技術(shù)就成為信息交互的一種重要方式[1]。但云存儲在給用戶帶來便利的同時也會造成用戶隱私泄露問題[2]。
可搜索加密技術(shù)[3,4]實現(xiàn)了數(shù)據(jù)用戶利用關(guān)鍵字搜索陷門對密文數(shù)據(jù)進行檢索,同時也不會泄露關(guān)鍵字?;趯傩约用芗夹g(shù)[5–7]在實現(xiàn)數(shù)據(jù)隱私的同時還能夠?qū)崿F(xiàn)細粒度訪問控制。盡管如此,基于云存儲的數(shù)據(jù)共享模式大多數(shù)依賴第三方,一旦受到攻擊或缺乏監(jiān)控,第三方可能會竊取、泄露、篡改或濫用數(shù)據(jù)。還有傳統(tǒng)的云存儲模式以集中存儲方式運行,存在單點故障等可能導(dǎo)致系統(tǒng)崩潰的問題[8]。
區(qū)塊鏈技術(shù)[9]的發(fā)展能夠解決云存儲中數(shù)據(jù)可能被篡改、完整性得不到保證的問題。區(qū)塊鏈技術(shù)是一種特定的數(shù)據(jù)結(jié)構(gòu),這種數(shù)據(jù)結(jié)構(gòu)按照時間順序?qū)?shù)據(jù)區(qū)塊組合成鏈條,由此來保證其不可篡改性和不可偽造性[10];區(qū)塊鏈也是一種去中心化的分布式數(shù)據(jù)庫,它由區(qū)塊鏈網(wǎng)絡(luò)中的所有節(jié)點共同維護數(shù)據(jù),每一個節(jié)點都會對數(shù)據(jù)進行備份。但是,如何在區(qū)塊鏈中實現(xiàn)數(shù)據(jù)隱私保護以及如何實現(xiàn)只有授權(quán)數(shù)據(jù)用戶才能訪問數(shù)據(jù)是目前所要面臨的一個挑戰(zhàn)[4]。
針對以上問題,本文提出一種區(qū)塊鏈上基于云輔助的密文策略屬性基(Ciphertext Policy Attribute Based Eencryption, CP-ABE)數(shù)據(jù)共享加密方案,將基于屬性加密技術(shù)和可搜索加密技術(shù)相結(jié)合,實現(xiàn)了數(shù)據(jù)共享的隱私保護和數(shù)據(jù)安全。在本方案中,使用對稱加密算法對數(shù)據(jù)文件進行加密,將加密的數(shù)據(jù)文件存儲在云服務(wù)器上。基于屬性加密算法則對對稱密鑰進行加密,并且將訪問策略與關(guān)鍵字加密結(jié)合,密文存儲在區(qū)塊鏈上,由區(qū)塊鏈完成搜索。保證了只有當數(shù)據(jù)用戶的屬性集滿足密文中的訪問策略并且關(guān)鍵字匹配時,區(qū)塊鏈才能夠返回搜索結(jié)果。本文方案中訪問策略使用的是線性秘密共享矩陣[11](Linear Secret Sharing Scheme,LSSS),不僅能夠?qū)崿F(xiàn)細粒度訪問控制,而且具有較高的計算效率。
區(qū)塊鏈技術(shù)起源于文獻[9]發(fā)表的論文《比特幣:一種點對點電子現(xiàn)金系統(tǒng)》,是一種去中心化、不可篡改、可信的分布式賬本。根據(jù)不同的應(yīng)用場景,區(qū)塊鏈可分為公有鏈、聯(lián)盟鏈和私有鏈。本文方案中所使用的區(qū)塊鏈為聯(lián)盟鏈,是指由特定的組織或個人參與建立的,由該群體內(nèi)部共同許可的多個節(jié)點作為記賬人,所有區(qū)塊的產(chǎn)生也由這些節(jié)點之間的共識規(guī)則決定。
本文中區(qū)塊的數(shù)據(jù)結(jié)構(gòu)由塊頭和有效負載組成。塊頭包括塊標識(Block ID)、塊的大小(Block size)、前一個區(qū)塊的哈希值(Pre-block hash)和時間戳(Timestamp);有效負載包括塊產(chǎn)生者的身份(Block producer ID)、塊產(chǎn)生者的簽名(Block producer signature)和交易單(Transaction)。數(shù)據(jù)結(jié)構(gòu)如表1所示。
表1 區(qū)塊數(shù)據(jù)結(jié)構(gòu)
共識機制的作用就是驗證無中心的分布式網(wǎng)絡(luò)環(huán)境中數(shù)據(jù)的真實性和一致性。共識機制保證了所有節(jié)點在不依賴中心協(xié)調(diào)的情況下使得所有交易以可靠方式進行。目前,區(qū)塊鏈在聯(lián)盟鏈環(huán)境下最常用的是實用拜占庭容錯(Practical Byzantine Fault Tolerant,PBFT)共識算法[12]。PBFT算法過程[13]如下:客戶端負責將交易上傳至主節(jié)點,主節(jié)點對全網(wǎng)交易單進行打包并廣播給從節(jié)點;從節(jié)點執(zhí)行驗證操作,并將驗證結(jié)果返回給客戶端;客戶端接收從節(jié)點返回的結(jié)果,若驗證正確結(jié)果數(shù)大于f+1,則表示上鏈存儲成功。
本方案的系統(tǒng)模型如圖1所示,主要包括以下5個實體:
圖1 系統(tǒng)模型
(1) 屬性授權(quán)中心 (Attribute Authority, AA):AA是一個可信機構(gòu),主要生成系統(tǒng)參數(shù)、系統(tǒng)主密鑰以及數(shù)據(jù)用戶DU和云服務(wù)器CS的私鑰。定義屬性集合,當DU加入系統(tǒng)時,屬性授權(quán)中心AA為其分配一個唯一標識u id和一個屬性集Suid。
(2) 云服務(wù)器 (Cloud Server, CS):CS負責存儲數(shù)據(jù)擁有者DO提供的加密的數(shù)據(jù)文件F以及將文件存儲位置Fid發(fā)送到DO在區(qū)塊鏈的賬戶。如果數(shù)據(jù)用戶DU滿足訪問策略,CS則進行部分解密并將部分解密的密文A和相應(yīng)加密的數(shù)據(jù)文件Ek(F)發(fā)送到DU在區(qū)塊鏈的賬戶。
(3) 區(qū)塊鏈 (BlockChain, BC):區(qū)塊鏈上DO將關(guān)鍵字索引作為交易存儲在BC上,前提是這一交易需要經(jīng)過區(qū)塊鏈驗證者的驗證。本文中區(qū)塊鏈采用PBFT共識算法,該算法在全網(wǎng)節(jié)點不超過1/3的情況下,保證分布式節(jié)點網(wǎng)絡(luò)的一致性。DU將搜索陷門上傳到BC上,BC進行關(guān)鍵字密文搜索。當搜索成功后,BC將與對稱密鑰k有關(guān)的密文返回給CS,云服務(wù)器CS進行部分解密運算。
(4) 數(shù)據(jù)擁有者 (Data Owner, DO):DO從數(shù)據(jù)文件中提取關(guān)鍵字,使用對稱密鑰加密數(shù)據(jù)文件得到CF,然后建立關(guān)鍵字索引。DO定義數(shù)據(jù)文件的訪問策略,并對訪問策略下的對稱密鑰進行加密從而獲得相應(yīng)的密文C以及對關(guān)鍵字和每個屬性加密得到Ci。最后,DO將加密的數(shù)據(jù)文件CF和密文C上傳到CS上并且將關(guān)鍵字密文Ci和存儲地址Fid構(gòu)成的交易上傳至區(qū)塊鏈BC上形成新的區(qū)塊。
(5) 數(shù)據(jù)用戶 (Data User, DU):數(shù)據(jù)用戶DU搜索陷門上傳到區(qū)塊鏈上,驗證通過后,區(qū)塊鏈將加密的數(shù)據(jù)文件Ek(F)與部分解密的密文A返回到DU在區(qū)塊鏈的賬戶上,DU使用自己的私鑰對A解密得到對稱密鑰k,從而能夠?qū)用艿臄?shù)據(jù)文件進行解密,得到數(shù)據(jù)文件明文。
3.3.1 選擇明文攻擊下的不可區(qū)分性
OSK(Params,L):A2選擇用戶的 ID和公共參數(shù)Params給挑戰(zhàn)者B。B運行密鑰生成算法輸出私鑰。
OTrapdoor(w):攻擊者A2輸入關(guān)鍵字w,挑戰(zhàn)者B設(shè)置陷門發(fā)送給攻擊者A2。
挑戰(zhàn)階段: 詢問階段1完畢,攻擊者A2選擇兩個關(guān)鍵字(w0,w1)和挑戰(zhàn)身份ID?發(fā)送給挑戰(zhàn)者B。挑戰(zhàn)者B回應(yīng)挑戰(zhàn)陷門。
詢問階段2:攻擊者A2進行詢問,除挑戰(zhàn)密文及其衍生不能詢問外,其他同詢問階段1一致。
猜測階段:最后敵手返回猜測δ′,如果δ′=δ,則挑戰(zhàn)成功,輸出1;否則輸出0。
本文所提出的方案由以下6個概率多項式時間算法組成,算法模型如圖2所示,具體設(shè)計如下:
圖2 算法模型
系統(tǒng)建立(Setup):AA隨機選取一個安全參數(shù)λ,輸入系統(tǒng)安全參數(shù)后,輸出系統(tǒng)公共參數(shù)Params和主密鑰MSK。設(shè)G和GT分別是兩個階為素數(shù)q的循環(huán)群,g是G的一個生成元,e:G×G →GT是一個雙線性映射。AA定義屬性集合U,每個屬性x ∈U。隨機選取α,β,a ∈Zp,將α作為系統(tǒng)主密鑰MSK;然后選擇兩個哈希函數(shù):H1:{0,1}?→G,H2:{0,1}?→G;最后,AA公布Params ={G,GT,e(g,g)α,gβ,ga,H1,H2}。
關(guān)鍵字加密:DO從數(shù)據(jù)文件F中提取關(guān)鍵字w,然后定義LSSS訪問策略(M,ρ)將對稱密鑰k和關(guān)鍵字w進行加密。其中,M是l×n的矩陣,ρ為內(nèi)映射函數(shù),是矩陣M的每一行Mx到屬性集合中屬性ρ(x)的映射,每個屬性在矩陣M中都有唯一的行與之對應(yīng)。隨機選取向量v=(s,y2,···,yn)∈Zq,s為要分享的秘密值。對于矩陣的每一行i ∈[1,l],計算λi=Mi·v,其中Mi為矩陣M的第i行向量。DO計算
如果等式不成立,則輸出錯誤符號"⊥";如果等式成立,區(qū)塊鏈節(jié)點則根據(jù)數(shù)據(jù)文件位置Fid將B以及數(shù)據(jù)用戶DU在區(qū)塊鏈上的賬戶發(fā)送到云服務(wù)器CS上。
正確性證明:
本節(jié)從理論角度分析本文方案與文獻[15,16]在計算效率上的優(yōu)劣。其中,主要比較的運算有雙線性運算TP、指數(shù)運算TE、點乘運算TM和哈希運算TH。nU為系統(tǒng)屬性值數(shù)量、nS為數(shù)據(jù)用戶屬性值數(shù)量。比較結(jié)果如表2所示。
表2 效率分析
由表2可知,本文方案在系統(tǒng)建立階段的計算量與文獻[15]一樣;本文方案在密鑰生成階段、加密階段以及解密階段的計算量均小于文獻[15]方案;本文方案在陷門生成階段和測試階段的計算量大于文獻[15]方案。本文方案在系統(tǒng)建立階段、密鑰生成階段、測試階段以及解密階段的計算量均小于文獻[16]方案;本文方案在加密階段和陷門生成階段的計算量大于文獻[16]方案。
本節(jié)對方案算法進行數(shù)值模擬實驗。數(shù)值模擬實驗是在Windows10操作系統(tǒng)下使用C語言的PBC(Pairing-Based Cryptography)庫[17]實現(xiàn)的。在PC機(華碩電腦,3.1 GHz CPU, 4 GB RAM)的VC++6.0中運行。通過改變屬性的數(shù)量分析本文方案的計算效率,屬性的數(shù)量n分別取1, 4, 8, 12,16。實驗結(jié)果是算法運行50次的平均值,如圖3所示。
圖3(a)、圖3(b)、圖3(c)分別表示系統(tǒng)建立算法、密鑰生成算法和加密算法的運行時間與屬性數(shù)量的關(guān)系。由圖3(a)可知,本文方案在系統(tǒng)建立階段的計算效率高于文獻[16],系統(tǒng)建立算法的運行時間不會隨著屬性個數(shù)的增加而改變。由圖3(b)可知,本文方案在密鑰生成階段的計算效率高于文獻[16]。文獻[16]密鑰生成算法的運行時間隨著屬性個數(shù)的增加呈線性增長,而本文方案密鑰生成算法的運行時間不會隨著屬性個數(shù)的增加而改變。由圖3(c)可知,本文方案在加密階段的計算效率低于文獻[16]。
圖3 屬性數(shù)量與運行時間
圖3(d)、圖3(e)、圖3(f)分別表示陷門生成算法、測試算法和解密算法的運行時間與屬性數(shù)量的關(guān)系。由圖3(d)可知,當屬性個數(shù)>4時,本文方案在陷門生成階段的計算效率低于文獻[16]。由圖3(e)可知,本文方案在測試階段的計算效率高于文獻[16]。本文方案與文獻[16]密鑰生成算法的運行時間都在隨著屬性個數(shù)的增加呈線性增長,而本文方案在這一階段運行時間增長較為緩慢。由圖3(f)可知,本文方案在解密階段的計算效率高于文獻[16]。文獻[16]解密算法的運行時間隨著屬性個數(shù)的增加呈線性增長,而本文方案解密算法的運行時間不會隨著屬性個數(shù)的增加而改變,這在一定程度上減少了數(shù)據(jù)用戶的計算量。
本文提出了一種區(qū)塊鏈上基于云輔助的CP-ABE數(shù)據(jù)共享加密方案,該方案使用基于屬性加密技術(shù)和可搜索加密技術(shù)實現(xiàn)了細粒度訪問控制以及關(guān)鍵字密文搜索。搜索過程在區(qū)塊鏈上進行,竊聽者無法猜出關(guān)鍵字,保證了搜索的安全性。本文所提方案中還是存在一些問題有待解決:如何設(shè)計更高效的訪問結(jié)構(gòu);細化區(qū)塊鏈上對新區(qū)塊的驗證。在未來的工作中,將對本文方案進行改進,解決這些存在的難題。