王家玲
云存儲(chǔ)是云計(jì)算技術(shù)[1]的一個(gè)延伸,可以認(rèn)為它是一個(gè)配備了海量存儲(chǔ)空間的云計(jì)算系統(tǒng)。但是,由于云存儲(chǔ)系統(tǒng)規(guī)模巨大,集中了諸多用戶的應(yīng)用和隱私數(shù)據(jù),同時(shí)云存儲(chǔ)具有前所未有的開放性和復(fù)雜性,其安全性面臨著比傳統(tǒng)信息存儲(chǔ)更為嚴(yán)峻的挑戰(zhàn)[2]。因此,設(shè)計(jì)安全可信的云存儲(chǔ)方案具有重要的實(shí)踐意義。
本方案利用遞歸的門限秘密共享方案,實(shí)現(xiàn)數(shù)據(jù)資源的拆分和冗余存儲(chǔ)。方案不僅能有效保證云存儲(chǔ)數(shù)據(jù)的機(jī)密性,還能實(shí)現(xiàn)數(shù)據(jù)的冗余存儲(chǔ),且方案的存儲(chǔ)開銷較傳統(tǒng)的完全冗余存儲(chǔ)以及基于Shamir(k,n)秘密共享存儲(chǔ)存儲(chǔ)降低了很多,大大節(jié)約了存儲(chǔ)空間。
云存儲(chǔ)的安全問題主要集中在數(shù)據(jù)的機(jī)密性和完整性。就機(jī)密性而言,加密技術(shù)是保護(hù)數(shù)據(jù)機(jī)密性的一種較為有效的手段。在數(shù)據(jù)被存儲(chǔ)到云端之前,我們可以對(duì)數(shù)據(jù)進(jìn)行加密,這樣云服務(wù)商和攻擊者都無法獲得數(shù)據(jù)的明文內(nèi)容。用戶可以通過密文檢索技術(shù)來訪問數(shù)據(jù)。但是這種方法多用于靜態(tài)數(shù)據(jù)云存儲(chǔ)的場(chǎng)景,不適合數(shù)字資源不斷動(dòng)態(tài)更新的場(chǎng)景。
就完整性而言,對(duì)于用戶來說,由于不存儲(chǔ)數(shù)據(jù)的備份,因此,能夠確保數(shù)據(jù)在云端服務(wù)器上的完整性至關(guān)重要。數(shù)據(jù)冗余存儲(chǔ)是目前來說比較有效的手段。目前,主要的冗余方法有兩種:完全副本冗余和糾錯(cuò)碼冗余。完全副本冗余是指保存多份數(shù)據(jù)的完整副本,只要還有一個(gè)副本可以訪問,數(shù)據(jù)就不會(huì)丟失。侯孟書等[3]為被頻繁訪問的數(shù)據(jù)增加副本數(shù)量,并選擇高性能存儲(chǔ)節(jié)點(diǎn)存放,從而提高數(shù)據(jù)的可用性。完全副本冗余雖然簡(jiǎn)單、直觀,但是有存儲(chǔ)空間消耗大,處理大文件時(shí)性能差等缺點(diǎn)。
糾錯(cuò)碼是指將存儲(chǔ)的數(shù)據(jù)先切分為m個(gè)部分,然后編碼變換成n(n>m)個(gè)部分,恢復(fù)數(shù)據(jù)時(shí)只要得到其中任意t(t≥m)個(gè)部分即可。目前,大多數(shù)云存儲(chǔ)模型中使用糾刪碼算法將數(shù)據(jù)分割來提高數(shù)據(jù)的冗余性。Weatherspoon等[4]采用隨機(jī)過程的方法,量化分析了完全副本冗余和糾錯(cuò)碼對(duì)系統(tǒng)可靠性的影響,發(fā)現(xiàn)使用糾錯(cuò)碼冗余,可以在與副本冗余得到相同可靠性的條件下,極大地節(jié)約系統(tǒng)中的存儲(chǔ)空間和維護(hù)帶寬。不過該算法得到的數(shù)據(jù)都是以明文形式顯示的,因此數(shù)據(jù)的機(jī)密性無法保證。
為保證數(shù)據(jù)的機(jī)密性和冗余性,一些云存儲(chǔ)模型使用門限秘密共享算法實(shí)現(xiàn)云存儲(chǔ)。(k,n)門限秘密共享方案是把一個(gè)數(shù)據(jù)分成n個(gè)秘密份額分給n個(gè)參與者掌管,這些參與者中k個(gè)或k個(gè)以上的參與者所構(gòu)成的子集可以合作重構(gòu)這個(gè)秘密。研究者們利用多種數(shù)學(xué)模型構(gòu)建了多種門限秘密共享方案[5]~[9],這些方案不僅能保證數(shù)據(jù)的冗余存儲(chǔ),還能提供機(jī)密性的保證。但是該算法會(huì)帶來存儲(chǔ)空間的劇增,造成用戶成本的增加。
為此,本文提出一個(gè)既能保證數(shù)據(jù)冗余存儲(chǔ)又能提供數(shù)據(jù)機(jī)密性的可靠云存儲(chǔ)方案,該方案采用基于遞歸的秘密共享算法將數(shù)據(jù)進(jìn)行分割,分割后每個(gè)數(shù)據(jù)塊的大小比源數(shù)據(jù)小很多,不會(huì)帶來存儲(chǔ)空間的劇增。方案的安全性由需存儲(chǔ)的數(shù)據(jù)塊的大小決定,數(shù)據(jù)越大,安全性越高,故適合海量數(shù)據(jù)的云存儲(chǔ)情況。
方案的基本思想是基于遞歸的(k,n)門限秘密共享方案[10],將數(shù)字資源S分割轉(zhuǎn)換成n個(gè)數(shù)據(jù)塊,分別保存在云存儲(chǔ)系統(tǒng)的多個(gè)服務(wù)器上,至少k個(gè)完整數(shù)據(jù)分塊組合可以恢復(fù)原來的數(shù)據(jù),任意k-1個(gè)或更少完整數(shù)據(jù)塊不能重構(gòu)S,且不能獲得有關(guān)S的任何信息。數(shù)據(jù)塊完整性的判斷,通過數(shù)據(jù)完整性檢測(cè)算法實(shí)現(xiàn)。這不但實(shí)現(xiàn)了數(shù)據(jù)的冗余存儲(chǔ),只要服務(wù)器上至少有k個(gè)數(shù)據(jù)塊沒被損壞,就能恢復(fù)出原來的數(shù)據(jù);又保證了數(shù)據(jù)的機(jī)密性,攻擊者只有攻破至少k個(gè)數(shù)據(jù)塊才能恢復(fù)數(shù)據(jù)S,否則不能獲得有關(guān)S的任何信息。
數(shù)字資源云存儲(chǔ)過程如下:若數(shù)字資源S能平均分塊,則將S平均分割成k個(gè)大小相同的數(shù)據(jù)塊S1,S2,…,Sk;若S長(zhǎng)度不能被平均分塊,則先將S分成長(zhǎng)度為的k-1個(gè)數(shù)據(jù)塊,最后一個(gè)長(zhǎng)度小于的數(shù)據(jù)塊,可通過數(shù)據(jù)前方補(bǔ)零的方法使其與前面k-1個(gè)數(shù)據(jù)塊長(zhǎng)度相等,故通過數(shù)據(jù)前方補(bǔ)零的方法可使S平均分割。因此,為了不再贅述,可假設(shè)文后的數(shù)字資源長(zhǎng)度均能被平均分塊。數(shù)字資源持有者隨機(jī)選擇一個(gè)數(shù)據(jù)a,與S1,S2,…,Sk一起作為RSS分發(fā)算法(遞歸秘密共享算法的分發(fā)階段)的輸入,通過該算法轉(zhuǎn)換輸出n個(gè)數(shù)據(jù)大小相同的數(shù)據(jù)塊D1,D2,…,Dn,然后再將各數(shù)據(jù)塊劃分成m個(gè)數(shù)據(jù)塊并生成其簽名,將數(shù)據(jù)分別發(fā)送存儲(chǔ)到云端的多個(gè)服務(wù)器上,用戶隨時(shí)通過數(shù)據(jù)完整性檢測(cè)算法檢測(cè)云服務(wù)器上數(shù)據(jù)的完整性,若想恢復(fù)數(shù)據(jù)S,只需在云存儲(chǔ)服務(wù)器上下載任意k個(gè)無損壞的數(shù)據(jù)塊,利用RSS重構(gòu)算法(遞歸秘密共享算法數(shù)據(jù)重構(gòu)階段),即可獲得S1,S2,…,Sk,從而得到原始數(shù)據(jù)S。方案框架如圖1所示。
圖1 方案框架圖
本方案假設(shè)云存儲(chǔ)商是半可信的,即云服務(wù)商不會(huì)主動(dòng)泄露和破壞用戶存儲(chǔ)的數(shù)據(jù),但是不能完全保證因?yàn)闄C(jī)器故障或黑客攻擊導(dǎo)致數(shù)據(jù)的泄露與破壞。本方案是遞歸的采用Shamir的(k,n)門限秘密共享算法,對(duì)各數(shù)據(jù)塊進(jìn)行自加密以保證數(shù)據(jù)的機(jī)密性和冗余存儲(chǔ)。
令p是大素?cái)?shù),滿足p>max(Smax,n),其中Smax=max(Si)(1≤i≤(k-1))。數(shù)字資源記為S,被平均劃分成大小相等的k個(gè)數(shù)據(jù)塊記為|S1|=|S2|=…=|Sk|,k為門限值。遞歸的Shamir的 (k,n)門限秘密分發(fā)算法記為RSSDeeling(S,a),其中S為原始數(shù)據(jù),a為預(yù)先生成的一個(gè)隨機(jī)數(shù)據(jù),a ZP,n為最終轉(zhuǎn)換的數(shù)據(jù)塊的個(gè)數(shù)。D1,D2,…,Dn為轉(zhuǎn)換后的數(shù)據(jù)塊,即函數(shù)RSSDeeling(S,a)的輸出。再將每個(gè)數(shù)據(jù)塊分成m個(gè)小數(shù)據(jù)塊,第i個(gè)數(shù)據(jù)塊記為Dij(1≤j≤m),它的數(shù)字簽名記為RSSProof(i,Vij)算法為數(shù)據(jù)塊Dj的完整性檢測(cè)算法,其中Vij(VijZP)是為數(shù)據(jù)塊Dij選取的隨機(jī)數(shù)。RSSRecover(N1,N2,…,Nk)為數(shù)據(jù)重構(gòu)算法,其中N1,N2,…,Nk是從云存儲(chǔ)設(shè)備上下載的任意k個(gè)完整數(shù)據(jù)塊。
整個(gè)方案分為三個(gè)過程:分發(fā)存儲(chǔ)過程、完整性檢測(cè)過程和數(shù)據(jù)重構(gòu)過程。
(1)分發(fā)存儲(chǔ)過程
a.將數(shù)字資源S切割成大小相等的k個(gè)數(shù)據(jù)塊,記為|S1|=|S2|=…=|Sk|,S={S1,S2,…,Sk};
b.選擇數(shù)據(jù)a ZP,構(gòu)造一次多項(xiàng)式f1(x)=ax+S1;
d.當(dāng) 2≤i≤(k-1)時(shí),構(gòu)建如下多項(xiàng)式:
I.當(dāng) i<(k-1)時(shí),計(jì)算 i+1 個(gè)點(diǎn):
II.當(dāng) i=k-1 時(shí),計(jì)算 n 個(gè)點(diǎn):
e.將各數(shù)據(jù)塊再平均劃分成m個(gè)小數(shù)據(jù)塊,利用數(shù)字簽名算法,生成各數(shù)據(jù)塊Dij(1≤i≤n,1≤j≤m)的簽名,其中,H是hash函數(shù),可將任意長(zhǎng)度的二進(jìn)制字符串映射為群G上的元素;μ是群G的生成元;α是用戶私鑰,V=gα是公鑰。
(2)完整性檢測(cè)過程
用戶將數(shù)據(jù)發(fā)送至云存儲(chǔ)器后,可通過可恢復(fù)性完整性驗(yàn)證算法RSSProof(j,Vij)[11][12]來檢測(cè)云存儲(chǔ)服務(wù)器上的數(shù)據(jù)的完整性,這里以其中的一個(gè)數(shù)據(jù)塊Di為例,其他數(shù)據(jù)塊方法類似,不再贅述。
a.為小數(shù)據(jù)塊Dij生成一個(gè)挑戰(zhàn)對(duì)(j,Vij),構(gòu)成挑戰(zhàn)集合
b.針對(duì)挑戰(zhàn)對(duì),云存儲(chǔ)服務(wù)方首先將其對(duì)應(yīng)數(shù)據(jù)塊平均劃分成m個(gè)小數(shù)據(jù)塊Dij,給出應(yīng)答對(duì) ,其中。
c.用戶通過判斷方程 是否成立來判斷第i個(gè)數(shù)據(jù)塊Di是否完整,該方程中的e是密碼學(xué)中的雙線性映射方程。
下面證明一下完整性檢測(cè)判斷方程能否判斷數(shù)據(jù)的完整性。
由雙線性映射的重要性質(zhì)可知,
等式左邊:
因此,若數(shù)據(jù)完整沒發(fā)生任何變化,等式成立;反之,若數(shù)據(jù)發(fā)生變化,則等式不成立。
(3)數(shù)據(jù)重構(gòu)過程
用戶根據(jù)完整性檢測(cè)結(jié)果來選擇是否要進(jìn)行數(shù)據(jù)重構(gòu)。如果服務(wù)器上的n個(gè)數(shù)據(jù)塊中,有大量數(shù)據(jù)塊被損壞,但是被損壞的數(shù)據(jù)塊個(gè)數(shù)不多于n-k個(gè),那么完整的數(shù)據(jù)塊不少于k個(gè),這時(shí),我們可以選擇使用數(shù)據(jù)重構(gòu)算法來重構(gòu)數(shù)據(jù)S。如果損壞的數(shù)據(jù)塊個(gè)數(shù)超過了n-k個(gè),則無法重構(gòu)數(shù)據(jù)。數(shù)據(jù)重構(gòu)過程如下:
a.從云存儲(chǔ)服務(wù)器上下載k個(gè)完整的數(shù)據(jù)塊(i,Di)1≤i≤k;
b.使用拉格朗日插值公式構(gòu)造多項(xiàng)式:
計(jì)算Sk-1=fk-1(0).
c.當(dāng) 2≤i≤(k-1)時(shí),
計(jì)算Si=fi(0).
由于數(shù)據(jù)在存儲(chǔ)到云端服務(wù)器之前,我們將數(shù)據(jù)進(jìn)行了分割和轉(zhuǎn)換,轉(zhuǎn)換后的數(shù)據(jù)與原數(shù)據(jù)截然不同。用戶數(shù)據(jù)文件變換后內(nèi)容與原文件相比發(fā)生了變化,對(duì)于外部攻擊者來說,獲得某個(gè)分塊并不能知曉有關(guān)原文件的任何內(nèi)容,黑客如想得到原數(shù)據(jù)的有關(guān)信息,必須要同時(shí)攻破多個(gè)服務(wù)器,至少獲得k個(gè)數(shù)據(jù)塊信息,才能通過恢復(fù)算法獲得原數(shù)據(jù)S。若攻擊者獲得少于k個(gè)數(shù)據(jù)塊的信息,將得不到有關(guān)S的任何信息。不是一般性,假設(shè)攻擊者獲得k-1個(gè)數(shù)據(jù)塊信息,相當(dāng)于已知一個(gè)k次多項(xiàng)式的k-1個(gè)點(diǎn),無法唯一確定該多項(xiàng)式。相當(dāng)于在Zp內(nèi)隨機(jī)猜測(cè)數(shù)據(jù)S,其概論為1/p。而攻擊者同時(shí)攻破多個(gè)服務(wù)器,且獲得k個(gè)相關(guān)數(shù)據(jù)塊的概率很小,顯然加大了攻擊者攻擊的難度。這就有效的保證了數(shù)據(jù)在存儲(chǔ)到云存儲(chǔ)服務(wù)器上的機(jī)密性。數(shù)據(jù)塊越大,素?cái)?shù)p要求越大,這樣猜測(cè)S的概率越小,數(shù)據(jù)安全性越高。
由于該方案是一個(gè)(k,n)門限秘密共享方案,即我們將原始數(shù)據(jù)S經(jīng)過轉(zhuǎn)換后,生成了n個(gè)分塊,而其中任意k個(gè)分塊組合,通過數(shù)據(jù)恢復(fù)算法可恢復(fù)出原數(shù)據(jù)S。如果服務(wù)器上的n個(gè)數(shù)據(jù)塊中,有大量數(shù)據(jù)塊被損壞,但是被損壞的數(shù)據(jù)塊個(gè)數(shù)不多于n-k個(gè),即完整的數(shù)據(jù)塊不少于k個(gè),這時(shí),我們可以使用數(shù)據(jù)重構(gòu)算法來重構(gòu)數(shù)據(jù)S。即該方案允許損壞的數(shù)據(jù)塊的個(gè)數(shù)最多為n-k個(gè)。如果損壞的數(shù)據(jù)塊個(gè)數(shù)超過了n-k個(gè),則無法重構(gòu)數(shù)據(jù)。
服務(wù)器端的存儲(chǔ)開銷主要由冗余機(jī)制引入,由秘密共享方案的冗余度決定。對(duì)一個(gè)數(shù)據(jù)S,令|S|表示秘密的大小,若使用經(jīng)典的Shamir(k,n)秘密共享方案,產(chǎn)生的每個(gè)數(shù)據(jù)塊大小為均|S|,若產(chǎn)生n個(gè)數(shù)據(jù)分塊,云存儲(chǔ)服務(wù)器上需存儲(chǔ)的數(shù)據(jù)大小將為n×|S|,空間效率較低。原數(shù)據(jù)S越大,空間效率將越低,不適合海量信息的存儲(chǔ)。在本方案中,采用的是基于遞歸的Shamir(k,n)秘密共享方案,首先將秘密S分為大小為的k個(gè)數(shù)據(jù)分塊,若轉(zhuǎn)換成n個(gè)數(shù)據(jù)分塊,則云存儲(chǔ)服務(wù)器上需存儲(chǔ)的數(shù)據(jù)大小將為大大節(jié)約了存儲(chǔ)空間,有很高的空間效率。故本方案中的冗余存儲(chǔ)機(jī)制盡可能地降低了云存儲(chǔ)服務(wù)器的存儲(chǔ)開銷。
隨著云存儲(chǔ)的出現(xiàn),海量的數(shù)字資源存儲(chǔ)到云端服務(wù)器成為必然趨勢(shì)。但是云存儲(chǔ)的安全問題面臨著越來越嚴(yán)峻的挑戰(zhàn)。為保證數(shù)據(jù)的保密性和冗余性,本文提出了一個(gè)高效可靠的云存儲(chǔ)方案,方案由三部分組成,即:數(shù)據(jù)分塊分發(fā)過程、數(shù)據(jù)完整性檢測(cè)過程和數(shù)據(jù)重構(gòu)過程。文章通過分析方案的機(jī)密性、冗余性和存儲(chǔ)開銷得出所提方案的優(yōu)越性。
[1]HayesB.CloudComputing[J].Communications of the ACM,2008,51(7):9-11.
[2]馮登國,張敏,張妍,等.云計(jì)算安全研究[J].軟件學(xué)報(bào),2011,22(1):71-83.
[3]侯孟書,王曉斌,盧顯良,等.一種新的動(dòng)態(tài)副本管理機(jī)制[J].計(jì)算機(jī)科學(xué),2006,33(9):50-51.
[4]Weatherspoon H,Kubiatowicz J.Erasure coding vs replication:quantitative comparison[M].In:Proc of the 1st Int'l Workshop Peer-to-Peer Systems,2002.
[5]Shamir A.How to Share a Secret[J].Communications of the ACM,1979,22(11):612-613.
[6]Blakley G.Safeguarding Cryptographic Keys[C].Proceedings of the National Computer Conference,Montvale:NCC,1979:242-268.
[7]Asmuth C.,Bloom J.A Modular Approach to Key Safeguarding[J].IEEE Transactionson Information Theory,1983,29(2):208-2I0.
[8]Karnin E.D.,Green J.W.,Hellman M.E..On Sharing Secret Systems[C].IEEE Transactions on Information Theory,1983,29(1):35-41.
[9]Feldman P.A Practical Scheme for Non-interactive Verifiable Secret Sharing[C].Proceeding of 28th IEEE symposium on Foundations of computer science,Canada:IEEE,1987.427-437.
[10]Parakh A,Kak S.Space efficient secret sharing for implicit data security[J].InformationSciences,2011,181(2):335-341.
[11]D.L.G.Filho,P.S.L.M.Barreto.Demonstrating data possession and uncheatable data transfer[R/OL].Cryptology ePrint Archive,Report 2006/150,2006.
[12]Y.Deswarte,J.-J.Quisquater.Remote Integrity Checking[C].Sixth Working Conference on Integrity and Internal Control in Information Systems.Kluwer Academic Publishers,2004.1-11.