本發(fā)明涉及一種云端數(shù)據(jù)存儲完整性的證明方法。
背景技術(shù):
隨著數(shù)據(jù)爆炸和寬帶網(wǎng)絡(luò)的普及,云存儲已經(jīng)成為當(dāng)今云計算領(lǐng)域的一個重要應(yīng)用分支。目前非常流行的云存儲服務(wù)有DropBox、谷歌的Google Drive、微軟的SkyDrive,以及國內(nèi)的百度網(wǎng)盤、金山快盤、華為網(wǎng)盤等。這些云存儲服務(wù)為企業(yè)和個人提供了一個對海量數(shù)據(jù)進行安全保管和高效訪問的解決方案。越來越多的企業(yè)和個人都趨向于將自己的數(shù)據(jù)托管于云存儲服務(wù)商。云存儲具有存儲空間價格低廉、隨處存取、方便共享、容災(zāi)備份的優(yōu)點。
然而,云存儲在帶來便捷性的同時,安全性卻是隨之產(chǎn)生的一個重要問題。如果用戶存了大量數(shù)據(jù)在云服務(wù)器上,他該如何檢查數(shù)據(jù)是否丟失或者損壞。從表面上看,云存儲服務(wù)商內(nèi)部的安全防護和容災(zāi)備份等技術(shù)規(guī)避了因用戶本地數(shù)據(jù)易失性而導(dǎo)致的風(fēng)險。然而,黑客入侵、設(shè)備故障、內(nèi)部人員惡意篡改等安全威脅依然存在。對于用戶而言,云端的存儲服務(wù)器依舊是一個不完全可信的實體。
顯然,如果用戶通過下載所有托管的數(shù)據(jù)來檢驗數(shù)據(jù)的完整性,在帶寬、本地容量和效率方面都是不現(xiàn)實的。更何況,對于多媒體、數(shù)據(jù)庫等一些大型的二進制文件,用戶更加不可能通過打開文件查看的簡單方式檢驗文件的完整性。因此,云存儲服務(wù)商必須通過一種高效的方法來向用戶提供數(shù)據(jù)完整性的證明。
可證明數(shù)據(jù)持有技術(shù)的思想源自遠程數(shù)據(jù)的完整性檢查。2007年10月,Ateniese等人首次定義了可證明數(shù)據(jù)持有(PDP)的概念。方案中有用戶和服務(wù)商兩個角色,用戶可對存儲在不可信的服務(wù)商上的文件進行完整性校驗。用戶對文件進行預(yù)處理,將文件劃分成塊,為每個數(shù)據(jù)塊生成一個同態(tài)可驗證標(biāo)簽;驗證時用戶隨機選擇一些文件塊,要求服務(wù)器返回完整地持有這些塊的證據(jù);服務(wù)器根據(jù)被請求的塊和他們的標(biāo)簽生成證明;用戶根據(jù)私鑰校驗證明是否準(zhǔn)確。由于校驗時只是抽樣檢查了某些文件塊,且他們的標(biāo)簽具有同態(tài)性可以相互疊加,用戶和服務(wù)器之間的交互信息近似為一個常量,校驗時雙方的計算量也較小,且允許進行無限次的校驗。這個方案基于公鑰密碼技術(shù),文件預(yù)處理過程和驗證過程的計算開銷比較大。
2008年,Ateniese提出了基于對稱密碼技術(shù)的擴展PDP方案,在初始化時設(shè)定挑戰(zhàn)的內(nèi)容和次數(shù),將響應(yīng)作為元數(shù)據(jù)放在客戶端,能實現(xiàn)文件塊的修改、刪除和追加。但它的挑戰(zhàn)和更新次數(shù)都是受初始化值限制的,而且不支持公開驗證。C.Erway等人提出了動態(tài)可證明數(shù)據(jù)持有(DPDP)方案。他們在PDP方案的基礎(chǔ)上引進一個基于層次的表,用于組織文件塊,使其能實現(xiàn)以塊為單位的新增、修改和刪除,能有效的用于文件存儲系統(tǒng)、數(shù)據(jù)庫系統(tǒng)和點對點存儲系統(tǒng)。DPDP方案在校驗和更新的過程中都需要訪問層次表以確定具體的某個文件塊,服務(wù)器返回的證明值中也包含訪問路徑信息,所以它的計算復(fù)雜度和通信復(fù)雜度都比較高。
綜上所述,現(xiàn)有方案存在下面兩個缺陷:
(1)目前基于公鑰密碼技術(shù)的遠程數(shù)據(jù)完整性驗證方法中,用戶對文件進行預(yù)處理和后期驗證過程中的計算開銷比較大,不適合在輕量級設(shè)備中的使用。
(2)目前基于對稱密碼技術(shù)的遠程數(shù)據(jù)完整性驗證方法中,文件標(biāo)簽較大,原始數(shù)據(jù)膨脹率高。在動態(tài)方案中,計算開銷和通信開銷都比較大。
技術(shù)實現(xiàn)要素:
為了克服現(xiàn)有技術(shù)的上述缺點,本發(fā)明提供了一種云端數(shù)據(jù)存儲完整性的證明方法。
本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案是:一種云端數(shù)據(jù)存儲完整性的證明方法,包括如下步驟:
步驟一、用戶對待上傳的文件進行預(yù)處理:生成私鑰、對文件分塊并計算每個文件塊的標(biāo)簽;
步驟二、用戶將預(yù)處理后的文件發(fā)送給云存儲服務(wù)器,本地只保存私鑰;
步驟三、當(dāng)需要驗證云端數(shù)據(jù)存儲的完整性時,用戶隨機選取一些文件塊并向云端發(fā)起挑戰(zhàn);
步驟四、云端生成擁有文件塊的證明并返回給用戶;
步驟五、用戶對云端擁有文件塊的證明進行云端數(shù)據(jù)完整性驗證。
與現(xiàn)有技術(shù)相比,本發(fā)明的積極效果是:針對用戶上傳到云存儲服務(wù)器上的數(shù)據(jù)存在被刪除和篡改的問題,本發(fā)明提出了一種基于偽隨機函數(shù)和偽隨機置換函數(shù)的云端數(shù)據(jù)存儲完整性的證明方法,以驗證用戶數(shù)據(jù)在云端的安全性。該方法利用二進制數(shù)據(jù)按位抽取運算的加法同態(tài)性,可以一次性驗證多個文件塊的完整性,并且該方法具有數(shù)據(jù)膨脹率低和計算復(fù)雜度低的特點。具體表現(xiàn)如下:
1、數(shù)據(jù)初始化計算復(fù)雜度低,處理速度快;
2、文件塊標(biāo)簽小,數(shù)據(jù)膨脹率低;
3、可以同時驗證多個文件塊的完整性。
具體實施方式
本專利提出的云端數(shù)據(jù)完整性證明方法的核心思想為:用戶將待上傳的文件分塊,并基于帶參數(shù)的偽隨機函數(shù)和偽隨機置換函數(shù)生成文件塊標(biāo)簽,然后將文件塊、文件塊對應(yīng)的標(biāo)簽和用對稱密碼加密后的參數(shù)上傳到云存儲服務(wù)器,用戶端只保存對稱密鑰。當(dāng)需要驗證云端數(shù)據(jù)存儲的完整性時,用戶隨機選取一些文件塊并向云端發(fā)起挑戰(zhàn),云端將這些文件塊和對應(yīng)的標(biāo)簽進行聚合,將聚合文件、聚合標(biāo)簽和加密后的參數(shù)返回給用戶。用戶利用二進制數(shù)據(jù)按位抽取運算的加法同態(tài)性來驗證文件塊的完整性。
整個方法包含兩個階段:文件預(yù)處理階段、客戶端與云存儲服務(wù)器的“挑戰(zhàn)--響應(yīng)”階段。文件預(yù)處理階段為用戶將待上傳的文件進行預(yù)處理,然后將處理后的文件上傳到云存儲服務(wù)器?!疤魬?zhàn)—響應(yīng)”階段為用戶想要驗證云端數(shù)據(jù)完整性時,隨機選取一些文件塊向云存儲服務(wù)器發(fā)起挑戰(zhàn),云存儲服務(wù)器生成擁有這些文件塊的證明,用戶驗證這些證明以確認(rèn)云端數(shù)據(jù)的完整性。
(1)文件預(yù)處理階段
文件預(yù)處理階段包括兩個算法:密鑰生成算法(KeyGen)和文件塊標(biāo)簽生成算法(TagBlock)。
1)KeyGen(1k)→sk:利用隨機數(shù)生成器,產(chǎn)生兩個長度為k的隨機數(shù)分別作為對稱密碼加密密鑰kenc和哈希函數(shù)的密鑰kmac,其中 k為安全參數(shù)。用戶的私鑰為sk=(kenc,kmac)。
2)TagBlock(sk,M)→M*:將文件M分割為s塊{M1,M2,…,Ms},每塊大小為n bit(n=[M的大小/s],如果文件塊的大小不是n的倍數(shù),則在文件后面用0填充)。利用隨機數(shù)生成器,產(chǎn)生一個隨機數(shù)kext作為偽隨機置換函數(shù)π的參數(shù)。令:
其中π(·)為的帶參數(shù)的隨機置換函數(shù),l為每個文件塊抽取的比特數(shù)。每個文件塊抽取{i1,i2,…,il}對應(yīng)位置的比特,設(shè)抽取后的結(jié)果為{m1,m2,…,ms},記為mi=Extract(Mi),1≤i≤s。利用隨機數(shù)生成器,產(chǎn)生一個隨機數(shù)kp?f作為偽隨機函數(shù)f的參數(shù)。按如下公式計算每個文件塊的標(biāo)簽:
其中為按位異或運算,為帶參數(shù)的、輸出為l比特的偽隨機函數(shù)。令文件M的標(biāo)簽為
其中是密鑰為kenc的對稱加密算法,是密鑰為kmac的哈希函數(shù)。文件M處理后的結(jié)果為M*={{M1,…,Ms},{σ1,…,σs},τ},用戶將M*上傳到云存儲服務(wù)器,本地只保存私鑰 sk=(kenc,kmac)。
(2)“挑戰(zhàn)--響應(yīng)”階段
該階段包括兩個算法:證明生成算法(GenProof)和驗證證明算法(CheckProof)。
1)GenProof(M*,I)→v:用戶隨機選擇[1,s]的一個子集I,發(fā)送給云存儲服務(wù)器作為挑戰(zhàn)。服務(wù)器計算聚合認(rèn)證碼σ和聚合消息
然后將擁有I對應(yīng)文件塊的證明發(fā)送給用戶。
2)CheckProof(sk,v)→{0,1}:首先,用戶利用私鑰sk中的kmac驗證文件標(biāo)簽τ,如果不滿足則驗證失敗返回0。否則,用戶利用私鑰sk中的kenc解密出偽隨機置換函數(shù)π和偽隨機函數(shù)f的參數(shù)kext和kprf。
用戶按公式(1)計算出{i1,i2,…,il},抽取中{i1,i2,…,il}位置對應(yīng)的比特,設(shè)抽取后的結(jié)果為記為用戶驗證服務(wù)器擁有I對應(yīng)文件塊并返回1當(dāng)且僅當(dāng)
用戶通過多次的挑戰(zhàn),可以以接近于1的概率確認(rèn)云存儲服務(wù)器完整的存儲了文件M。
(3)方案協(xié)議設(shè)計
在對文件M進行預(yù)處理之前,用戶已生成私鑰sk=(kenc,kmac),保存在客戶端??蛻舳藫碛须S機數(shù)生成器,用于產(chǎn)生算法中需要的隨機數(shù)。本發(fā)明提出的云端數(shù)據(jù)存儲完整性的證明協(xié)議步驟如下:
1)對于待上傳的文件M,用戶按照算法TagBlock(sk,M)對M進行預(yù)處理,處理后的結(jié)果為M*;
2)用戶將處理后的文件M*發(fā)送給云存儲服務(wù)器,本地只保存私鑰sk;
3)用戶任意選取[1,s]的一個子集I,發(fā)送給云存儲服務(wù)器作為挑戰(zhàn),請求云存儲服務(wù)器返回?fù)碛蠭對應(yīng)文件塊的證明;
4)云存儲服務(wù)器按照證明生成算法GenProof(M*,I)生成I對應(yīng)的聚合消息和聚合認(rèn)證碼σ。
5)云存儲服務(wù)器將文件標(biāo)簽τ,I對應(yīng)的聚合消息和聚合認(rèn)證碼σ發(fā)送給用戶。
6)用戶利用云存儲服務(wù)器返回的按照算法CheckProof(sk,v)驗證云存儲服務(wù)器是否擁有I對應(yīng)的文件塊。如果返回1,則云存儲服務(wù)器完整的存儲了I對應(yīng)的文件塊。