王明慧,曹 杰,潘 琪,邵雨琪,胡若霄
(安徽大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,安徽 合肥 230601)
隨著云計(jì)算[1]時(shí)代的到來,越來越多的用戶習(xí)慣將自己的文件、圖片、視頻等數(shù)據(jù)存儲(chǔ)在云服務(wù)器上。然而在某些情況下用戶可能無法親自檢查外包數(shù)據(jù),此時(shí)用戶必須將檢測(cè)任務(wù)委托給一個(gè)可信的代理[2-3],代理審計(jì)的概念應(yīng)運(yùn)而生[4]。這種方案允許用戶將審計(jì)任務(wù)委托給一個(gè)可信的第三方代理,當(dāng)用戶無法訪問云服務(wù)時(shí),代理可以代替用戶定期檢測(cè)云中數(shù)據(jù)的完整性。當(dāng)云返回的證據(jù)無法通過驗(yàn)證時(shí),代理會(huì)采取進(jìn)一步措施通知用戶,由此提高系統(tǒng)的可用性。
在現(xiàn)存的代理數(shù)據(jù)完整性審計(jì)協(xié)議中,用戶的公鑰和身份通過一個(gè)數(shù)字證書綁定。數(shù)字證書內(nèi)含有用戶的個(gè)人信息和其公鑰信息,同時(shí)還附有認(rèn)證中心的簽名信息。云服務(wù)器為了確保用戶公鑰的有效性需要驗(yàn)證標(biāo)簽和附加的用戶公鑰證書。這種簽名與驗(yàn)證會(huì)造成相當(dāng)大的計(jì)算開銷。除了繁重的證書驗(yàn)證之外,系統(tǒng)還存在復(fù)雜的證書管理,即證書生成、交付、撤銷、更新等問題。為了減輕證書的管理開銷,本文采用基于身份的方法[5],將用戶身份作為其公鑰。為了更進(jìn)一步提高方案的標(biāo)簽生成效率,本文也借鑒了線上線下簽名[6]的思想。在大多審計(jì)協(xié)議中,用戶在對(duì)文件計(jì)算標(biāo)簽塊時(shí)需要承擔(dān)大量計(jì)算開銷,而本方案在標(biāo)簽生成階段采取線上線下分開計(jì)算的方式分別對(duì)文件各塊計(jì)算相應(yīng)的驗(yàn)證標(biāo)簽。通過線下的預(yù)計(jì)算,使得用戶在上傳文件時(shí)可以更快得到數(shù)據(jù)塊標(biāo)簽,提高了標(biāo)簽計(jì)算的效率。
(1)私鑰生成中心是一個(gè)可信第三方,它可以對(duì)用戶進(jìn)行身份認(rèn)證,并根據(jù)身份為其頒發(fā)私鑰;
(2)用戶是數(shù)據(jù)擁有者,允許其將大量數(shù)據(jù)外包給云,利用云存儲(chǔ)服務(wù)提供的各種接口進(jìn)行數(shù)據(jù)操作,并擁有簽名和出具委托書的能力;
(3)代理是受用戶委托的第三方,可向云服務(wù)器發(fā)送挑戰(zhàn)請(qǐng)求,并根據(jù)云服務(wù)器返回的證據(jù)檢驗(yàn)外包數(shù)據(jù)的完整性;
(4)云服務(wù)器是一種擁有大量存儲(chǔ)和計(jì)算資源的分布式存儲(chǔ)系統(tǒng),可為用戶提供數(shù)據(jù)存儲(chǔ)服務(wù)。
圖1 系統(tǒng)模型
在該模型中,可信的私鑰生成中心PKG為用戶、云服務(wù)器、代理方發(fā)放私鑰并發(fā)布系統(tǒng)公開參數(shù)。用戶將數(shù)據(jù)外包給云,并生成委托書,用其私鑰對(duì)委托書簽名,將委托書及對(duì)應(yīng)的簽名發(fā)送給代理以及云服務(wù)器。為了檢測(cè)外包數(shù)據(jù)是否被破壞,用戶可以任意指定第三方代理發(fā)送一個(gè)隨機(jī)的挑戰(zhàn)詢問。當(dāng)云服務(wù)器接收到請(qǐng)求后,會(huì)生成對(duì)應(yīng)的證據(jù)并轉(zhuǎn)發(fā)給代理。最后代理可以通過驗(yàn)證證據(jù)的有效性判斷外包數(shù)據(jù)是否完整。如果證據(jù)有效,那么檢測(cè)的數(shù)據(jù)可能是完整的,否則已被破壞。
系統(tǒng)由四個(gè)實(shí)體組成,即私鑰生成中心、用戶、代理、云服務(wù)器,如圖1所示。
定義1 給定兩個(gè)素?cái)?shù)q階乘法循環(huán)群G1,G2,一個(gè)雙線性映射e:(G1,G1)→G2是具有如下性質(zhì)的映射:
本方案的安全性依賴于CDH(Computational Diffie-Hellman,CDH)問題。
本節(jié)提出了一個(gè)高效的代理數(shù)據(jù)完整性檢測(cè)方案,該方案包括初始化階段、委任書生成階段、標(biāo)簽生成階段和審計(jì)階段。
PKG執(zhí)行算法Steup(1λ),選擇一個(gè)隨機(jī)數(shù)作為主私鑰,并發(fā)布系統(tǒng)公開參數(shù)。用戶發(fā)送自己的身份ID給PKG,PKG執(zhí)行算法Getkey(params,x,ID)為每位用戶計(jì)算私鑰和對(duì)應(yīng)的R,并維護(hù)一個(gè)公開列表。當(dāng)用戶收到返回的私鑰后,可通過執(zhí)行算法Vkey(ID,sk)驗(yàn)證私鑰的合法性。
2.1.1 Steup(1λ)
(1)輸入一個(gè)安全參數(shù)λ,PKG選擇一個(gè)隨機(jī)元u∈G1
*,兩個(gè)安全的抗碰撞哈希函數(shù)H1:{0,1}*→Zq*和H2→G1*以及兩個(gè)偽隨機(jī)函數(shù)f1,f2×{1,2,…,n}→
(3)發(fā)布系統(tǒng)公開參數(shù) params={G1,G2,q,e,g,H1,H2,X,f1,f2,β,u}。
2.1.2 Getkey(params,x,ID)
(1)用戶將其身份IDi發(fā)送給PKG,PKG收到數(shù)據(jù)后隨機(jī)選擇ri∈Zq*,計(jì)算 Ri=gri和 ski=ri+xH1(IDi,Ri)mod q,并將私鑰(ski,Ri)通過秘密通道發(fā)送給用戶。
(2)PKG維護(hù)一個(gè)公開列表{(IDi,Ri)}。重復(fù)執(zhí)行該算法的(1)操作,用戶、代理和云可以得到各自的有效私鑰(sku,skp,sks)和(Ru,Rp,Rs)。
2.1.3 VKey(ID,sk)
當(dāng)接收到返回的私鑰(ski,Ri)后,用戶通過驗(yàn)證等式gski=RiXH1(IDi,Ri)是否成立從而驗(yàn)證私鑰的有效性。如果有效,用戶接受;反之,用戶丟棄。
在該階段,客戶首先生成代理委托書w,該委托書包含委托人和代理人的身份及有效期等信息??蛻魣?zhí)行算法Wsig(sku,r,w)對(duì)該委托書簽名,得到簽名sig。之后客戶將(w,R,sig)發(fā)送給代理及云服務(wù)器。代理和云服務(wù)器收到后,通過算法Wverify(w,R,sig)驗(yàn)證簽名的合法性。如果簽名合法則接受委托,否則拒絕。
2.2.1 Wsig(sku,r,w)
2.2.2 Wverify(w,R,sig)
當(dāng)代理和云服務(wù)器接收到(w,R,sig)后,分別驗(yàn)證gsig=R·(Ru·XH1(IDu,Ru))H1(w,R)是否成立。若等式成立,則簽名合法并接受委托,否則拒絕。
假設(shè)用戶要上傳文件F,則將文件分為n塊,通過算法MSign(sku,M)對(duì)每一個(gè)文件塊計(jì)算標(biāo)簽,并輸出。用戶將所有文件塊及其塊標(biāo)簽上傳到云服務(wù)器,刪除本地所有數(shù)據(jù)。
當(dāng)云服務(wù)器接收到數(shù)據(jù)塊標(biāo)簽對(duì),通過執(zhí)行算法Mverify(M,Tm)驗(yàn)證認(rèn)證元數(shù)據(jù)的合法性,輸出1表示合法,云服務(wù)器接收數(shù)據(jù),否則拒絕。
2.3.1 MSign(sku,M)
線下階段:
(2)預(yù)計(jì)算usku,隨機(jī)選擇不同的αi∈Zq,1≤i≤β(β是可能的總文件塊數(shù)),并計(jì)算離線標(biāo)簽Toffi=(H2(Wi)·uαi)sku。最后用戶將元組{(αi,Wi,Toffi)}1≤i≤β保存在本地。
線上階段:
假設(shè)用戶要上傳的文件為F=(m1,m2,…,mn),對(duì)每一個(gè)文件塊mi計(jì)算相應(yīng)的塊標(biāo)簽Ti。
(1)用戶從本地恢復(fù)未使用過的元組(αi,Wi,Toffi)}1≤i≤β,計(jì)算 Δmi=mi-αi,Toni=(usku)Δmi,1≤ i≤ n。
(3)輸出(mi,Ti)。
2.3.2 Mverify(M,Tm)
在本階段,挑戰(zhàn)由代理發(fā)起,并發(fā)送給云服務(wù)器。
(1)代理執(zhí)行算法Gchal(sk)生成挑戰(zhàn),然后將挑戰(zhàn)等
數(shù)據(jù)發(fā)送給云服務(wù)器。
(2)云服務(wù)器執(zhí)行算法CVerify(chal,R,sig')驗(yàn)證代理人身份與委任書是否一致。如果不一致,則拒絕,否則云服務(wù)器將執(zhí)行算法GenProof(m,chal,Tm),生成證據(jù),并發(fā)送給代理。
(3)代理執(zhí)行算法 PVerify(chal,Proof),若輸出1,則認(rèn)為數(shù)據(jù)是完整的;輸出0表示數(shù)據(jù)已被破壞或刪除。2.4.1 Gchal(skp)
2.4.2 CVerify(chal,R,sig')
云 服 務(wù) 器 收 到(chal,R,sig') 后, 驗(yàn) 證 等 式是否成立。若成立且代理人身份與委任書一致則進(jìn)行下一步操作,若不成立,則拒絕。
2.4.3 GenProof(m,chal,Tm)
(1)云服務(wù)器對(duì)每一個(gè) j∈[1,c],計(jì)算 ij=β(k1,j),aj=f2(k2,j)。
(3)輸出證據(jù)Proof=(m,T),并發(fā)回給代理。
2.4.4 PVerify(chal,Proof)
(2)驗(yàn)證等式是否成立,如果成立,表示數(shù)據(jù)可能是完整的;反之,數(shù)據(jù)一定被破壞。
從四個(gè)方面證明方案的正確性:
(1)如果用戶是誠實(shí)的,那么任何委任書簽名(W,R,sig)都可以被代理和云服務(wù)器驗(yàn)證。
證明如下:
(2)如果用戶是誠實(shí)的,那么任何文件塊標(biāo)簽對(duì)(mi,Ti)都可以通過云服務(wù)器的檢查,即標(biāo)簽驗(yàn)證階段滿足正確性。
證明如下:
(3) 如果代理是誠實(shí)的,那么代理對(duì)挑戰(zhàn)的簽名sig'可以通過云服務(wù)器的身份驗(yàn)證。
證明如下:
(4)如果代理和云服務(wù)器都是誠實(shí)的,那么云服務(wù)器返回的證據(jù)V=(m,T)可以通過代理的數(shù)據(jù)完整性驗(yàn)證。
證明如下:
因此,可以得到:
本文方案的安全性證明包括兩方面:
(1)要考慮任何其他第三方不能代替代理人驗(yàn)證客戶存儲(chǔ)云數(shù)據(jù)的完整性;
(2)要保證云服務(wù)器不能在數(shù)據(jù)損壞的情況下騙過代理人的完整性檢查。
①方案中的三方能完成云數(shù)據(jù)的完整性檢查是由于客戶、云服務(wù)器以及代理都能夠計(jì)算得到一個(gè)相等的t值:
任何其他用戶計(jì)算出相同的t值都可以破解CDH問題,而根據(jù)CDH問題的困難性可知,敵手無法得出t值。
②本文提出的協(xié)議滿足合理性,即如果存儲(chǔ)的數(shù)據(jù)已被破壞或刪除,則云服務(wù)器不能通過審計(jì)過程。
證明:如果攻擊者能夠攻破合理性,那么就存在一個(gè)算法B能夠破解CDH問題。算法B可以控制預(yù)言機(jī)H1,H2,令u=gy。
假設(shè)存在一個(gè)敵手A,能夠向算法B進(jìn)行哈希詢問,算法B可以控制預(yù)言機(jī)H1,H2。當(dāng)云服務(wù)器輸出響應(yīng){m,T}滿足下式:
則攻擊者A可能輸出響應(yīng)(m*,T*)滿足下式:
二者相除可得:
繼而可以得到:
由于Δμ=m-m*≠0,于是可得從而破解CDH問題。
本節(jié)評(píng)估本文所提方案的計(jì)算效率和通信開銷。該模擬實(shí)驗(yàn)使用Windows系統(tǒng),處理器為Intel(R)CoreTMi7-6500U CPU @ 2.50 GHz (4 CPUs)~2.6 GHz,主存大小為8 GB。程序語言選用C語言,密碼算法使用基于雙線性配對(duì)的密碼學(xué)(PBC)函數(shù)庫。選擇A類型橢圓曲線,系統(tǒng)安全參數(shù)設(shè)置為160 B。選取的測(cè)試文件大小為200 MB,每一個(gè)數(shù)據(jù)都是運(yùn)行5次后取的平均值。
(1)圖2展示了用戶在模擬實(shí)驗(yàn)中委任書生成階段的計(jì)算開銷。模擬實(shí)驗(yàn)測(cè)試了生成與驗(yàn)證[2,20]個(gè)委托書所需的計(jì)算開銷。生成兩個(gè)委托書時(shí),用戶所需的計(jì)算時(shí)間為22 ms,代理與云服務(wù)器方面驗(yàn)證委托書有效性所需的計(jì)算時(shí)間為18 ms。從圖2中可以清楚看出,用戶的計(jì)算開銷與委托書生成個(gè)數(shù)成正比,且總體所需計(jì)算開銷較少。
圖2 委任書生成簽名與驗(yàn)證時(shí)間
(2)數(shù)據(jù)標(biāo)簽生成階段分為離線階段和在線階段。本文提出的方案采取線上線下標(biāo)簽生成方式大大減輕了客戶的計(jì)算開銷,從實(shí)驗(yàn)結(jié)果可以看出,大量的計(jì)算在線下完成,而在線上,用戶只需承擔(dān)n次Zp域上的減法運(yùn)算、n次G1群上的冪運(yùn)算和乘法運(yùn)算即可。因?yàn)橛脩羲袚?dān)的開銷很大程度上取決于文件塊數(shù),所以在實(shí)驗(yàn)中,模擬測(cè)試的文件大小為固定的200 M,文件塊數(shù)在[1 000,10 000]區(qū)間時(shí),數(shù)據(jù)擁有者在線上線下階段分別計(jì)算標(biāo)簽塊所需時(shí)間,結(jié)果如圖3所示。當(dāng)n=1 000時(shí),用戶線下階段計(jì)算標(biāo)簽塊需要17.251 s,線上階段需要4.004 s;當(dāng)n=10 000時(shí),用戶線下階段計(jì)算塊標(biāo)簽需要145.270 s,線上階段需要33.750 s。從圖3可以清楚地看出,計(jì)算開銷與文件塊數(shù)成正比關(guān)系,線上計(jì)算的效率相比于線下計(jì)算要高約4倍以上。因此,模擬實(shí)驗(yàn)結(jié)果證明了本文方案中使用的線上線下方式生成數(shù)據(jù)塊標(biāo)簽是有效的。
圖3 線上線下標(biāo)簽生成時(shí)間與塊數(shù)的關(guān)系
本節(jié)評(píng)估方案審計(jì)階段的效率。根據(jù)上述方案所提,在該階段,代理只需隨機(jī)選擇c個(gè)文件塊來驗(yàn)證數(shù)據(jù)的完整性,c的范圍在[1,n]之間,無需驗(yàn)證全部n塊文件塊。在模擬實(shí)驗(yàn)中,為了測(cè)試不同挑戰(zhàn)塊數(shù)與審計(jì)效率的關(guān)系,固定了總數(shù)
據(jù)塊的值為5 000,c的取值范圍是[100,1 000],測(cè)試審計(jì)過程中不同挑戰(zhàn)塊數(shù)所花費(fèi)的計(jì)算開銷。圖4展示了模擬實(shí)驗(yàn)的測(cè)試結(jié)果,即挑戰(zhàn)塊數(shù)為[100,1 000]時(shí)審計(jì)過程所花費(fèi)的計(jì)算開銷。從實(shí)驗(yàn)結(jié)果可以看出,審計(jì)效率與挑戰(zhàn)塊數(shù)成正比,線性增長,增長速率并不高。由此可以看到本文所提方案不論是在云服務(wù)器生成所挑戰(zhàn)的證據(jù)階段還是第三方代理人驗(yàn)證云返回的證據(jù)階段都比較高效。
在本文方案中,通信開銷主要發(fā)生在下發(fā)委托書、上傳標(biāo)簽、發(fā)送挑戰(zhàn)請(qǐng)求和生成證據(jù)這4個(gè)階段。實(shí)驗(yàn)中測(cè)試了n=2 000塊的文件,隨機(jī)選取c個(gè)挑戰(zhàn)塊產(chǎn)生的通信開銷。c的范圍為100~1 000。圖5展示了不同挑戰(zhàn)塊數(shù)下的總通信開銷。
圖4 審計(jì)階段不同挑戰(zhàn)塊數(shù)所需的時(shí)間
圖5 通信開銷
本文提出了一種云存儲(chǔ)中基于身份的代理驗(yàn)證數(shù)據(jù)完整性方案。首先,該方案采用線上線下簽名思想使得用戶在線下階段只需要執(zhí)行輕量級(jí)計(jì)算。其次,本文方案采用基于身份的方法減少了傳統(tǒng)數(shù)據(jù)完整性審計(jì)協(xié)議過程中繁瑣的證書管理開銷。最后,當(dāng)用戶被限制而無法驗(yàn)證數(shù)據(jù)完整性時(shí),方案允許用戶委托第三方代理,經(jīng)委托后代理可以定期檢測(cè)云中數(shù)據(jù)的完整性,并將結(jié)果反饋給用戶,使系統(tǒng)的可用性得到提高。