許盛偉 郭春銳 袁 峰 任雄鵬 楊 森
1(北京電子科技學(xué)院 北京 100070)2(西安電子科技學(xué)院通信工程學(xué)院 陜西 西安 710071)
近年來,隨著云計算的流行,大量計算以及存儲從物理本機被挪至云端[1],為用戶節(jié)約了大量的存儲空間,受到了廣大用戶的喜愛。但是將數(shù)據(jù)存儲在云服務(wù)器上,并不是特別安全,可能會由于云提供商搜集用戶存儲的消息,導(dǎo)致重要信息的泄露。怎樣解決云存儲中數(shù)據(jù)的安全問題,已經(jīng)成為人們急需解決的重要問題之一[2]。近年來,基于屬性加密方案的出現(xiàn)不僅解決了云中所存數(shù)據(jù)的安全問題,同時也實現(xiàn)了用戶的細粒度授權(quán),因此受到了越來越多的關(guān)注。
Sahai等[3]最先提出了基于屬性的加密方案(Attributed-Based Encryption,ABE)。在該方案中,數(shù)據(jù)屬主通過設(shè)定訪問策略,根據(jù)屬性完成加密,在解密過程中,不用獲得數(shù)據(jù)訪問者的具體身份信息,只用關(guān)注解密者的屬性是否滿足加密者設(shè)定的加密策略。Goyal等[4]又將ABE劃分為兩種加密方案,一種是基于密文策略,簡稱CP-ABE,另一種是基于密鑰策略,簡稱KP-ABE[5]。最早提出的CP-ABE加密體制中,訪問結(jié)構(gòu)直接以明文形式存在,從而導(dǎo)致重要信息暴露。Nishide等[6]提出了一種加密方案,可以實現(xiàn)數(shù)據(jù)屬主將數(shù)據(jù)加密的同時,也完成了策略隱藏,防止了敏感信息的泄露。近年來,文獻[7-8]又結(jié)合已有方案提出了新的方案,解決了隱藏策略過程中遇到的問題。
在大多數(shù)CP-ABE加密體制中,密鑰只是由單一的可信的權(quán)威機構(gòu)生成,這種做法不僅非常不安全,同時也不能實現(xiàn)用戶的跨域訪問,一旦權(quán)威機構(gòu)被攻破,敵手獲得密鑰后,就可以從密文中獲得明文數(shù)據(jù)。Chase[9]提出了一種ABE加密方案,將單個權(quán)威機構(gòu)變?yōu)槎鄠€授權(quán)機構(gòu),很好地解決了上述問題。Waters[10]提出了一種分布式的CP-ABE加密方案,首次通過LSSS矩陣完成了ABE加密。后續(xù)文獻[11-12]提出了分布式的屬性基加密方案,其優(yōu)點是密文為定長的。文獻[13]在多機構(gòu)授權(quán)的基礎(chǔ)上,將策略進行了隱藏。
在現(xiàn)有的針對云文件屬性加密的方案中,針對多個層次結(jié)構(gòu)文件的研究還不是特別深入,但是也有學(xué)者們提出了一些方案[14-18],但是加解密效率不是特別理想。文獻[19]提出了一種多級層次結(jié)構(gòu)的CP-ABE方案。該方案通過使用分層的訪問結(jié)構(gòu)模型解決多層次文件共享的難題,但是其將樹形的訪問結(jié)構(gòu)以明文的形式發(fā)送給用戶,容易造成一些敏感信息的泄露。
本文針對具有多級層次結(jié)構(gòu)特點的文件,提出一種采用分層級的樹形結(jié)構(gòu)且策略隱藏的屬性加密方案,同時在本方案中有多個授權(quán)機構(gòu)共同工作。采用分層級的樹形結(jié)構(gòu)可以減少加密成本,同時訪問策略的隱藏防止了敏感信息的泄露。文中用戶密鑰是由中央授權(quán)機構(gòu)和多個屬性授權(quán)機構(gòu)共同生成,防止了單個授權(quán)機構(gòu)被攻擊導(dǎo)致密鑰泄露的難題。
設(shè)G和GT分別是階為素數(shù)p,生成元為g的乘法循環(huán)群,其雙線性映射e:G×G→GT,e滿足以下性質(zhì):
(1) 雙線性。對?μ,ν∈G,a,b∈Zp,都有e(μa,νb)=e(μ,ν)ab。
(2) 非退化性。存在μ,ν∈G,使得e(μ,ν)≠1。
(3) 可計算性。對所有μ,ν∈G,存在有效計算e(μ,ν)≠1。
設(shè)群G、GT為乘法群,階為p,生成元為g∈G,隨機整數(shù)a,b,c∈Zp,并將四元組g,ga,gb,gc∈G和隨機數(shù)T∈GT發(fā)送給敵手A,由敵手A判定T是否等于e(g,g)abc。當(dāng)T=e(g,g)abc時,A輸出1;否則輸出0。
定義敵手判斷出上述問題的優(yōu)勢是:
AdvDBDH=Pr[A(g,ga,gb,gc,e(g,g)abc)=1]-
Pr[A(g,ga,gb,gc,T)=1]
式中:Pr表示概率或者優(yōu)勢。
如果沒有時間多項式算法通過不能忽略AdvDBDH打破DBDH假設(shè),則該假設(shè)成立。
假設(shè)用T表示具有分層結(jié)構(gòu)的訪問樹,在T中,具有k個訪問層次,樹中的節(jié)點用(x,y)表示,其中:x表示節(jié)點在樹中的行位置(從上而下);y表示節(jié)點在樹中的列位置(從左到右)。R(x,y)表示根節(jié)點,att(x,y)表示葉子節(jié)點。
圖1為具有2個層次結(jié)構(gòu)的訪問樹,樹中圓圈表示閾值門限,如“OR”“AND”“n-of-m(n 圖1 具有2個層次結(jié)構(gòu)的訪問樹 針對訪問樹,有如下定義: (xi,yi):表示訪問樹中的級節(jié)點,最高節(jié)點為根節(jié)點R(x1,y1),其余的依次遞減。parent(x,y):表示節(jié)點(x,y)的父節(jié)點。child(x,y):表示節(jié)點(x,y)的子節(jié)點。att(x,y):表示與葉子節(jié)點相關(guān)聯(lián)的屬性。index(x,y):表示返回一個與節(jié)點(x,y)相關(guān)聯(lián)的唯一值。 在本方案中,主體包括5部分,分別為中央授權(quán)機構(gòu)(Central Authority,CA)、屬性授權(quán)機構(gòu)(Attribute Authority,AA)、數(shù)據(jù)屬主 (Data Owner,DO)、用戶(User)和云服務(wù)提供商(Cloud Service Provider,CSP)[7]。 各主體的主要功能如下: 1) CA為可信機構(gòu),通過輸入安全參數(shù),產(chǎn)生主公鑰和主私鑰,同時為AA和User生成身份標簽,當(dāng)用戶注冊完成后,為User生成密鑰組件。 2) AA根據(jù)User屬性生成部分密鑰組件。 3) DO在本地加密需要共享的文件,由于直接采用CP-ABE加密文件,會花費比較長的時間,因此在本文中,DO首先通過AES或SM4算法生成文件密文,再采用CP-ABE算法加密文件密鑰,最終把完整的密文上傳至云端。 4) User 用戶從云服務(wù)端下載完密文數(shù)據(jù),當(dāng)用戶屬性滿足數(shù)據(jù)屬主定義的屬性時獲得屬性加密的密鑰,再解密文件數(shù)據(jù)。 5) CSP是“誠實但好奇”的文件存儲機構(gòu),能夠為用戶提供足夠的文件存儲空間,然而,為了獲取利益,還是會盡可能多地收集所存儲的數(shù)據(jù)信息。 在本方案中,由敵手Adversary和挑戰(zhàn)者Challenger二者通過交互式的游戲,構(gòu)建敵手挑戰(zhàn)模型[20],具體描述如下: 1) 初始化操作(Initialization)。Adversary將選擇的訪問結(jié)構(gòu)W發(fā)送給Challenger。 2) 系統(tǒng)建立(Setup)。Challenger在游戲過程中通過方案中的初始化算法得到系統(tǒng)公鑰和密鑰主私鑰,主私鑰由Challenger保存,將公鑰發(fā)送給Adversary。 3) 查詢階段1(QueryPhase1)。Adversary選擇屬性Si,Si?W,并重復(fù)從Challenger處獲得私鑰SK,同時Challenger通過運行KeyGen生成私鑰SK。 4) 挑戰(zhàn)階段(Challenge)。Adversary選擇兩條等長的消息M0和M1,Challenger通過訪問結(jié)構(gòu)W加密消息Mη,其中η∈{0,1},再將密文CT發(fā)送給Adversary。 5) 查詢階段2(QueryPhase2)。重復(fù)查詢階段1。 (1) CA初始化。CA輸入安全參數(shù)1λ,生成群G,由第1節(jié)可知,g為其生成元,CA隨機選擇α,β∈Zp,計算Y=e(g,g)α和h=gβ,并根據(jù)相應(yīng)的簽名方案,生成簽名密鑰Signkey和驗證密鑰Verifykey。 公鑰GPK=(p,g,G,GT,e,Y,h,Verifykey) (1) 主私鑰GSK=(β,gα) (2) (2) 用戶注冊。User首先向CA發(fā)出申請,完成注冊。然后CA為每個User生成全局標識符GID。在本方案中,用戶不能是長期合法的,必須要有一定的期限限制,因此CA必須為User設(shè)定有效期限Tpov。最后,為了能夠辨別User身份的真?zhèn)?,生成標簽Usign。Usign=(GID‖L‖Tpov,Signkey),其中L為User屬性集。 (3) AA初始化。CA為每個AA設(shè)定一個類似于用戶GID的標識符AID,為了保證每個AA都是合法的機構(gòu),CA為AA生成簽名Asign。Asign=(AID‖UAID,Signkey),其中UAID為AA負責(zé)管理的屬性集。 為屬性集中的每個屬性元素隨機選擇aij∈Zp,計算Aij=gaij。其中公鑰APK={Asign,{Aij}},私鑰ASK=aij。 數(shù)據(jù)擁有者采用k個密鑰{k1,k2,…,kk}利用對稱加密算法加密文件M={m1,m2,…,mk},文件密文為E(M)={Ek1(m1),Ek2(m2),…,Ekk(mk)},再用CP-ABE加密文件密鑰。文件密鑰加密過程如下: 數(shù)據(jù)擁有者首先確定好分層級訪問樹T,輸入公鑰GPK、APK、k個文件密鑰,輸出密文CT。 Ci=kiYsi=kie(g,g)?si (3) (4) 在分級訪問樹中,每個(x,y)都對應(yīng)一個多項式q(x,y),從R(x,y)開始,每個(x,y)的q(x,y)階為:d(x,y)=k(x,y)-1。對于每個分級節(jié)點,q(x,y)(0)=q(x1,y1)(0)=si,多項式q(x,y)的其他系數(shù)隨機選擇。比如根節(jié)點R,qR(0)=q(x1,y1)(0)=s1。對于非分級節(jié)點,q(x,y)(0)=qparent(x,y)(index(x,y))。 集合Y為樹中葉子節(jié)點的集合,對于任意的(x,y)∈Y,有: (5) (6) 對于其他節(jié)點,則有: C(x,y)i=e(g,g)?(q(x,y)(0)+qchildj(0)) (7) 用戶向AA發(fā)出私鑰請求后,AA首先驗證用戶信息檢查其是否在有效期范圍內(nèi),如果身份有效,則根據(jù)用戶屬性生成私鑰組件。 為每個屬性值隨機選擇λi∈Zp,則: 用戶從云端下載完密文后,需要得到共享文件的密鑰K才能解密文件,首先是采用CP-ABE算法解密得到對稱密鑰,再通過對稱算法解密共享文件。 類似于CP-ABE[21],解密運算如下: ① 若節(jié)點(x,y)為葉子節(jié)點時,令i=att(x,y),如果i?S,DecryptNode(CT,SK,(x,y))=null。 如果i∈S,則有: e(g,g)rq(x,y) (0) (8) ② 若(x,y)為非葉子節(jié)點時,設(shè)Z為節(jié)點x的子節(jié)點,令Fz=DecryptNode(CT,SK,Z),S(x,y)為節(jié)點x的子節(jié)點集。 e(g,g)rq(x,y) (0) (9) ③ 如果S滿足整個或者部分訪問樹,則: DecryptNode(CT,SK,(xi,yi))= e(g,g)rq(xi,yi)(0)=e(g,g)rsi (10) ④ 最后得到相關(guān)的密鑰: (11) (12) ⑤ 利用ki解密Eki(mi)得到文件mi。若用戶滿足部分訪問樹,則可得到文件M中部分;若滿足整個訪問樹,則可得到文件M的所有內(nèi)容。 系統(tǒng)密鑰由CA和AA共同生成,在以往的CP-ABE方案中,系統(tǒng)密鑰只由CA生成,一旦CA被攻擊,就會造成密鑰泄露。在本方案中,如果CA被攻破,只會使得私鑰的部分組件D被泄露,完整的私鑰不會被泄露。如果部分AA機構(gòu)被攻破,只會獲得k個Di,解密幾率還是非常小的,因此本方案中系統(tǒng)的密鑰是安全的。 密文信息為Ci=kiYsi=kie(g,g)?si,若要解密密文得到明文ki,必須恢復(fù)出e(g,g)αsi。對于一個不具備屬性y的攻擊者u1,即使與具備該屬性的用戶u2共謀,也不能得到密鑰組件D;因為CA為每個用戶產(chǎn)生的隨機數(shù)r是不一致的。如果出現(xiàn)授權(quán)中心合謀攻擊的情況時,只要CA中心的私鑰組件D沒有被泄露,方案仍舊是安全的。 根據(jù)第2節(jié)中設(shè)計的安全模型,對本文所提出的方案進行安全性證明。 定理1如果在任意的時間多項式算法中,Adversary不可能以不可忽略的優(yōu)勢ξ贏得挑戰(zhàn),則稱本方案是選擇明文攻擊安全的。 選取雙線性映射e:G×G→GT,隨機選擇a、b、c,其中a,b,c∈Zp。η∈{0,1},R∈GT。若R=e(g,g)abc時,η=1,否則η=0。 1) 初始化操作(Initialization)。Adversary將選擇的訪問結(jié)構(gòu)W發(fā)送給Challenger。 2) 系統(tǒng)建立(Setup)。Challenger通過初始化算法setup,為Adversary提供公鑰PK,Challenger隨機選擇a′∈Zp,a=a′+ab,則Y=e(g,g)a,h=gβ=B=gb。為每個屬性值隨機選擇aij∈Zp,Aij=gaij,將PK發(fā)送給Adversary。 4) 挑戰(zhàn)階段(Challenge)。Adversary選擇兩條等長的消息M0和M1,Challenger通過訪問結(jié)構(gòu)W加密消息Mη,其中η∈{0,1},再將密文CT發(fā)送給Adversary。 C=MηYs=Mηe(g,g)as C′=hs=gβs 5) 查詢階段2(QueryPhase2)。重復(fù)查詢階段1。 6) 猜測階段(Guess)。Adversary輸出對于η的猜測η′(η′∈{0,1})。 如果η=η′,Challenger輸出1,則R=e(g,g)abc,否則輸出1。 最后贏得挑戰(zhàn)游戲的優(yōu)勢為: 本文方案針對具有層次結(jié)構(gòu)的文件提出多機構(gòu)授權(quán)且隱藏樹形訪問結(jié)構(gòu)的CP-ABE方案,本節(jié)從密文長度、用戶密鑰長度和加解密時間幾個方面展開,同時與文獻[7]的方案進行對比分析。 為了便于說明,定義以下符號:k表示文件分級個數(shù);L*表示*的長度;|*|表示*的元素個數(shù);AT表示除葉子以外的子節(jié)點集;i為AT中節(jié)點的子節(jié)點;Au為用戶的屬性集;AS為系統(tǒng)屬性集;S表示具有層次結(jié)構(gòu)訪問樹中的最小內(nèi)部節(jié)點;tb表示雙線性對運算;te表示群中的指數(shù)運算和乘法運算時間。 密文長度為(2|AS|+k)LG+(i|AT|+k)LGT。 用戶密鑰長度為(2|Au|+1)LG。 加密時間為(2|AS|+k)te+(i|AT|+2k)te。 解密時間為(2|Au|+1)tb+(2|S|+j|AT|+2k)te。 在文獻[13]中,密文長度為(2|AS|+1)LG+LGT,用戶私鑰長度為(2|Au|+1)LG,加密時間為(2|AS|+2)te,解密時間為(2|Au|+1)tb。 若解密一個文件時,文獻[13]中密文略短于本文生成的密文,用戶私鑰一樣長,加密時間和解密時間也略低于本文方案。而本文方案可以同時加密K個文件,此時,本文方案明顯優(yōu)于文獻[13]。且本文方案能夠?qū)崿F(xiàn)文件的分級訪問控制。 本文利用多層次的樹形訪問結(jié)構(gòu)加密文件,實現(xiàn)了文件的分級訪問控制,同時,策略的隱藏防止了敏感信息的泄露,研究成果在DBDH假設(shè)下被證明是安全的。通過與其他方案的對比,本文方案在加密多個文件時具有明顯的優(yōu)勢,同時多授權(quán)機構(gòu)的使用不僅可以保護用戶密鑰的安全,也可實現(xiàn)用戶的跨域訪問。下一步,將重點研究如何減少解密運算量。2 系統(tǒng)模型及安全模型
2.1 系統(tǒng)模型
2.2 安全模型
3 方案構(gòu)造
3.1 初始化算法
3.2 加密算法
3.3 密鑰生成
3.4 解密運算
4 安全性分析
4.1 密鑰的安全性
4.2 抵抗合謀攻擊
4.3 安全性證明
5 性能分析
6 結(jié) 語