蔣 英,陳燕俐,高詩堯
(南京郵電大學(xué) 計(jì)算機(jī)學(xué)院、軟件學(xué)院、網(wǎng)絡(luò)空間安全學(xué)院,江蘇 南京 210003)
近年來,云技術(shù)得到了飛速發(fā)展,已成為計(jì)算機(jī)科學(xué)中的重要領(lǐng)域。云技術(shù)不僅提供計(jì)算服務(wù),還提供存儲服務(wù),可以使用戶受益于解決數(shù)據(jù)共享的爆炸性增長問題。文件屬主(data owner,DO)的文件可以存儲在多個服務(wù)器上,并由其他數(shù)據(jù)用戶共享。為了確保存儲在遠(yuǎn)程服務(wù)器上的文件不會被其他數(shù)據(jù)用戶或惡意服務(wù)器破壞,DO通常會在數(shù)據(jù)上傳到云端之前對數(shù)據(jù)進(jìn)行加密,但是加密可能會導(dǎo)致用戶(data user,DU)無法對密文進(jìn)行搜索,在某種程度上限制了文件搜索的靈活性。為了解決搜索加密文件的問題,專家們提出了可搜索加密(search encryption,SE)技術(shù),DO對共享數(shù)據(jù)和文件和關(guān)鍵詞進(jìn)行加密,并上傳至服務(wù)器。SE可充分利用云服務(wù)器龐大的計(jì)算資源進(jìn)行密文上的關(guān)鍵字查找,不僅保證了用戶數(shù)據(jù)的安全和隱私,而且能夠節(jié)省大量的網(wǎng)絡(luò)傳輸和計(jì)算開銷。隨后,大量關(guān)于可搜索加密的文章被提出,目前SE方案根據(jù)其構(gòu)造算法的不同可以分為兩類:對稱可搜索加密算法[1]和公鑰可搜索加密算法[2]。前者的構(gòu)造通常基于一些偽隨機(jī)函數(shù)生成器、哈希算法等,更適用于單用戶模型;后者主要使用雙線性映射等,并且將安全問題建立在一些復(fù)雜性假設(shè)上,更適用于多用戶體制。另外還包括單關(guān)鍵字布爾搜索方案[3-5]和多關(guān)鍵字布爾搜索方案[6-9]。但傳統(tǒng)的一對一的可搜索加密不能適應(yīng)云計(jì)算海量用戶和數(shù)據(jù)的安全管理以及細(xì)粒度的關(guān)鍵字搜索,云場景下,加密者往往想將數(shù)據(jù)分享給一些的特定的、滿足一些固定條件的人,如何做到云存儲數(shù)據(jù)的細(xì)粒度的加密數(shù)據(jù)訪問控制和密文檢索,成為了研究者面臨的一個關(guān)鍵挑戰(zhàn)。2005年Sahai和Waters[10]提出了基于屬性加密(attributed-based encryption,ABE)機(jī)制,通過引入了屬性集合和訪問策略的概念,將一系列的屬性集合看作用戶的身份標(biāo)識,當(dāng)屬性和訪問結(jié)構(gòu)相匹配時,才能解密密文。2013年,Kulvaibhavh等人[11]首先提出了基于屬性的可搜索加密方案(attribute-based search encryption,ABSE),將靈活、高效和細(xì)粒度的ABE加密機(jī)制和可搜索加密技術(shù)相結(jié)合,實(shí)現(xiàn)了云環(huán)境安全、高效、細(xì)粒度的數(shù)據(jù)共享以及密文檢索。
考慮到在多數(shù)云計(jì)算實(shí)際應(yīng)用環(huán)境中,共享的多個文件通常具有層次結(jié)構(gòu)。以個人健康記錄(personal health records,PHR)為例[12],為了在云環(huán)境中安全地共享PHR信息,患者將其PHR信息M分為兩個部分:個人信息文件m1和病例信息文件m2。患者根據(jù)實(shí)際需要,會通過不同的訪問策略對文件m1和m2進(jìn)行加密。設(shè)患者將m1的訪問結(jié)構(gòu)設(shè)置為P1:{(心臟病學(xué)AND研究員)AND主治醫(yī)師},m2的訪問結(jié)構(gòu)被設(shè)置為P2: {心臟病學(xué)AND研究員}。顯然,如果分別使用訪問結(jié)構(gòu)P1和P2對m1和m2進(jìn)行加密,文件需要進(jìn)行兩次加密,部分密文會出現(xiàn)重復(fù)??紤]到通常情況下,當(dāng)用戶可以解密m1時,他必然可以解密m2,Wang等人首次提出了文件分層-屬性加密方案(file hierarchy attribute-based encryption,F(xiàn)H-ABE)[13],通過引入層節(jié)點(diǎn)和傳輸節(jié)點(diǎn)等概念,將多個訪問策略集成為一個訪問結(jié)構(gòu),縮短了密文長度,同時用戶可以解密當(dāng)層以及以下層的所有文件,從而提高了解密效率。為了實(shí)現(xiàn)分層文件上的可搜索加密,Miao等人[5]將FH-ABE方案與SE方案相結(jié)合,提出了文件分層的基于屬性的可搜索加密(file hierarchy attribute-based searchable encryption,F(xiàn)H-ABSE)等方案。然而,目前的FH-ABE和FH-ABSE方案只支持樹形訪問結(jié)構(gòu),解密運(yùn)算由于采用遞歸和拉格朗日差值計(jì)算,計(jì)算效率低,并且需要逐層計(jì)算節(jié)點(diǎn)的信息,解密開銷較大。同時目前的FH-ABSE方案還存在以下兩個問題:(1)采用先解密,再進(jìn)行關(guān)鍵字匹配的方式,造成關(guān)鍵字搜索效率較低;(2)索引密文與關(guān)鍵字個數(shù)相關(guān),當(dāng)關(guān)鍵字較多時,存儲開銷和計(jì)算開銷較高。針對以上問題,文中以Wang等人的方案[13]為基礎(chǔ),構(gòu)造了一個靈活的、高效的、支持LSSS訪問結(jié)構(gòu)的多關(guān)鍵字可搜索方案(file hierarchy-LSSS-attribute based multi-keyword search encryption,F(xiàn)H-LABMKSE)。創(chuàng)新點(diǎn)具體如下:
(1)實(shí)現(xiàn)了支持LSSS結(jié)構(gòu)的文件分層-基于屬性的加密。文中支持LSSS結(jié)構(gòu),通過將秘密因子逐步分配的方法,巧妙地避開了采用訪問樹結(jié)構(gòu)方案在解密時的遞歸和拉格朗日差值計(jì)算。另外將下一層的密文信息直接嵌入上一層的密文中,實(shí)現(xiàn)了密文的跳躍式傳遞。同時,也實(shí)現(xiàn)了靈活的細(xì)粒度訪問控制。
(2)實(shí)現(xiàn)了固定索引密文長度的多關(guān)鍵字可搜索。本方案關(guān)鍵字索引大小與計(jì)算開銷都與關(guān)鍵字個數(shù)無關(guān),和目前的多關(guān)鍵字可搜索方案中關(guān)鍵字密文大小和計(jì)算開銷隨著關(guān)鍵字個數(shù)線性增長相比,在固定了關(guān)鍵字密文長度的同時,還提高了計(jì)算效率。另外本方案采用先關(guān)鍵字匹配,然后符合訪問結(jié)構(gòu)的用戶再解密的方式,和目前先解密再關(guān)鍵字匹配的方案相比,提高了關(guān)鍵字的搜索效率。
(3)不僅關(guān)鍵字搜索功能是由云服務(wù)器完成的,并且將解密的一部分計(jì)算任務(wù)轉(zhuǎn)移到云服務(wù)器,從而降低了用戶的計(jì)算負(fù)擔(dān),而云服務(wù)器在整個過程中不會得到和關(guān)鍵字有關(guān)的有用信息。
為了在加密文件上實(shí)現(xiàn)分層的細(xì)粒度訪問結(jié)構(gòu),Wang等人首次提出了一個分層CP-ABE方案[14]。隨后,出現(xiàn)了一系列具有特殊功能的分層CP-ABE方案[15-16]。但是,它們僅僅考慮了屬性的分層,卻沒有考慮文件的分層。為了支持對分層文件的訪問控制,Wang等人[13]提出了FH-CP-ABE方案,通過將多個訪問樹集成為一個訪問樹,用戶可以通過計(jì)算一次解密密鑰來解密多個文件,既節(jié)省了密文存儲空間又節(jié)省了加解密時間。并且,當(dāng)系統(tǒng)的文件越多,方案的效率越高。2019年,F(xiàn)u等人[17]提出了實(shí)用的密文策略-基于屬性的文件分層加密方案。該方案首先根據(jù)文件的屬性構(gòu)造了一組相互獨(dú)立的訪問樹,其次采用貪婪策略來構(gòu)建合并這些樹,然后通過合并各個小樹來動態(tài)生長樹。將集成訪問樹中的所有文件加密在一起,提高了加解密的效率。
2013年,Wang等人[18]結(jié)合CP-ABE和公鑰可搜索技術(shù),提出基于屬性的可搜索加密方案。2017年,Gowda等[19]提出了文件分層的可搜索加密方案,該算法具有定時啟用的隱私保護(hù)關(guān)鍵字搜索機(jī)制。提出的方案允許數(shù)據(jù)用戶基于屬性集在數(shù)據(jù)擁有者提供的持續(xù)時間內(nèi)執(zhí)行關(guān)鍵字搜索。它支持在數(shù)據(jù)擁有者提供的指定時間后自動撤銷訪問權(quán)限。它保證了機(jī)密性,同時保持了細(xì)粒度的訪問控制和通用的客戶端撤銷。Miao等人提出文件分層的屬性可搜索方案[5]支持細(xì)粒度的單關(guān)鍵字搜索和細(xì)粒度的多關(guān)鍵字搜索。但是,目前多關(guān)鍵字可搜索方案僅支持訪問樹結(jié)構(gòu),并且密文多數(shù)都是隨著關(guān)鍵字的增加而線性增長,當(dāng)關(guān)鍵字較多時,存儲開銷較大。
定義1 雙線性映射[10]。設(shè)置兩個階為素?cái)?shù)p的乘法循環(huán)群G0和GT,g是G0的一個生成元。存在一個雙線性映射e:G0×G0→GT,必須滿足以下3個條件:
(a)雙線性。對任意u,v∈G0,任意a,b∈Zp,都有e(ua,vb)=e(u,v)ab。
(b)非退化性。存在u,v∈G0,滿足e(u,v)≠1。
(c)可計(jì)算性。對任意u,v∈G0,e(u,v)可有效計(jì)算。
定義2 線性秘密共享矩陣(LSSS)[20]。令{P1,P2,…,Pn}為n個參與者的集合,這一組參與者上的秘密共享方案π是線性的,如果:
(a)各方的秘密因子構(gòu)成了Zp上的向量。
(b)存在一個l行n列的矩陣M,稱為π的共享生成矩陣。對于所有i=1,2,…,l,M的第i行為Mi,令函數(shù)ρ將參與者所在的行i定義為ρ(i)??紤]列向量v=(s,r2,…,rn),其中s∈Zp是要共享的秘密值,r2,…,rn∈Zp是隨機(jī)選擇的,則M·v是l個秘密因子的向量。每個秘密因子λi=Mi·v屬于參與者ρ(i)。
本方案的安全模型與原始的LSSS-CP-ABE方案[20]相同。文中在敵手A和挑戰(zhàn)者B之間定義CPA(chosen plaintext attacks)安全游戲,如下所示。
系統(tǒng)建立。B運(yùn)行FH-LABMKSE的Setup階段,輸出公開參數(shù)PK,并將PK發(fā)送給A。
詢問階段1。A重復(fù)地對屬性集S1,S2,…,Sq1進(jìn)行私鑰查詢。
挑戰(zhàn)。A選擇兩個要受到挑戰(zhàn)的等長的信息m0和m1。同時,A給定一個受到挑戰(zhàn)的訪問結(jié)構(gòu)A*使得沒有任何詢問階段1的集合Si滿足A*。B選擇一條信息mρ,ρ∈{0,1},并且用Α*加密。B將密文CT*返回給A。
詢問階段2。A重復(fù)詢問階段1的步驟,但是,屬性集Sq1+1,…,Sq都不滿足與挑戰(zhàn)相對應(yīng)的訪問結(jié)構(gòu)。
定義4 如果沒有敵手能夠在多項(xiàng)式時間內(nèi)以不可忽略的優(yōu)勢贏得上述安全游戲,則FH-LABMKSE方案是CPA安全的。
設(shè)關(guān)鍵字集W={w1,w2,…,wm},DO首先從文件集F={F1,F2,…,Fk}中提取關(guān)鍵字,并為每個文件構(gòu)造關(guān)鍵字索引向量Di={di,1,di,2,…,di,m}(若di,θ為1,表示Fi中有第θ個關(guān)鍵字,否則為0)。接著,DO利用不同的對稱密鑰cki分別加密文件Fi,并加密對稱密鑰集ck={ck1,ck2,…,ckk}和關(guān)鍵字索引向量。當(dāng)DU想要訪問包含其預(yù)計(jì)關(guān)鍵字的密文時,必須將根據(jù)查詢的關(guān)鍵字生成的陷門傳送給云服務(wù)提供商(cloud server provider,CSP)。此后,當(dāng)且僅當(dāng)其陷門與訪問結(jié)構(gòu)匹配時,CSP才會返回相關(guān)的密文。
系統(tǒng)模型如圖1所示,文中系統(tǒng)主要涉及四種不同類型的實(shí)體:文件屬主(DO)、用戶(DU)、云服務(wù)提供商(CSP)和授權(quán)中心(attribute authority,AA)。假設(shè)DO擁有k個文件,并且文件集F={F1,F2,…,Fk}在云存儲中共享。AA是一個完全受信任的實(shí)體,并且接受云儲存中的用戶注冊,為用戶生成屬性私鑰。CSP是一個半可信的實(shí)體。CSP會好奇存儲在云上的數(shù)據(jù),但是絕對忠誠,會嚴(yán)格履行特定的服務(wù),不會惡意刪除數(shù)據(jù)或者拒絕響應(yīng)用戶的請求。在本系統(tǒng)它提供密文存儲、關(guān)鍵字檢索和部分解密工作。
圖1 系統(tǒng)模型
(a)初始化算法Setup。
由AA執(zhí)行,輸入安全參數(shù)λ。生成階為素?cái)?shù)p的乘法循環(huán)群G、GT。給定雙線性映射e:G×G→GT,g為G的生成元。設(shè)系統(tǒng)中屬性集合U,系統(tǒng)屬性個數(shù)為|U|。隨機(jī)生成群元素hattr(1),…,hattr(|U|)∈G。AA定義兩個哈希函數(shù)H:{0,1}*→G,H1:{0,1}*→Zp。最后,隨機(jī)選擇α,a,b∈Zp,生成PK和MSK,PK發(fā)布在AA的公共布告板上,MSK自行秘密保存。
PK={e(g,g)α,g,ga,gb,hattr(1),…,hattr(U),H,H1}
(1)
MSK={gα,b}
(2)
(b)用戶密鑰生成算法Kengen。
由AA執(zhí)行,當(dāng)用戶加入時,根據(jù)用戶屬性集S,AA選擇一個隨機(jī)值t∈Zp,生成DU的屬性密鑰SK,并傳送給用戶。
(3)
(c)索引密鑰生成算法TKengen。
用戶隨機(jī)選擇z∈Zp,生成一對索引公私鑰對,TPK=e(g,g)z為索引公鑰,TSK=z為索引私鑰。
(d)關(guān)鍵字和文件加密算法Encrypt。
由DO執(zhí)行,假設(shè)文件集F={F1,F2,…,Fk},對稱密鑰集ck={ck1,ck2,…,ckk}分別用來加密k個文件,文件等級由1到k遞減。
DO采用一個分層的訪問結(jié)構(gòu)加密k個對稱密鑰。在分層訪問結(jié)構(gòu)中,每一層只加密一個對稱密鑰。分層的訪問結(jié)構(gòu)實(shí)際上是多個訪問策略的聚類,它包含很多個訪問策略,每個訪問策略對應(yīng)一個對稱密鑰。這些訪問策略存在從屬關(guān)系,即Pk?Pk-1?…?P1。若DU能夠解密Pi,那它必然可以解密Pi+1,i∈[1,k-1]。DO根據(jù)P1,生成一個訪問矩陣(M,ρ),M是l×n的矩陣,l是P1中的屬性個數(shù)。選擇一個向量v={s1,y2,…,yn}∈Zp,s1是加密ck1的秘密因子。DO通過計(jì)算v×Mi得到每個屬性對應(yīng)的秘密因子λi,其中Mi是矩陣M的第i行向量。根據(jù)文獻(xiàn)[21]中的訪問矩陣構(gòu)成方式,不難看出,或門的孩子節(jié)點(diǎn)的秘密因子等于該或門節(jié)點(diǎn)的秘密因子,而無論一個與門節(jié)點(diǎn)有多少孩子節(jié)點(diǎn),它的秘密因子都等于它的左孩子節(jié)點(diǎn)的秘密因子減去右邊所有孩子節(jié)點(diǎn)秘密因子的和。因此當(dāng)DO得到每個屬性的秘密因子和s1后,便可自上而下地重構(gòu)每個子訪問策略Pi的秘密值si,i∈[2,k]。
圖2 分層訪問結(jié)構(gòu)中秘密因子的分配
為P1隨機(jī)選擇一個秘密值s1=2,接著選擇兩個隨機(jī)數(shù),設(shè)y2=1,y3=-3,構(gòu)成向量v=(2,1,-3),圖2給出了各節(jié)點(diǎn)分配的秘密因子,可知P2的秘密值為3。
DO隨機(jī)選擇r1,r2,…,rl∈Zp,生成文件密文和關(guān)鍵字密文的步驟如下:
?文件密文的生成。
用對稱密鑰cki加密每個文件Fi,得到數(shù)據(jù)密文CFi=Enc(Fi,cki)(此處Enc是一種對稱加密算法)。
再用文件分層的屬性加密機(jī)制對cki進(jìn)行加密,生成密文如下:
(4)
Λi=e(g,g)α(si+si+1)·H(e(g,g)αsi)
i∈[1,k-1]
(5)
(6)
?關(guān)鍵字密文的生成。
DO根據(jù)每個文件的關(guān)鍵字索引向量Di={di,1,di,2,…,di,m}以及自己的索引私鑰z,為每個文件Fi生成關(guān)鍵字密文I={Ii}:
(7)
最后,DO將密文CT={C,I}上傳到CSP。
(e)陷門生成算法Trapgen。
DU執(zhí)行該算法。W'為DU的查詢關(guān)鍵字集。DU首先向DO申請獲得索引公鑰e(g,g)z,再根據(jù)W'生成查詢向量Q={q1,q2,…,qm},若關(guān)鍵字wθ在W'中,那么qθ為1,否則為0。DU隨機(jī)選擇v∈Zp,生成陷門T。
?DU生成與密鑰相關(guān)的陷門組件T1:
(8)
?DU生成與關(guān)鍵字相關(guān)的陷門組件T2:
(9)
最后DU將完整的陷門T={T1,T2}發(fā)送給CSP。
(f)搜索算法Search。
?CSP首先驗(yàn)證e(I,t1)≥t2是否成立:
(10)
(11)
(g)解密算法。
Decrypt(CT',SK):DU根據(jù)CT'和SK計(jì)算:
(12)
基于分層的特性,DU也能夠解密位于i層以下的密文:
(13)
最后獲得相應(yīng)的對稱密鑰:
(14)
從而解密CFi獲得文件集F。
定理1:如果q-parallel-BDHE假設(shè)成立,那么攻擊者不可能在多項(xiàng)式時間內(nèi)找到一個不可忽略的概率以大小為l*×n*的挑戰(zhàn)矩陣,選擇性地攻破文中方案,其中l(wèi)*、n*≤q,即提出的方案在隨機(jī)預(yù)言模型下是選擇性CPA安全的。
證明:假定在選擇安全性的情況下有多項(xiàng)式時間敵手A可以有不可忽略的優(yōu)勢攻破本方案,那么敵手A可以構(gòu)建出一個挑戰(zhàn)者B以不可忽略的優(yōu)勢解決q-parallel BDHE的問題。具體過程如下:
(a)初始化。
挑戰(zhàn)者B接受q-parallel-BDHE挑戰(zhàn)向量y和隨機(jī)數(shù)T。A選擇挑戰(zhàn)訪問策略(M*,ρ*),M*有n*列,并將其發(fā)送給挑戰(zhàn)者B。
(b)系統(tǒng)建立。
(c)階段1。
(d)挑戰(zhàn)。
(e)階段2。
與階段1相同。
(f)猜測。
文中方案與Miao的兩個方案[5,8]進(jìn)行了存儲、通信開銷和計(jì)算開銷的比較。方案[8]實(shí)現(xiàn)了樹形訪問結(jié)構(gòu)的基于屬性的多關(guān)鍵字可搜索加密,方案[5]實(shí)現(xiàn)了樹形訪問結(jié)構(gòu)的、文件分層-基于屬性的多關(guān)鍵可搜索加密。在文獻(xiàn)[5]中,密文信息的傳遞是由傳輸節(jié)點(diǎn)進(jìn)行的。文獻(xiàn)[5]中對傳輸節(jié)點(diǎn)的定義為:如果一個節(jié)點(diǎn)的孩子中至少有一個包含門限值,那么就稱它為傳輸節(jié)點(diǎn)。
令LG,LGT分別表示G、GT中元素的長度,|Ale|,|Ant|分別表示訪問結(jié)構(gòu)中屬性的數(shù)量和傳輸節(jié)點(diǎn)的數(shù)量。令|S|表示用戶的屬性數(shù)量,U表示系統(tǒng)中屬性的個數(shù)。m表示關(guān)鍵字的個數(shù)。表1比較了3種方案公開參數(shù)大小、主密鑰大小、用戶屬性密鑰大小、索引密文大小以及陷門大小。從表中可以看出,文中方案的關(guān)鍵字索引密文長度小于方案[5]和方案[8]的。這是由于本方案的關(guān)鍵字索引密文與關(guān)鍵字的個數(shù)無關(guān),是固定長度的,而另外兩個方案都隨著關(guān)鍵字?jǐn)?shù)量的增加線性增長。
表1 與不同方案的存儲、通信開銷的比較
表2 與不同方案的計(jì)算開銷的比較
對計(jì)算開銷的比較,為了方便,本節(jié)主要考慮了耗時的指數(shù)運(yùn)算和雙線對運(yùn)算,令EG、EGT表示群G、GT的指數(shù)運(yùn)算時間;e表示雙線性配對計(jì)算時間。表2給出了在k個文件、m個關(guān)鍵字的條件下三種方案的Kengen算法、Encrypt算法、Trapgen算法和Search算法的計(jì)算開銷。j表示每個傳輸節(jié)點(diǎn)的子節(jié)點(diǎn)數(shù)。從表2中可以看出,文中方案的加密時間隨k線性增長,另外兩個方案均隨km線性增加。同時,因?yàn)槲闹腥∠藗鬏敼?jié)點(diǎn),因此加密計(jì)算開銷明顯低于其余兩個方案。
文中實(shí)現(xiàn)了一種文件分層的多關(guān)鍵字可搜索方案,在云環(huán)境中實(shí)現(xiàn)了安全靈活的文件分層的細(xì)粒度訪問控制和關(guān)鍵字搜索。方案通過將秘密值分配的方法,將下一層的秘密值直接嵌入上一層的密文中,提高了分層文件的解密效率;其次通過對多關(guān)鍵字構(gòu)造索引向量的方式,實(shí)現(xiàn)了固定關(guān)鍵字密文長度的多關(guān)鍵字可搜索,最后采用先關(guān)鍵字搜索,再解密的方式進(jìn)一步提高了關(guān)鍵字的搜索效率。該方案不僅提高了解密效率,而且節(jié)省了通信和存儲開銷。