胡奧婷, 胡愛群
(東南大學(xué) 網(wǎng)絡(luò)空間安全學(xué)院,江蘇,南京 210096)
云服務(wù)器存儲數(shù)據(jù),作為大數(shù)據(jù)時代的重要應(yīng)用,讓用戶把本地數(shù)據(jù)上傳到云服務(wù)器中保存. 安全性和實用性是云存儲服務(wù)的要素. Sahai和Waters[1]在2005年提出基于屬性加密算法(attribute-based encryption,ABE). 其后,Bethencort等[2]在2007年提出CP-ABE(ciphertext-policy attribute-based encryption,CP-ABE)算法,數(shù)據(jù)擁有者自定義數(shù)據(jù)加密策略,并將數(shù)據(jù)加密策略與密文關(guān)聯(lián)后上傳至云服務(wù)器,使得滿足屬性條件的用戶可以自行下載解密,不滿足屬性條件的人不能解密. 這種加密機(jī)制十分適合云存儲場景. 此后大量的研究對CP-ABE算法完善和拓展,主要集中在多權(quán)威機(jī)構(gòu)的CP-ABE[3-5],CP-ABE安全撤銷的研究[6-8],隱蔽接入策略的CP-ABE[9-12]等方面.
然而,在眾多研究中,關(guān)于對用戶讀寫權(quán)限分類的CP-ABE的研究較少. 用戶在云數(shù)據(jù)共享時,可能分為不同的權(quán)限,如只讀權(quán)限和讀寫權(quán)限. 只讀權(quán)限的用戶只允許其下載和閱讀數(shù)據(jù),但是不能修改數(shù)據(jù),讀寫權(quán)限的用戶允許其下載解密修改并重新上傳數(shù)據(jù). 多人修改同一份文件時就需要用到此功能. 本文提出一個基于CP-ABE算法的用戶權(quán)限分類的云數(shù)據(jù)共享方案. 與現(xiàn)有相關(guān)的研究相比,有更簡單的算法和更高的計算通信效率,且可以彌補(bǔ)現(xiàn)有文獻(xiàn)的安全漏洞.
本方案使用的云共享模型如圖1所示,實體包括云服務(wù)提供者(cloud service provider, CSP),數(shù)據(jù)擁有者(data owner),屬性權(quán)威機(jī)構(gòu)(authorities),只讀用戶和讀寫用戶. 用戶注冊階段,屬性權(quán)威機(jī)構(gòu)給用戶分發(fā)屬性密鑰. 數(shù)據(jù)加密階段,數(shù)據(jù)擁有者制定消息MSG的接入政策,包括只讀政策x和修改政策y. 只讀政策x與消息MSG綁定用于生成密文CT,讀寫政策y中的屬性計算參量集合附在密文CT后面,全部上傳至CSP,用于云服務(wù)器判斷用戶權(quán)限. 用戶解密時,用戶向云服務(wù)器CSP申請數(shù)據(jù),CSP把密文CT發(fā)給用戶,當(dāng)且僅當(dāng)用戶屬性滿足只讀政策x時用戶解密數(shù)據(jù). 想要修改數(shù)據(jù)的讀寫用戶必須證明其屬性集合滿足讀寫政策y才可以修改數(shù)據(jù).
圖1 云共享模型Fig.1 Model of cloud data sharing system
修改數(shù)據(jù)的協(xié)議模型見圖2. 該模型包括3個實體,即讀寫用戶、云服務(wù)提供商和驗證權(quán)威機(jī)構(gòu). 協(xié)議的步驟為:
圖2 用戶修改數(shù)據(jù)模型Fig.2 The model of modifying data on cloud
① 用戶申請對消息MSG的修改權(quán)限;
② CSP把密文和挑戰(zhàn)直接發(fā)給用戶,同時CSP把挑戰(zhàn)用戶的唯一識別號、隨機(jī)數(shù)和公鑰發(fā)送給驗證權(quán)威機(jī)構(gòu);
③ 用戶拿到挑戰(zhàn),計算proof,證明自己有修改權(quán)限,并把proof發(fā)送給驗證權(quán)威機(jī)構(gòu);
④ 驗證權(quán)威機(jī)構(gòu)驗證等式判斷用戶是否有修改權(quán)限,如果用戶驗證通過,則驗證權(quán)威機(jī)構(gòu)發(fā)送確認(rèn)用戶修改權(quán)限給云服務(wù)器,同時返回確認(rèn)給用戶;
⑤ 用戶收到認(rèn)證通過的消息,就可以修改數(shù)據(jù). 用戶修改數(shù)據(jù)并重新上傳數(shù)據(jù).
本節(jié)提出安全模型,在1.1節(jié)描述的云共享模型中提到有3類實體,包括云服務(wù)器,權(quán)威機(jī)構(gòu),用戶(數(shù)據(jù)擁有者、只讀用戶和讀寫用戶). 本文認(rèn)為云服務(wù)器是半可信(semi-trusted)的,即會忠實執(zhí)行用戶存儲數(shù)據(jù)修改數(shù)據(jù)的操作,但是對用戶數(shù)據(jù)好奇. 權(quán)威機(jī)構(gòu)是完全可信(full- trusted)的,即不會泄露用戶的密鑰也不允許與任何機(jī)構(gòu)共謀. 用戶是好奇的(curious),其可能會試圖獲取自己權(quán)限之外的數(shù)據(jù). 例如只讀權(quán)限的用戶想要獲取修改數(shù)據(jù)的權(quán)限. 不滿足該數(shù)據(jù)接入條件的用戶試圖解密數(shù)據(jù). 另外存在外來入侵者(outside intruder),可能會觀察通信信道試圖截取數(shù)據(jù)并解密數(shù)據(jù),試圖偽造權(quán)限證明.
本方案的去中心化的可分開制定讀寫策略的CP-ABE算法由以下5個算法組成.
① Global Setup(λ)→GP:輸入安全參數(shù)λ,輸出全局參數(shù)GP.
② Authority Setup(GP)→SK,PK:每個權(quán)威機(jī)構(gòu)輸入GP全局參數(shù),輸出自己的公私鑰對SK,PK.
③ KeyGen(GID,GP,i,SK)→Ki,GID:每個權(quán)威機(jī)構(gòu)輸入用戶的身份GID,全局參數(shù),一個屬性i,屬性機(jī)構(gòu)的私鑰SK. 輸出針對用戶GID的屬性為i的私鑰Ki,GID.
④ Encrypt(M,(A,ρ),(B,μ),GP,{PK})→CT:數(shù)據(jù)擁有者輸入消息M,只讀接入矩陣(A,ρ),讀寫接入矩陣(B,μ),全局參數(shù)GP,各個權(quán)威機(jī)構(gòu)的公鑰,輸出密文CT.
⑤ Decrypt(CT,GP,{Ki,GID})→M:用戶輸入全局參數(shù)GP,密文CT,屬性密鑰{Ki,GID},當(dāng)屬性密鑰滿足接入矩陣時,可以輸出明文M. 否則,解密失敗.
本文提出基于CP-ABE的去中心化的分別自定義讀寫策略的云數(shù)據(jù)共享方案的算法. 方案包括4個部分:系統(tǒng)初始化、加密算法、解密算法和用戶修改數(shù)據(jù).
系統(tǒng)初始化包括3部分算法:全局初始化GlobalSetup(λ)→GP,權(quán)威機(jī)構(gòu)初始化AuthoritySetup(GP)→SK,PK和用戶注冊KeyGen(GID,GP,i,SK)→Ki,GID.
① GlobalSetup(λ)→GP.
定義一個素數(shù)p階的雙線性群G,g為其生成元,雙線性群GT. 定義雙線性運(yùn)算e:G×G→GT. 定義哈希函數(shù)H:{0,1}*→G,H2:GT→p. 每個用戶分配一個全局身份標(biāo)識GID.
② AuthoritySetup(GP)→SK,PK.
由權(quán)威機(jī)構(gòu)At執(zhí)行,每個權(quán)威機(jī)構(gòu)對其管理的屬性有著互不重疊的編號i,這個屬性編號在全局中是獨一無二的. 對每個屬性i,權(quán)威機(jī)構(gòu)選取隨機(jī)指數(shù)αt,i,yt,i∈p,計算PKt,i={e(g,g)αt,i,gyt,i}作為公鑰,私鑰為SKt,i={αt,i,yt,i?i}.
③ KeyGen(GID,GP,i,SK)→Ki,GID.
一個全局編號為GID的用戶,要去各個屬性機(jī)構(gòu)處注冊登記獲取自己的屬性密鑰. 某個屬性機(jī)構(gòu)At給用戶GID的屬性i頒發(fā)屬性密鑰,其用私鑰SKt,i計算:
Ki,GID=gαiH(GID)yi,
(1)
并把私鑰Ki,GID安全的傳送給用戶.
加密算法為Encrypt(M,(A,ρ),(B,μ),GP,{PK})→CT,由數(shù)據(jù)擁有者執(zhí)行.
某數(shù)據(jù)擁有者全局編號為GID,想要加密消息M,首先他需要制定只讀策略(A,ρ),也就是解密該消息所需要的屬性集合. 矩陣A是一個n×l的接入矩陣,函數(shù)ρ將其行向量映射到每個屬性. 然后選擇一個隨機(jī)數(shù)s∈p和一個隨機(jī)向量是其第一個元素. 本文定義λx=Ax·v,Ax表示矩陣A的第x行. 同時選擇隨機(jī)向量使0作為他的第一個元素. 定義ωx=Ax·w. 對每一個行向量Ax,選擇隨機(jī)數(shù)rx∈p. 加密的密文計算為
C0=Me(g,g)s,
C1,x=e(g,g)λxe(g,g)αρ(x)rx,
C2,x=grx,C3,x=gyρ(x)rxgωx?x.
(2)
然后用戶定義讀寫策略(B,μ),矩陣B是一個m×t的接入矩陣,函數(shù)μ將其行向量映射到每個屬性. 然后選擇一個隨機(jī)數(shù)s′∈p和一個隨機(jī)向量是其第一個元素. 對隨機(jī)數(shù)s′,計算
v2=gH2(e(g,g)s′).
(3)
D1,x=e(g,g)τxe(g,g)αμ(x)ux,
D2,x=gux,D3,x=gyμ(x)uxgφx?x.
(4)
定義CTR={C0,C1,x,C2,x,C3,x?x},W={D1,x,D2,x,D3,x?x},CT=(CTR,W). 加密結(jié)束后,用戶把CT‖v2上傳至云服務(wù)器保存.
用戶如果想要解密消息CT(可以解密數(shù)據(jù)的用戶分為兩種:第一種是只能解密數(shù)據(jù)且不能修改數(shù)據(jù);第二種是既能解密數(shù)據(jù)又能修改數(shù)據(jù)),那么給云發(fā)送請求數(shù)據(jù),云服務(wù)器把CTR返回給用戶,用戶可以開始解密工作. 首先用戶用自己的唯一標(biāo)識GID計算哈希H(GID). 如果用戶擁有屬性Ax的密鑰Kρ(x),GID,并且這些屬性的線性組合包含(1,0,…,0),那么用戶就可以進(jìn)行以下解密. 對每個屬性x,用戶計算
e(g,g)λxe(H(GID),g)ωx.
用戶選擇常數(shù)cx∈p使得然后計算:
∏x(e(g,g)λxe(H(GID),g)ωx)Ex=e(g,g)s.
最后解密消息為
(5)
當(dāng)用戶申請修改數(shù)據(jù)時,先發(fā)送修改數(shù)據(jù)的請求給云服務(wù)器,云服務(wù)器收到請求后發(fā)給他密文和一個隨機(jī)數(shù)挑戰(zhàn)i,隨機(jī)數(shù)為了防止重放攻擊(replay attack). 用戶收到密文CT后,計算出證明自己修改權(quán)限的σ,云服務(wù)器驗證通過后,用戶就可以修改數(shù)據(jù). 具體計算步驟如圖3所示.
圖3 用戶修改數(shù)據(jù)協(xié)議Fig.3 The protocol of modifying data on cloud
① 用戶發(fā)送修改請求給云服務(wù)器;
② 云服務(wù)器找到對應(yīng)的密文CT,并生成隨機(jī)數(shù)i,并把挑戰(zhàn)和密文i‖CT發(fā)送給用戶,與此同時,云服務(wù)器把i‖GID‖v2發(fā)送給驗證權(quán)威機(jī)構(gòu). 此處假設(shè)云服務(wù)器和驗證權(quán)威機(jī)構(gòu)的信道是安全的.
③ 用戶收到密文CT后,解剖出W. 用戶用自己的唯一標(biāo)識GID計算哈希h=H(i‖GID)如果用戶擁有屬性Bx的密鑰Kρ(x),GID,并且這些屬性的線性組合包含(1,0,…,0),那么用戶就可以進(jìn)行以下解密. 對每個屬性x,用戶計算
e(g,g)τxe(H(GID),g)φx.
用戶選擇常數(shù)dx∈p使得然后計算
∏x(e(g,g)τxe(H(GID),g)φx)dx=e(g,g)s′.
最后用戶計算簽名令牌σ并發(fā)送給驗證權(quán)威機(jī)構(gòu)用作驗證.
σ=hH2(e(g,g)s′).
④ 驗證權(quán)威機(jī)構(gòu)收到用戶的簽名令牌σ,同時計算h←H(GID‖i),然后驗證等式
e(h,v2)=e(g,σ).
(6)
驗證完成后回復(fù)ACK給CSP,CSP轉(zhuǎn)發(fā)給用戶. 當(dāng)驗證通過時ACK=1,驗證失敗時ACK=0.
⑤ 當(dāng)用戶收到ACK=1時,用戶可以修改數(shù)據(jù)并重新加密上傳該數(shù)據(jù),過程與創(chuàng)建一個文件類似,只是在云服務(wù)器上會用新的密文替代原來的密文CTR,W和v2保持不變.
本方案的正確解密含義是,不論何時,輸入一個全局參數(shù)GP,M通過加密算法產(chǎn)生的密文CT,用戶GID對應(yīng)的屬性密鑰集合{Ki,GID},只要屬性密鑰集合滿足接入結(jié)構(gòu),那么Decrypt(CT,GP,{Ki,GID})=M.
證明 某用戶A的全局身份標(biāo)識為GID,其計算哈希函數(shù)H(GID),他的密鑰為{Ki,GID}. 密文的加密政策為(A,ρ). 用戶選擇一些Ax對應(yīng)的密鑰,使得向量(1,0,…,0)是他們的一種線性組合. 然后用戶解密如下,對于這樣的x,他計算
e(g,g)λxe(H(GID),g)ωx.
然后用戶選擇常數(shù)cx∈p使得然后計算:
∏x(e(g,g)λxe(H(GID),g)ωx)cx=
最后用戶解密消息M為C0/e(g,g)s=M.
t′≥t+2τcA(qs+qH),ε′≤ε/2eqs.
證明 由于該證明就等價于Gap簽名的安全性,所以在文獻(xiàn)[13]中有完整的安全性證明,在此不贅述.
本方案在數(shù)據(jù)解密時抗共謀攻擊、在用戶修改權(quán)限認(rèn)證時抗重放攻擊、共謀攻擊.
e(g,g)λxe(H(GIDA),g)ωx,
e(g,g)λxe(H(GIDB),g)ωx.
本方案可以在用戶驗證修改權(quán)限協(xié)議時防止多個用戶共謀產(chǎn)生簽名令牌σ. 和前文解密防止共謀的方法是類似,只是在修改權(quán)限認(rèn)證協(xié)議中,兩個或以上的用戶共謀所針對的是讀寫策略(B,μ). 但是由于兩個用戶GID的不同,一樣不能在解密步驟約去后一項并計算出e(g,g)s′,因此也就不能共謀產(chǎn)生簽名令牌σ.
除此之外,該簽名令牌σ還能防止重放攻擊. 在用戶修改數(shù)據(jù)協(xié)議(圖3)中,未防止攻擊者竊聽截獲截獲信道數(shù)據(jù),每次用戶發(fā)起用戶修改數(shù)據(jù)協(xié)議,云服務(wù)器都生成新的隨機(jī)挑戰(zhàn)i,所以即使攻擊者截獲之前的通信數(shù)據(jù),也不能通過再次重放獲取能通過驗證權(quán)威機(jī)構(gòu)的正確認(rèn)證.
首先,對比了文獻(xiàn)[5,14-15]對與本文的功能比較,結(jié)果見表1. 從表1可以看出,同類型的文章可以實現(xiàn)去中心化的支持讀寫功能的有文獻(xiàn)[5,14],雖然文獻(xiàn)[15]不支持用戶的讀寫權(quán)限分開定義,但是因為其是經(jīng)典的去中心化ABE方案,且文獻(xiàn)[14]也采用其去中心化思路,所以列入其中方便下文的計算復(fù)雜度分析. 文獻(xiàn)[5,14]用的讀寫策略分開定義的方法是相同的,都是單獨采用了ABS簽名算法,讓用戶另外對每個消息加密時產(chǎn)生相應(yīng)的簽名,用于驗證用戶身份. 區(qū)別是文獻(xiàn)[14]只支持一個屬性權(quán)威機(jī)構(gòu),不能應(yīng)用于去中心化的多屬性權(quán)威機(jī)構(gòu)場景. 綜上所述,只有文獻(xiàn)[4]實現(xiàn)的功能與本文類似. 因此在相同的實現(xiàn)功能下,只需比較文獻(xiàn)[5]與本文的計算量和存儲量高低,比較結(jié)果見表2和表3.
表1 功能比較Tab.1 Functionality
表2 計算量比較Tab.2 Computation complexity
表3 存儲量比較Tab.3 Storage overhead
其次,對比了文獻(xiàn)[5,14-15]和本文方案的加密時計算量、簽名計算量、驗證寫權(quán)限計算量,結(jié)果見表2. 其中EG為群元素計算一次指數(shù)運(yùn)算的時間,tPair為群元素計算一次雙線性運(yùn)算時間,tHash為一次哈希函數(shù)的運(yùn)行時間. 本文的加密計算量比其他文獻(xiàn)略高,簽名計算量與文獻(xiàn)持平,但是本文有著明顯較少的驗證修改權(quán)限的計算量. 這是因為本文采用的BLS簽名算法比文獻(xiàn)[5,14]更見簡便,另外,值得注意的是,文獻(xiàn)[5,14]都是采用云服務(wù)器對用戶修改權(quán)限判斷和驗證,如果云服務(wù)器不是完全可信的話,極易存在數(shù)據(jù)被不法分子擅自篡改的問題.
最后,對比了文獻(xiàn)[13-15]和本方案的存儲量比較,包括簽名、屬性密鑰、密文數(shù)量,結(jié)果見表3. 從表3看出,本文簽名和屬性密鑰數(shù)量都遠(yuǎn)遠(yuǎn)優(yōu)于同類文獻(xiàn),其中nGID為用戶GID持有的屬性數(shù)量. 密文數(shù)量與同類文獻(xiàn)比較基本持平. 增加的密文量主要是為了保證第三方權(quán)威機(jī)構(gòu)可以替代云服務(wù)器檢驗用戶的可修改數(shù)據(jù)權(quán)限,從而避免云服務(wù)器不誠實帶來的數(shù)據(jù)篡改問題.
本文提出了一個去中心化的基于CP-ABE的自定義用戶讀寫權(quán)限的數(shù)據(jù)共享機(jī)制. 該機(jī)制可以讓數(shù)據(jù)擁有者自行定義用戶的只讀和修改權(quán)限的屬性條件,并把條件和密文相關(guān),上傳到云服務(wù)器保存. 之后用戶就可以自行下載數(shù)據(jù)并修改數(shù)據(jù). 只有滿足只讀條件的用戶才能解密數(shù)據(jù),只有滿足修改權(quán)限的用戶才能修改數(shù)據(jù). 其他用戶包括半可信的云服務(wù)器都不能解密或者隨意篡改數(shù)據(jù). 本機(jī)制比同類方案的優(yōu)點在于系統(tǒng)參數(shù)少、簽名長度短、驗證計算量小、通信量小,并且能夠防止不誠實的云服務(wù)器蓄意篡改數(shù)據(jù)帶來的危險.