王明慧,曹 杰,潘 琪,邵雨琪,胡若霄
(安徽大學 計算機科學與技術學院,安徽 合肥 230601)
隨著云計算[1]時代的到來,越來越多的用戶習慣將自己的文件、圖片、視頻等數據存儲在云服務器上。然而在某些情況下用戶可能無法親自檢查外包數據,此時用戶必須將檢測任務委托給一個可信的代理[2-3],代理審計的概念應運而生[4]。這種方案允許用戶將審計任務委托給一個可信的第三方代理,當用戶無法訪問云服務時,代理可以代替用戶定期檢測云中數據的完整性。當云返回的證據無法通過驗證時,代理會采取進一步措施通知用戶,由此提高系統的可用性。
在現存的代理數據完整性審計協議中,用戶的公鑰和身份通過一個數字證書綁定。數字證書內含有用戶的個人信息和其公鑰信息,同時還附有認證中心的簽名信息。云服務器為了確保用戶公鑰的有效性需要驗證標簽和附加的用戶公鑰證書。這種簽名與驗證會造成相當大的計算開銷。除了繁重的證書驗證之外,系統還存在復雜的證書管理,即證書生成、交付、撤銷、更新等問題。為了減輕證書的管理開銷,本文采用基于身份的方法[5],將用戶身份作為其公鑰。為了更進一步提高方案的標簽生成效率,本文也借鑒了線上線下簽名[6]的思想。在大多審計協議中,用戶在對文件計算標簽塊時需要承擔大量計算開銷,而本方案在標簽生成階段采取線上線下分開計算的方式分別對文件各塊計算相應的驗證標簽。通過線下的預計算,使得用戶在上傳文件時可以更快得到數據塊標簽,提高了標簽計算的效率。
(1)私鑰生成中心是一個可信第三方,它可以對用戶進行身份認證,并根據身份為其頒發私鑰;
(2)用戶是數據擁有者,允許其將大量數據外包給云,利用云存儲服務提供的各種接口進行數據操作,并擁有簽名和出具委托書的能力;
(3)代理是受用戶委托的第三方,可向云服務器發送挑戰請求,并根據云服務器返回的證據檢驗外包數據的完整性;
(4)云服務器是一種擁有大量存儲和計算資源的分布式存儲系統,可為用戶提供數據存儲服務。

圖1 系統模型
在該模型中,可信的私鑰生成中心PKG為用戶、云服務器、代理方發放私鑰并發布系統公開參數。用戶將數據外包給云,并生成委托書,用其私鑰對委托書簽名,將委托書及對應的簽名發送給代理以及云服務器。為了檢測外包數據是否被破壞,用戶可以任意指定第三方代理發送一個隨機的挑戰詢問。當云服務器接收到請求后,會生成對應的證據并轉發給代理。最后代理可以通過驗證證據的有效性判斷外包數據是否完整。如果證據有效,那么檢測的數據可能是完整的,否則已被破壞。
系統由四個實體組成,即私鑰生成中心、用戶、代理、云服務器,如圖1所示。
定義1 給定兩個素數q階乘法循環群G1,G2,一個雙線性映射e:(G1,G1)→G2是具有如下性質的映射:
本方案的安全性依賴于CDH(Computational Diffie-Hellman,CDH)問題。
本節提出了一個高效的代理數據完整性檢測方案,該方案包括初始化階段、委任書生成階段、標簽生成階段和審計階段。
PKG執行算法Steup(1λ),選擇一個隨機數作為主私鑰,并發布系統公開參數。用戶發送自己的身份ID給PKG,PKG執行算法Getkey(params,x,ID)為每位用戶計算私鑰和對應的R,并維護一個公開列表。當用戶收到返回的私鑰后,可通過執行算法Vkey(ID,sk)驗證私鑰的合法性。
2.1.1 Steup(1λ)
(1)輸入一個安全參數λ,PKG選擇一個隨機元u∈G1
*,兩個安全的抗碰撞哈希函數H1:{0,1}*→Zq*和H2→G1*以及兩個偽隨機函數f1,f2×{1,2,…,n}→
(3)發布系統公開參數 params={G1,G2,q,e,g,H1,H2,X,f1,f2,β,u}。
2.1.2 Getkey(params,x,ID)
(1)用戶將其身份IDi發送給PKG,PKG收到數據后隨機選擇ri∈Zq*,計算 Ri=gri和 ski=ri+xH1(IDi,Ri)mod q,并將私鑰(ski,Ri)通過秘密通道發送給用戶。
(2)PKG維護一個公開列表{(IDi,Ri)}。重復執行該算法的(1)操作,用戶、代理和云可以得到各自的有效私鑰(sku,skp,sks)和(Ru,Rp,Rs)。
2.1.3 VKey(ID,sk)
當接收到返回的私鑰(ski,Ri)后,用戶通過驗證等式gski=RiXH1(IDi,Ri)是否成立從而驗證私鑰的有效性。如果有效,用戶接受;反之,用戶丟棄。
在該階段,客戶首先生成代理委托書w,該委托書包含委托人和代理人的身份及有效期等信息。客戶執行算法Wsig(sku,r,w)對該委托書簽名,得到簽名sig。之后客戶將(w,R,sig)發送給代理及云服務器。代理和云服務器收到后,通過算法Wverify(w,R,sig)驗證簽名的合法性。如果簽名合法則接受委托,否則拒絕。
2.2.1 Wsig(sku,r,w)
2.2.2 Wverify(w,R,sig)
當代理和云服務器接收到(w,R,sig)后,分別驗證gsig=R·(Ru·XH1(IDu,Ru))H1(w,R)是否成立。若等式成立,則簽名合法并接受委托,否則拒絕。
假設用戶要上傳文件F,則將文件分為n塊,通過算法MSign(sku,M)對每一個文件塊計算標簽,并輸出。用戶將所有文件塊及其塊標簽上傳到云服務器,刪除本地所有數據。
當云服務器接收到數據塊標簽對,通過執行算法Mverify(M,Tm)驗證認證元數據的合法性,輸出1表示合法,云服務器接收數據,否則拒絕。
2.3.1 MSign(sku,M)
線下階段:
(2)預計算usku,隨機選擇不同的αi∈Zq,1≤i≤β(β是可能的總文件塊數),并計算離線標簽Toffi=(H2(Wi)·uαi)sku。最后用戶將元組{(αi,Wi,Toffi)}1≤i≤β保存在本地。
線上階段:
假設用戶要上傳的文件為F=(m1,m2,…,mn),對每一個文件塊mi計算相應的塊標簽Ti。
(1)用戶從本地恢復未使用過的元組(αi,Wi,Toffi)}1≤i≤β,計算 Δmi=mi-αi,Toni=(usku)Δmi,1≤ i≤ n。
(3)輸出(mi,Ti)。
2.3.2 Mverify(M,Tm)
在本階段,挑戰由代理發起,并發送給云服務器。
(1)代理執行算法Gchal(sk)生成挑戰,然后將挑戰等
數據發送給云服務器。
(2)云服務器執行算法CVerify(chal,R,sig')驗證代理人身份與委任書是否一致。如果不一致,則拒絕,否則云服務器將執行算法GenProof(m,chal,Tm),生成證據,并發送給代理。
(3)代理執行算法 PVerify(chal,Proof),若輸出1,則認為數據是完整的;輸出0表示數據已被破壞或刪除。2.4.1 Gchal(skp)
2.4.2 CVerify(chal,R,sig')
云 服 務 器 收 到(chal,R,sig') 后, 驗 證 等 式是否成立。若成立且代理人身份與委任書一致則進行下一步操作,若不成立,則拒絕。
2.4.3 GenProof(m,chal,Tm)
(1)云服務器對每一個 j∈[1,c],計算 ij=β(k1,j),aj=f2(k2,j)。
(3)輸出證據Proof=(m,T),并發回給代理。
2.4.4 PVerify(chal,Proof)
(2)驗證等式是否成立,如果成立,表示數據可能是完整的;反之,數據一定被破壞。
從四個方面證明方案的正確性:
(1)如果用戶是誠實的,那么任何委任書簽名(W,R,sig)都可以被代理和云服務器驗證。
證明如下:

(2)如果用戶是誠實的,那么任何文件塊標簽對(mi,Ti)都可以通過云服務器的檢查,即標簽驗證階段滿足正確性。
證明如下:


(3) 如果代理是誠實的,那么代理對挑戰的簽名sig'可以通過云服務器的身份驗證。
證明如下:

(4)如果代理和云服務器都是誠實的,那么云服務器返回的證據V=(m,T)可以通過代理的數據完整性驗證。
證明如下:

因此,可以得到:

本文方案的安全性證明包括兩方面:
(1)要考慮任何其他第三方不能代替代理人驗證客戶存儲云數據的完整性;
(2)要保證云服務器不能在數據損壞的情況下騙過代理人的完整性檢查。
①方案中的三方能完成云數據的完整性檢查是由于客戶、云服務器以及代理都能夠計算得到一個相等的t值:

任何其他用戶計算出相同的t值都可以破解CDH問題,而根據CDH問題的困難性可知,敵手無法得出t值。
②本文提出的協議滿足合理性,即如果存儲的數據已被破壞或刪除,則云服務器不能通過審計過程。
證明:如果攻擊者能夠攻破合理性,那么就存在一個算法B能夠破解CDH問題。算法B可以控制預言機H1,H2,令u=gy。
假設存在一個敵手A,能夠向算法B進行哈希詢問,算法B可以控制預言機H1,H2。當云服務器輸出響應{m,T}滿足下式:

則攻擊者A可能輸出響應(m*,T*)滿足下式:

二者相除可得:
繼而可以得到:
由于Δμ=m-m*≠0,于是可得從而破解CDH問題。
本節評估本文所提方案的計算效率和通信開銷。該模擬實驗使用Windows系統,處理器為Intel(R)CoreTMi7-6500U CPU @ 2.50 GHz (4 CPUs)~2.6 GHz,主存大小為8 GB。程序語言選用C語言,密碼算法使用基于雙線性配對的密碼學(PBC)函數庫。選擇A類型橢圓曲線,系統安全參數設置為160 B。選取的測試文件大小為200 MB,每一個數據都是運行5次后取的平均值。
(1)圖2展示了用戶在模擬實驗中委任書生成階段的計算開銷。模擬實驗測試了生成與驗證[2,20]個委托書所需的計算開銷。生成兩個委托書時,用戶所需的計算時間為22 ms,代理與云服務器方面驗證委托書有效性所需的計算時間為18 ms。從圖2中可以清楚看出,用戶的計算開銷與委托書生成個數成正比,且總體所需計算開銷較少。

圖2 委任書生成簽名與驗證時間
(2)數據標簽生成階段分為離線階段和在線階段。本文提出的方案采取線上線下標簽生成方式大大減輕了客戶的計算開銷,從實驗結果可以看出,大量的計算在線下完成,而在線上,用戶只需承擔n次Zp域上的減法運算、n次G1群上的冪運算和乘法運算即可。因為用戶所承擔的開銷很大程度上取決于文件塊數,所以在實驗中,模擬測試的文件大小為固定的200 M,文件塊數在[1 000,10 000]區間時,數據擁有者在線上線下階段分別計算標簽塊所需時間,結果如圖3所示。當n=1 000時,用戶線下階段計算標簽塊需要17.251 s,線上階段需要4.004 s;當n=10 000時,用戶線下階段計算塊標簽需要145.270 s,線上階段需要33.750 s。從圖3可以清楚地看出,計算開銷與文件塊數成正比關系,線上計算的效率相比于線下計算要高約4倍以上。因此,模擬實驗結果證明了本文方案中使用的線上線下方式生成數據塊標簽是有效的。

圖3 線上線下標簽生成時間與塊數的關系
本節評估方案審計階段的效率。根據上述方案所提,在該階段,代理只需隨機選擇c個文件塊來驗證數據的完整性,c的范圍在[1,n]之間,無需驗證全部n塊文件塊。在模擬實驗中,為了測試不同挑戰塊數與審計效率的關系,固定了總數
據塊的值為5 000,c的取值范圍是[100,1 000],測試審計過程中不同挑戰塊數所花費的計算開銷。圖4展示了模擬實驗的測試結果,即挑戰塊數為[100,1 000]時審計過程所花費的計算開銷。從實驗結果可以看出,審計效率與挑戰塊數成正比,線性增長,增長速率并不高。由此可以看到本文所提方案不論是在云服務器生成所挑戰的證據階段還是第三方代理人驗證云返回的證據階段都比較高效。
在本文方案中,通信開銷主要發生在下發委托書、上傳標簽、發送挑戰請求和生成證據這4個階段。實驗中測試了n=2 000塊的文件,隨機選取c個挑戰塊產生的通信開銷。c的范圍為100~1 000。圖5展示了不同挑戰塊數下的總通信開銷。

圖4 審計階段不同挑戰塊數所需的時間

圖5 通信開銷
本文提出了一種云存儲中基于身份的代理驗證數據完整性方案。首先,該方案采用線上線下簽名思想使得用戶在線下階段只需要執行輕量級計算。其次,本文方案采用基于身份的方法減少了傳統數據完整性審計協議過程中繁瑣的證書管理開銷。最后,當用戶被限制而無法驗證數據完整性時,方案允許用戶委托第三方代理,經委托后代理可以定期檢測云中數據的完整性,并將結果反饋給用戶,使系統的可用性得到提高。