牛淑芬 謝亞亞 楊平平 杜小妮
1(西北師范大學計算機科學與工程學院 蘭州 730070)2(西北師范大學數(shù)學與統(tǒng)計學院 蘭州 730070)
云存儲技術[1]為用戶帶來了巨大便利,許多公司選擇把數(shù)據(jù)存儲服務外包給云服務提供商.由于大多云服務器并不是完全誠實可靠的,因此數(shù)據(jù)文件在被存儲到云服務器之前需要被加密,在查找使用數(shù)據(jù)時需要將大量的數(shù)據(jù)文件都下載到本地再去解密它們,這十分地浪費網(wǎng)絡帶寬且效率低下.在這樣的背景下,可搜索加密(searchable encryption, SE)的概念被及時地提出.
SE[2]允許數(shù)據(jù)用戶通過關鍵字對加密的數(shù)據(jù)文件進行搜索,很大程度上降低了用戶的通信量和計算量.現(xiàn)有的SE大都是基于公鑰的SE,Ma等人[3]將公鑰SE應用于醫(yī)療信息管理,提出了公鑰SE在移動醫(yī)療系統(tǒng)下的應用方案.出于離線關鍵字猜測攻擊等方面的安全性考慮,Huang等人[4]提出了一個在隨機預言機模型下相對安全的公鑰SE方案.但大多基于公鑰的SE都是一對一的加密和解密,每次加密都必須知道接收者的身份信息,且沒有考慮搜索用戶的搜索權限問題,故數(shù)據(jù)擁有者無法對外包的加密數(shù)據(jù)實施有效的訪問控制,這在實際的應用環(huán)境中缺乏方便性和實用性.
上述SE方案都為數(shù)據(jù)用戶賦予了無限的搜索能力,即數(shù)據(jù)用戶可以采用任何關鍵字從服務器獲取包含自己感興趣關鍵字的加密數(shù)據(jù).因此,數(shù)據(jù)擁有者無法對外包的數(shù)據(jù)信息實施有效的訪問控制,因此研究人員利用屬性基加密技術設計了具有關鍵字搜索授權的SE方案.文獻[5]第1次提出一種新型的密碼原語,即屬性基加密的概念,它通過模糊身份的方法來實現(xiàn)數(shù)據(jù)的細粒度訪問控制.此后,Goyal等人[6]為了實現(xiàn)數(shù)據(jù)的細粒度訪問控制第1次提出了將屬性嵌入到密鑰中的屬性基加密方案.Li等人[7]基于數(shù)據(jù)外包的安全性和用戶體驗之間的平衡提出了一個細粒度的數(shù)據(jù)SE方案,并指出了其在加密的移動云環(huán)境下的應用.文獻[8]中的屬性基加密方案也是將屬性嵌入到密鑰中,實現(xiàn)了一對多的有效通信,但該方案要求在發(fā)送陷門時采用安全的通信信道,這無疑增加了通信成本.關志濤等人[9]提出了在半誠實云存儲上的屬性基加密方案,該方案基于密鑰策略的屬性基加密設計了更為靈活通用的訪問控制策略.為了減少訪問策略更新時用戶的運算量,提高訪問策略更新時的靈活度,文獻[10]提出了一種由云服務器處理復雜計算操作的屬性基SE方案.由于大多屬性基SE方案都采用云存儲,導致因云存儲的集中化帶來的數(shù)據(jù)安全和隱私保護問題也越來越多.
云服務器可以為用戶提供便捷、海量的數(shù)據(jù)存儲服務.然而,其安全形勢也相當嚴峻,如未經(jīng)身份驗證的用戶可以任意地訪問云服務器、數(shù)據(jù)安全性得不到保證等嚴重影響了用戶對其的信任.區(qū)塊鏈技術的發(fā)展與應用為解決此類問題帶來了新的契機,因為區(qū)塊鏈技術[11]能自由安全地實現(xiàn)數(shù)據(jù)的訪問和共享.Liu等人[12]首次指出在公有鏈中存儲數(shù)據(jù)的必要性,在此基礎上提出了一種新的基于區(qū)塊鏈的數(shù)據(jù)刪除方案,無論云服務器的行為多么惡劣,數(shù)據(jù)擁有者都可以驗證刪除結果,使得刪除操作更加透明.之后,Li等人[13]為了保證公平和減少用戶的計算量,將區(qū)塊鏈技術與SE相結合,提出了一種基于區(qū)塊鏈的SE方案.Zhang等人[14]針對惡意用戶和惡意云服務提供商對加密的數(shù)據(jù)文件進行非法搜索的問題,提出了基于云存儲的可信SE方案.基于屬性的加密尤其是將屬性嵌到密文中的加密在數(shù)據(jù)共享中起著重要的作用,但在分布式網(wǎng)絡中,訪問控制結構通常會泄漏敏感的數(shù)據(jù)信息,區(qū)塊鏈技術可以保證與訪問策略相關信息的完整性和不可篡改性.針對屬性加密的效率、隱私泄露和密鑰的濫用問題,Wu等人[15]提出了區(qū)塊鏈中高效的、保護隱私的、可追蹤的屬性基可搜索加密方案.該方案利用區(qū)塊鏈技術保證了數(shù)據(jù)的完整性和不可篡改性.
針對現(xiàn)有的SE沒有考慮數(shù)據(jù)用戶搜索權限的問題,本文將密文策略的屬性基加密技術與SE結合,使數(shù)據(jù)擁有者可以為數(shù)據(jù)使用者執(zhí)行細粒度的搜索授權.針對現(xiàn)有的可搜索加密方案因云的集中化對數(shù)據(jù)安全和隱私保護帶來威脅的問題,本文將區(qū)塊鏈技術和基于屬性的SE結合,提出了區(qū)塊鏈上基于云輔助的屬性基可搜索加密方案.本文的創(chuàng)新點主要包括3個方面:
1) 利用SE和基于屬性的加密技術,設計了一個密文策略的屬性基SE方案,以實現(xiàn)對加密數(shù)據(jù)的有效搜索和細粒度訪問授權,并基于困難問題證明了其安全性.
2) 針對因云的集中化對數(shù)據(jù)安全和隱私保護帶來的威脅,并基于區(qū)塊鏈去中心化、匿名性、不可篡改性和可驗證性等特點,將區(qū)塊鏈技術應用于上述方案.在整個過程中加密的關鍵字存儲在區(qū)塊鏈上,而云服務器上存儲加密的關鍵字和加密的數(shù)據(jù)文件,其中區(qū)塊鏈不可篡改的特性可確保關鍵字密文的安全性.
3) 在Linux Ubuntu-10.10操作系統(tǒng)下利用雙線性對包,并用C語言進行編程,對本文方案和文獻[16]的方案進行了數(shù)值模擬.實驗結果表明:本文方案的效率較高于文獻[16]的方案.
本文提出的算法可應用于社交網(wǎng)絡、醫(yī)療信息管理等領域.例如在電子病歷中主要有患者、醫(yī)生、醫(yī)院服務器、醫(yī)療云服務器和聯(lián)盟鏈5個角色.患者就診后產(chǎn)生電子病歷,由醫(yī)生將電子病歷加密后上傳至醫(yī)院服務器,同時將關鍵字密文的Hash值、醫(yī)生身份、患者偽身份和關鍵字密文上傳至醫(yī)療云服務器.患者的電子病歷密文存儲在醫(yī)院服務器上,而關鍵字密文則存儲在醫(yī)療云服務器和聯(lián)盟鏈上,而由患者偽身份和關鍵字密文所構成的安全索引則存儲在聯(lián)盟鏈上.當患者需要數(shù)據(jù)時,產(chǎn)生陷門并上傳至聯(lián)盟鏈.根據(jù)激勵機制,選取聯(lián)盟鏈上的節(jié)點對關鍵字進行搜索.當搜索到相應患者的密文后,聯(lián)盟鏈上節(jié)點提取安全索引,并匹配患者的偽隨機身份,聯(lián)盟鏈上節(jié)點通過醫(yī)生身份定位至醫(yī)療云服務器獲取關鍵字密文的Hash值,再由患者解密得到電子病歷的明文.
定義1.雙線性映射.令G1和G2是2個階為素數(shù)p的循環(huán)乘群,定義1個雙線性映射e:G1×G1→G2滿足3個性質(zhì)[8].
2) 非退化性(non-degenerate).存在x,y∈G1,滿足e(x,y)≠1.
3) 可計算性(computable).對任意x,y∈G1,存在有效的算法計算e(x,y).
定義4.訪問結構[17].令P={P1,P2,…,Pn}為一個基于屬性加密方案的屬性集合.令集合Γ∈2{P1,P2,…,Pn},?B,C:若B∈Γ且B?C,那么C∈Γ.若上述關系成立,那么稱Γ是單調(diào)的.因此一個訪問結構Γ就是由P={P1,P2,…,Pn}的非空屬性子集構成的集合.在Γ中的集合被稱為授權訪問集合,不在Γ中的集合稱為非授權訪問集合.訪問結構是基于屬性加密方案不可或缺的組成部分[8,18].
定義5.訪問樹[17].T表示一個訪問樹,T中的每個非葉子節(jié)點x都可以表示成如(nx,kx)的門限結構,其中nx表示x的孩子節(jié)點個數(shù),kx表示閾值或門限值,其中0≤kx≤nx.kx=1時表示“OR”門,kx=nx則表示“AND”門.葉子節(jié)點x用來描述屬性,我們規(guī)定其門限值kx=1[17].
訪問樹中常用的表示方法是:parent(x)表示返回節(jié)點x的父節(jié)點,att(x)表示返回葉子節(jié)點x描述的屬性,index(x)表示返回x在其兄弟節(jié)點中的編號.T是以t為根節(jié)點的訪問樹,若一個屬性集合S滿足訪問樹Tx,則可表示為Tx(S)=1.
1) 若x是非葉子節(jié)點,對x的孩子節(jié)點x′計算Tx′(S).當且僅當至少有kx個x′返回Tx′(S)=1時,可得到Tx(S)=1.
2) 若x是葉子節(jié)點,當且僅當att(x)∈S時,可得到Tx(S)=1.
在本節(jié)中,我們主要介紹方案的系統(tǒng)模型、形式化定義和安全模型.
本文基于云輔助實現(xiàn)了區(qū)塊鏈上加密數(shù)據(jù)的細粒度訪問控制.其中,云服務器上存儲加密的關鍵字和加密的數(shù)據(jù)文件.區(qū)塊鏈上存儲加密的關鍵字和其在云服務器上的存儲地址.方案主要包括5類實體,分別是數(shù)據(jù)屬主、多個數(shù)據(jù)用戶、云服務器、可信的屬性授權中心、區(qū)塊鏈(聯(lián)盟鏈).系統(tǒng)模型如圖1所示.
Fig. 1 System model of our paper圖1 本文所提的系統(tǒng)模型
1) 屬性授權中心.對系統(tǒng)中與其有交互的數(shù)據(jù)屬主和用戶是完全可信的,它負責系統(tǒng)參數(shù)的設置和用戶的注冊.由屬性授權中心生成密鑰和相應的參數(shù),并返回給用戶.
2) 數(shù)據(jù)屬主.數(shù)據(jù)屬主從數(shù)據(jù)文件中按照約定規(guī)則提取關鍵字集合,并用自己所定義的訪問策略對關鍵字進行加密,最后將數(shù)據(jù)文件密文和關鍵字密文上傳至云服務器.云服務器收到密文后將其存儲并將存儲地址返回給數(shù)據(jù)屬主,數(shù)據(jù)屬主建立數(shù)據(jù)文件密文和關鍵字密文在云服務器存儲地址的逆向索引關系.數(shù)據(jù)屬主將關鍵字密文和其存儲地址嵌入到1筆構造的交易中并上傳至區(qū)塊鏈,形成新的區(qū)塊,并廣播新的區(qū)塊,區(qū)塊鏈上其他數(shù)據(jù)用戶負責新區(qū)塊的驗證.
3) 云服務器.云服務器提供數(shù)據(jù)存儲服務.云服務器收到數(shù)據(jù)屬主上傳的數(shù)據(jù)文件密文和關鍵字密文后,將其存儲并將存儲地址返回給數(shù)據(jù)屬主.當關鍵字搜索成功后,數(shù)據(jù)屬主根據(jù)區(qū)塊鏈返回的地址在本地查看數(shù)據(jù)文件密文和關鍵字密文的索引關系.然后向云服務器發(fā)出請求,最后云服務器根據(jù)數(shù)據(jù)文件密文進行查找并將數(shù)據(jù)文件密文返回給用戶.
4) 區(qū)塊鏈.區(qū)塊鏈上節(jié)點提供數(shù)據(jù)搜索服務.數(shù)據(jù)屬主將關鍵字密文及其地址嵌入到1筆自己構造的交易中并上傳至區(qū)塊鏈,當區(qū)塊鏈上其他數(shù)據(jù)用戶收到廣播的區(qū)塊后,對該區(qū)塊進行驗證.當用戶以交易的形式上傳陷門后,根據(jù)激勵機制,區(qū)塊鏈上想要去獲得獎勵的節(jié)點運行搜索算法.若搜索成功,區(qū)塊鏈上節(jié)點將關鍵字密文存儲地址返回給數(shù)據(jù)屬主.否則,返回失敗.
5) 數(shù)據(jù)用戶.用戶用其私鑰和感興趣的關鍵字產(chǎn)生搜索陷門,并將陷門以交易的形式上傳至區(qū)塊鏈,由區(qū)塊鏈上節(jié)點執(zhí)行搜索操作.若搜索成功,區(qū)塊鏈上節(jié)點返回關鍵字密文存儲地址給數(shù)據(jù)屬主,數(shù)據(jù)屬主根據(jù)索引關系找到數(shù)據(jù)文件密文地址,并將數(shù)據(jù)文件密文地址返回給云服務器,云服務器根據(jù)地址找到加密的數(shù)據(jù)文件,最后將數(shù)據(jù)文件密文返回給用戶.
本文提出的方案包括5個概率多項式時間算法:
1) 系統(tǒng)建立.SetUp(1λ)→(PP,SK).該算法由屬性授權中心執(zhí)行.輸入安全參數(shù)λ,輸出系統(tǒng)公共參數(shù)PP和密鑰SK.DO使用SK和定義的訪問樹加密關鍵字.
2) 密鑰生成.KeyGen(PP,Suid)→SKu.該算法由屬性授權中心執(zhí)行.輸入PP和用戶的屬性集合Suid,輸出用戶的私鑰SKu.
3) 加密.Encrypt(PP,SK,w,T)→Iw.該算法由數(shù)據(jù)屬主執(zhí)行.輸入系統(tǒng)公共參數(shù)PP、數(shù)據(jù)屬主的私鑰SK、關鍵字w和訪問樹結構T,輸出關鍵字w的密文Iw,將密文Iw和相關信息嵌入交易Tx中并向全網(wǎng)廣播該筆交易,然后由礦工寫入?yún)^(qū)塊鏈.
4) 陷門生成.Trapdoor(PP,SKu,ω)→Tω.該算法由用戶執(zhí)行.輸入系統(tǒng)公共參數(shù)PP、用戶的私鑰SKu和感興趣的關鍵字ω,輸出陷門Tω,將Tω嵌入交易Ty并向區(qū)塊鏈網(wǎng)絡廣播.
5) 搜索.Search(PP,Iw,Tω)→1.該算法由區(qū)塊鏈(聯(lián)盟鏈)上節(jié)點執(zhí)行.輸入系統(tǒng)公共參數(shù)PP、關鍵字密文Iw和用戶的陷門Tω.若用戶的屬性集Suid滿足嵌在Iw中的訪問樹且w和ω一致,則搜索成功并返回其存儲地址Address.Iw給數(shù)據(jù)屬主,否則失敗.
游戲1.關鍵字密文不可區(qū)分性.
游戲2.陷門不可區(qū)分性.
區(qū)塊鏈上基于云輔助的屬性基可搜索加密方案分為3個階段:系統(tǒng)建立、數(shù)據(jù)加密、數(shù)據(jù)搜索.
階段1.系統(tǒng)建立.
本階段分為系統(tǒng)初始化和密鑰生成2個步驟.
系統(tǒng)初始化(SetUp).在這個過程中,屬性授權中心執(zhí)行該算法初始化系統(tǒng).輸入安全參數(shù)λ,輸出系統(tǒng)公共參數(shù)PP和數(shù)據(jù)屬主的密鑰SK.
1) 產(chǎn)生1個雙線性映射e.G1×G1→G2,其中G1和G2是階為素數(shù)p的循環(huán)乘群,g是G1的生成元.
3) 定義Lagrange系數(shù).
返回PP={G1,G2,e,g,H,H1},SK={e(g,g)α,gβ}.
密鑰生成(KeyGen).在這個過程中,屬性授權中心執(zhí)行該算法,為用戶產(chǎn)生與其屬性集Suid相關聯(lián)的私鑰.
階段2.數(shù)據(jù)加密.
關鍵字加密(Encrypt).在這個階段,數(shù)據(jù)屬主調(diào)用此算法來加密所有關鍵字,每個關鍵字對應于定義關鍵字搜索權限的訪問樹.
2) 首先執(zhí)行秘密共享算法,對于每個在訪問樹T中的節(jié)點x(包含葉子節(jié)點t在內(nèi)),從根節(jié)點t開始,選擇一個多項式qx.具體步驟為:
① 對在T中的每個節(jié)點,使得多項式qx的次數(shù)dx為該節(jié)點門限值kx-1,即dx=kx-1.
② 從根節(jié)點t開始,定義qt(0)=s,然后隨機選擇多項式qt的dt個點,完成對qt的定義.對于其他的節(jié)點x,定義qx(0)=qparent(x)(index(x)),并隨機選擇dx個點完成對qx的定義.
數(shù)據(jù)屬主將加密的數(shù)據(jù)文件F和加密的關鍵字Iw上傳至CS,CS返回其存儲地址.數(shù)據(jù)屬主將Iw和其存儲地址Address.Iw嵌入交易Tx,并對其簽名,再以交易Tx的形式向全區(qū)塊鏈系統(tǒng)廣播,由礦工將驗證通過的交易記錄到區(qū)塊鏈上.區(qū)塊鏈上的數(shù)據(jù)結構如表1所示.它由塊頭和交易2部分組成.其中塊頭包括:塊標識、塊的大小、前一個塊的Hash和時間戳;交易包括:塊產(chǎn)生者(DO)身份IDDO、塊產(chǎn)生者的簽名δDO和由Iw以及Address.Iw構成的交易Tx=(Iw,Address.Iw).
Table 1 Blockchain Data Structure表1 區(qū)塊鏈的數(shù)據(jù)結構
階段3.數(shù)據(jù)搜索.
本階段主要包括陷門生成(Trapdoor)和關鍵字搜索(Search)兩個步驟.
陷門生成.在這個過程中,用戶使用自己的密鑰SKu和所要查詢的關鍵字ω產(chǎn)生陷門Tω.
搜索.在關鍵字搜索階段,根據(jù)用戶提交的陷門信息Tω,區(qū)塊鏈上節(jié)點(也可稱為搜索者P)執(zhí)行該算法對關鍵字密文進行搜索. 在整個搜索過程中,不會向區(qū)塊鏈和云服務器泄露有關數(shù)據(jù)文件和所要搜索關鍵字的有用信息.用戶構造1筆包含自己陷門信息的交易Ty,區(qū)塊鏈上的節(jié)點根據(jù)交易Ty計算交易g的主要部分,并將搜索成功的Iw嵌入交易g中,對其簽名后向全區(qū)塊鏈網(wǎng)絡廣播該交易,同時獲得交易Ty中的獎勵d.當區(qū)塊鏈上并未出現(xiàn)交易g時,用戶可以選擇構造1筆新的交易來追回上1筆交易Ty中的獎勵.
x表示訪問樹T中的節(jié)點,算法運行:
1) 若節(jié)點x是葉子節(jié)點,令att=attr(x),即att表示與葉子節(jié)點x相關聯(lián)的屬性.
① 若att∈Suid,計算:
② 若att?Suid,定義Fx=⊥.
2) 若該節(jié)點x是非葉子節(jié)點,對于節(jié)點x的所有孩子節(jié)點z,執(zhí)行算法后的結果記為Fz,集合Ux中保留Fz≠⊥的所有值.
① 若|Ux| ② 若|Ux|≥kx,則表明x節(jié)點的孩子節(jié)點屬性集合滿足該節(jié)點的門限值,則從集合Ux中隨機挑選kx個Fz的值,結合Lagrange系數(shù)計算Fx值: 其中i=index(z),Sx={?z∈Ux:index(z)},Δi,Sx表示Lagrange系數(shù). 3) 若用戶的屬性集Suid滿足訪問樹T,則將算法的執(zhí)行結果表示為Ft=e(g,g)(r+r1)qt(0)=e(g,g)(r+r1)s. 證畢. 當數(shù)據(jù)屬主獲得Iw的存儲地址Address.Iw后,數(shù)據(jù)屬主根據(jù)Address.Iw和Address.F的索引關系找到Address.F,并將Address.F返回給云服務器,云服務器根據(jù)Address.F找到對應的加密數(shù)據(jù)文件,將加密的數(shù)據(jù)文件返回給用戶. 證畢. Hash詢問OHash1.隨機選擇k∈G1,并返回它作為H1(att)的輸出,即R(2)=k. 階段2.與階段1一樣.要求不能詢問與挑戰(zhàn)關鍵字有關的信息. 證畢. 本文與近幾年的屬性基加密文獻[16,19-21]的方案進行功能性對比,其中訪問控制策略主要包括訪問樹和線性秘密共享方案2種.對比結果如表2所示.表2表明本文方案在功能特性上有一定優(yōu)勢. Table 2 Function Comparison表2 功能特性比較 在表3中,Tp表示配對運算的時間,Te表示指數(shù)運算的時間,Tm表示乘法運算的時間,Th表示Hash運算的時間,Tinv表示乘法逆元運算的時間. 1) 計算量比較 在表3和表4中,分別用|S|,|X|,|N|表示1個用戶的屬性集、1個訪問樹的葉子節(jié)點集合和滿足訪問樹的最小屬性集. Table 3 Computation Comparison表3 計算量比較 Table 4 Storage Comparison表4 存儲代價比較 2) 存儲量比較 我們在Linux操作系統(tǒng)下利用雙線性對包(pairing-based cryptography library)[22],用C語言進行編程,在2.9 GHz CPU,4 GB RAM PC機上運行[23].(所使用的橢圓曲線基域為512 b,雙線性對包參數(shù)類型為Type-A)實驗結果如圖2所示: Fig. 2 Time cost of each algorithm(fixed number of keywords and attributes is 500 and 10)圖2 算法的時間花銷(將關鍵字和屬性的個數(shù)固定為500和10) 由圖2可得出結論,本文方案在密鑰生成階段、陷門生成階段和搜索階段效率高于文獻[16]的方案,在系統(tǒng)建立階段兩者幾乎相同. Fig. 3 Algorithm running time comparison (fixed number of keywords is 500)圖3 算法運行時間比較(將關鍵字個數(shù)固定為500) 由圖3可知,本文方案在密鑰生成階段、陷門生成階段和搜索階段效率高于文獻[16]的方案. 同樣地,由圖4可得出結論,本文方案在密鑰生成階段、陷門生成階段和搜索階段的效率均高于文獻[16]的方案.如在用戶陷門生成階段,當屬性個數(shù)為10且關鍵字個數(shù)為600時,本文方案的運行時間為2.381 3 s,文獻[16]方案的運行時間為4.619 4 s. Fig. 4 Algorithm running time comparison when fixed number of attributes is 10圖4 屬性個數(shù)固定為10時算法運行時間比較 本文提出了區(qū)塊鏈上基于云輔助的屬性基可搜索加密方案.本文方案利用屬性基加密技術使數(shù)據(jù)擁有者為數(shù)據(jù)用戶執(zhí)行細粒度的搜索授權.使用可搜索加密技術完成關鍵字在區(qū)塊鏈上的搜索工作,實現(xiàn)數(shù)據(jù)用戶對加密數(shù)據(jù)的安全訪問.在整個過程中,不會向云服務器泄露任何關于關鍵字和數(shù)據(jù)文件的重要信息.我們給出了詳細的正確性證明、性能分析和安全性證明.數(shù)值實驗結果表明:本文方案具有較高的效率.在未來的工作中我們考慮結合代理重加密技術將其應用于電子病歷數(shù)據(jù)共享過程中,以實現(xiàn)與第三方數(shù)據(jù)用戶的數(shù)據(jù)共享.4 安全性證明
4.1 關鍵字密文安全
4.2 陷門安全
5 性能分析
5.1 功能特性比較
5.2 理論分析
5.3 數(shù)值模擬
6 總 結