如何加密面向重復(fù)數(shù)據(jù)消除的備份數(shù)據(jù)

重復(fù)數(shù)據(jù)消除技術(shù)是一種提高數(shù)據(jù)中心存儲(chǔ)空間利用率和減小遠(yuǎn)程備份時(shí)帶寬占用的有效手段,但由于用戶密鑰選擇不一致和加密算法的雪崩效應(yīng),以文件為單位的傳統(tǒng)加密方法所得到的加密文件,其重復(fù)數(shù)據(jù)消除效果很差。為解決保證數(shù)據(jù)機(jī)密性與提高重復(fù)數(shù)據(jù)消除率之間的矛盾,提出了一種面向重復(fù)數(shù)據(jù)消除的備份數(shù)據(jù)加密方法。

一、傳統(tǒng)加密與重復(fù)數(shù)據(jù)消除放入矛盾

對(duì)以文件為單位的傳統(tǒng)加密方法給重復(fù)數(shù)據(jù)消除帶來(lái)的問(wèn)題。

1)多個(gè)用戶各自選用不同的對(duì)稱密鑰加密自己的文件,加密時(shí)直接以整個(gè)文件作為加密單位,并將加密后的文件分塊后,提交給數(shù)據(jù)中心存儲(chǔ);

2)加密文件的分塊方法采用固定長(zhǎng)度分塊,設(shè)每個(gè)分塊的長(zhǎng)度為2位,則分塊共有2↓=m種取值;

3)加密后的數(shù)據(jù)是隨機(jī)均勻分布的;

4)設(shè)每個(gè)分塊的物理大小為C字節(jié),則分塊的邏輯大小為qC字節(jié),其中g(shù)代表該分塊被g個(gè)文件所包含;

5)數(shù)據(jù)中心的物理存儲(chǔ)量是指其所存儲(chǔ)分塊的物理大小之和,而邏輯存儲(chǔ)鼉是指這些分塊的邏輯大小之和。

數(shù)據(jù)中心的物理存儲(chǔ)量和邏輯存儲(chǔ)量之所以存在差異,是因?yàn)閿?shù)據(jù)中心沒(méi)有存儲(chǔ)那些重復(fù)的分塊。換而言之,如果數(shù)據(jù)中心收到的分塊全都是不同的,則這種情況下物理存儲(chǔ)量和邏輯存儲(chǔ)量相等。

設(shè)初始時(shí)數(shù)據(jù)中心存儲(chǔ)的分塊數(shù)量為O,則數(shù)據(jù)中心收到的第1個(gè)分塊一定會(huì)被存儲(chǔ),此時(shí)物理存儲(chǔ)量和邏輯存儲(chǔ)量相等,都為C字節(jié)。由于加密后的數(shù)據(jù)是隨機(jī)均勻分布的,故數(shù)據(jù)中心收到的第2個(gè)分塊與第1個(gè)分塊不相同的概率(即第2個(gè)分塊被存儲(chǔ)的概率)是l-1/m。設(shè)數(shù)據(jù)中心收到了k個(gè)分塊后(此時(shí)邏輯存儲(chǔ)量L=kC字節(jié)),其物理存儲(chǔ)量為Sk字節(jié)。因此,當(dāng)數(shù)據(jù)中心收到了k一1個(gè)分塊后,其物理存儲(chǔ)量為Sk-I字節(jié),此時(shí)數(shù)據(jù)中心實(shí)際存儲(chǔ)的分塊數(shù)量為SL-I/C。數(shù)據(jù)中心收到的第七個(gè)分塊與前面這Sk-1/C個(gè)分塊均不相同的概率(即第七個(gè)分塊被存儲(chǔ)的概率)是l-Sk-1/(mC),當(dāng)k>m時(shí),Sk≈mC,Lk=kC,sk=《Lk,物理存儲(chǔ)量遠(yuǎn)小于邏輯存儲(chǔ)最,換而言之,當(dāng)以文件為單位加 密時(shí),必須滿足k>m才能獲得理想的重復(fù)數(shù)據(jù)消除效果。由于m與分塊長(zhǎng)度j成指數(shù)關(guān)系,故m通常非常大,例如當(dāng)分塊大小為8 KB時(shí),l=216= 65536,m=255362×1097280如果為了減小m而把分塊大小設(shè)定得很小,又會(huì)大大增加分塊數(shù)量,從而大幅度增加分塊的元數(shù)據(jù)存儲(chǔ)開(kāi)銷和查詢的時(shí)間開(kāi)銷。因此,在實(shí)際應(yīng)用中,k《m。而當(dāng)k<m時(shí),Sk≈kC,lk=kC,sk=lk,物理存儲(chǔ)量與邏輯存儲(chǔ)量近似相等,重復(fù)數(shù)據(jù)消除幾乎沒(méi)有效果。

通過(guò)以上分析可以看出,由于加密后的數(shù)據(jù)可以近似看做密文空間上的隨機(jī)數(shù)據(jù),因此如果以文件為單位進(jìn)行加密,再對(duì)加密后的文件進(jìn)行重復(fù)數(shù)據(jù)消除,效果是非常差的。

二、面向重復(fù)數(shù)據(jù)消除的數(shù)據(jù)加密方法

1、DODEM的參與方

面向重復(fù)數(shù)據(jù)消除的備份數(shù)據(jù)加密方法( DODEM)總共有三個(gè)參與方:用戶、元數(shù)據(jù)服務(wù)器和分塊存儲(chǔ)服務(wù)器。

(1)用戶

用戶使用某種一定的分塊方法對(duì)自己某一版本的備份文件進(jìn)行分塊(分塊記為Chunhi),并對(duì)每一分塊用AES128對(duì)稱加密算法進(jìn)行加密,密鑰K為Chunki內(nèi)容的SHA-I哈希值的低128位。該加密過(guò)程記為:

KSL=Lmvt28(SHAI(Chunk*,))

Chunkk=AES128(Chunhip,Ks,)

上式中Chunk*代表明文分塊,Chunk"代表密文分塊。

由于加密密鑰取決于分塊的內(nèi)容,因此兩個(gè)分塊只要內(nèi)容相同,即使由不同的用戶加密,也會(huì)得到相同的密文分塊。

(2)元數(shù)據(jù)服務(wù)器

元數(shù)據(jù)服務(wù)器維護(hù)分塊映射表(ChunkMap),該表用于將文件ID( FileID,是系統(tǒng)中備份文件的唯一標(biāo)識(shí)符,通過(guò)計(jì)算文件名的SHA-I哈希值得到)映射為其對(duì)應(yīng)的分塊列表(ChurikLi8t,簡(jiǎn)記為CL)。CL中存儲(chǔ)了文件所包含的各分塊的ID( ChunkID)、在文件中的序號(hào)和分塊對(duì)稱密鑰Ks。借助這些信息,元數(shù)據(jù)服務(wù)器可以協(xié)助授權(quán)用戶解密備份文件。此外,元數(shù)據(jù)服務(wù)器上還維護(hù)了一個(gè)哈希表Ha8hc,該表中保存了備份系統(tǒng)中已存儲(chǔ)的分塊的ChunkID(由于ChunkID是分塊密文的SHA-I哈希值,因此Hashc實(shí)際上是分塊內(nèi)容的哈希表)。通過(guò)查詢Hashc,元數(shù)據(jù)服務(wù)器可以檢測(cè)出新寫(xiě)入文件中內(nèi)容重復(fù)的分塊。

因?yàn)镃bunklJist中有解密備份文件所需的信息(即該文件對(duì)應(yīng)的所有分塊的密鑰),為了保護(hù)其不被非授權(quán)用戶讀取,元數(shù)據(jù)服務(wù)器進(jìn)行如下處理:

1)對(duì)給定的備份文件i,為其生成一個(gè)對(duì)稱密鑰Ku,并用它加密該文件的分塊列表ChunkLkri,記為AES128( CLi,kli);

2)用磁認(rèn)加密算法加密Ku,加密密鑰是授權(quán)用戶k的公鑰ku-kpub,即RSA( KLi,Kpub);

3)將該用戶的ID(UIDh)和用該用戶公鑰加密后的kli鏈接在加密后的ChunkList;后面,得到的結(jié)果記為AESI128(CLi,Ku)lIUIDk||RSA(Ku,KUUd);

4)繼續(xù)鏈接其他授權(quán)用戶的ID和用其公鑰加密的kli,直到文件i的全部授權(quán)用戶列表(UListi)添加完畢。

當(dāng)需要為備份文件i新增一個(gè)授權(quán)用戶時(shí),只需將該用戶的ID和用其公鑰加密的瓦鏈接在原來(lái)用戶列表的后面即可;但如果需要?jiǎng)h除一個(gè)授權(quán)用戶時(shí),則需要生成一個(gè)新的對(duì)稱密鑰kli*,并用該密鑰重新進(jìn)行上面1)—4)加密過(guò)程。由于ChurzkLkt。存儲(chǔ)的僅僅是與分塊相關(guān)的一些元數(shù)據(jù),故ChunkList,相對(duì)于整個(gè)文件而言是非常小的。例如當(dāng)文件i:大小為lGB,分塊大小為8 KB時(shí),ChurzkLkt的大小僅為5MB左右,因此用新生成的對(duì)稱密鑰E加密的是僅僅是大小為5 MB的ChunkList,而不是整個(gè)文件。并且無(wú)論該文件有多少授權(quán)用戶,都只需用新對(duì)稱密鑰磁加密ChunhList一次,而各授權(quán)用戶公鑰加密的也僅僅是大小為128b的新對(duì)稱密鑰Kli*。由此可見(jiàn),更換對(duì)稱密鑰磁所需的加密計(jì)算開(kāi)銷并不大。

通過(guò)這種方式加密后,要訪問(wèn)和解密備份文件i,需要用Kli解密ChurzkLkt。對(duì)所有授權(quán)用戶而言,可以獲得用自己公鑰加密的Kui,因此可以用自己的私鑰解密得到Kui,從而得到ChunkListi。而對(duì)非授權(quán)用戶而言,因?yàn)闊o(wú)法獲取Chunksti,故不能獲知文件i是由哪些Chunk組成的,即連文件f的密文都無(wú)法準(zhǔn)確獲取,要解密文件i就更困難了。

(3)分塊存儲(chǔ)服務(wù)器

分塊存儲(chǔ)服務(wù)器用于存儲(chǔ)經(jīng)過(guò)重復(fù)數(shù)據(jù)消除后的分塊,內(nèi)容相同的分塊只存儲(chǔ)一份實(shí)例,因此可以大幅度減小備份數(shù)據(jù)的物理存儲(chǔ)開(kāi)銷。

用分塊密文的SHA-1哈希值作為分塊的ChunkID,它是分塊的唯一標(biāo)識(shí)符,長(zhǎng)度為160b。ChunkID可以由用戶提供或由分塊存儲(chǔ)服務(wù)器自行計(jì)算,取決于在具體應(yīng)用中減少網(wǎng)絡(luò)數(shù)據(jù)傳輸量更重要還是減小服務(wù)器端計(jì)算負(fù)載更重要。分塊存儲(chǔ)服務(wù)器的主要工作是存儲(chǔ)用戶提交的密文分塊或根據(jù)用戶提交的ChunkID讀取對(duì)應(yīng)的分塊,它不存儲(chǔ)與分塊解密相關(guān)的信息,也不關(guān)心這些分塊屬于哪個(gè)文件。

2、基于DODEM的備份文件讀寫(xiě)協(xié)議

假設(shè)基于DODEM的備份系統(tǒng)已具備了以下基礎(chǔ)條件:

1)每個(gè)用戶擁有密鑰對(duì)(公鑰Ku-pub和私鑰Ku_prt);

2)有合適的密鑰管理技術(shù)(例如公鑰基礎(chǔ)設(shè)施(PublicKey Infrastructure,PKI))來(lái)保證公鑰的可信分發(fā);

3)元數(shù)據(jù)服務(wù)器能夠生成密碼學(xué)意義上可靠的對(duì)稱加密密鑰(用于加密ChunkList)。

(1)備份文件讀協(xié)議

用戶k讀取備份文件i的主要過(guò)程如下:

1)用戶k向元數(shù)據(jù)服務(wù)器發(fā)出讀請(qǐng)求RequestR,并同時(shí)提交自己的UID,和口令,供服務(wù)器進(jìn)行身份識(shí)別;

2)身份識(shí)別通過(guò)后,用戶七將自己要讀取的備份文件l的FileID.發(fā)送給元數(shù)據(jù)服務(wù)器;

3)元數(shù)據(jù)服務(wù)器將用對(duì)稱密鑰Kr加密的文件i的ChunhLrst,以及使用用戶詹的公鑰Kuk_pub加密的如一起發(fā)送給用戶k;

4)用戶k收到加密元數(shù)據(jù)后,先用自己的私鑰Kuk-pri解密Kli,然后再用黽解密Chu覷偽ti,有了ChunhLrsti,用戶k就知道了文件i所包含分塊的ChunkID、分塊對(duì)稱密鑰Ks和這些分塊在文件i中的順序;

5)用戶k向分塊存儲(chǔ)服務(wù)器發(fā)出讀請(qǐng)求,并同時(shí)提交身份識(shí)別信息;

6)身份識(shí)別通過(guò)后,用戶k將文件i的各個(gè)分塊的ChunkID發(fā)送給分塊存儲(chǔ)服務(wù)器,發(fā)送時(shí)隨機(jī)打亂各分塊在文件i中的原有順序;

7)分塊存儲(chǔ)服務(wù)器根據(jù)ChunkID讀取對(duì)應(yīng)的密文分塊,并發(fā)送給用戶k;

8)用戶k收到密文分塊后,用對(duì)應(yīng)的分塊對(duì)稱密鑰Ks解密并將明文分塊重新排序,得到文件i。

(2)備份文件寫(xiě)協(xié)議

用戶k寫(xiě)入備份文件j的主要過(guò)程如下:

l)用戶k向元數(shù)據(jù)服務(wù)器發(fā)出寫(xiě)請(qǐng)求Requestr,并同時(shí)提交自己的UIDk和口令,供服務(wù)器進(jìn)行身份識(shí)別;

2)身份識(shí)別通過(guò)后,元數(shù)據(jù)服務(wù)器生成一個(gè)對(duì)稱密鑰Ku,并使用用戶k的公鑰Kmun加密后返回給用戶k;

3)用戶艮用自己的私鑰KUk_pri解密,得到如,并將文件j的ChunhLrst,用klj加密后發(fā)送給元數(shù)據(jù)服務(wù)器;

4)元數(shù)據(jù)服務(wù)器用毛解密,得到ChunkListj,然后查詢Hashc。判斷文件i的所有分塊中哪些是系統(tǒng)中還沒(méi)有存儲(chǔ)的新分塊,對(duì)這些新分塊,先將其ChunkID添加到Hashc中,然后生成一個(gè)NewChunkLi_sti(簡(jiǎn)記為NewCLj)。并將其用Ku加密后發(fā)送給用戶k;

5)用戶k用Kli解密,得到NewChunkListj;

6)用戶k向分塊存儲(chǔ)服務(wù)器發(fā)出寫(xiě)請(qǐng)求,并同時(shí)提交身份識(shí)別信息;

7)身份識(shí)別通過(guò)后,用戶k將文件j的新分塊加密后發(fā)送給分塊存儲(chǔ)服務(wù)器,發(fā)送時(shí)打亂各分塊在文件j中的原有順序;

8)分塊存儲(chǔ)服務(wù)器收到新密文分塊后,計(jì)算其ChunkID,并存儲(chǔ)ChunkID和新密文分塊。

結(jié)果表明,采用了DODEM和重復(fù)數(shù)據(jù)消除技術(shù)的備份系統(tǒng),相對(duì)于采用傳統(tǒng)加密方法的系統(tǒng),吞吐量略有下降,而備份數(shù)據(jù)的物理存儲(chǔ)開(kāi)銷顯著降低。DODEM可以保護(hù)備份數(shù)據(jù)存儲(chǔ)和傳輸過(guò)程中的機(jī)密性,適用于對(duì)數(shù)據(jù)機(jī)密性有一定要求的海量數(shù)據(jù)備份應(yīng)用。

小知識(shí)之雪崩效應(yīng)

雪崩效應(yīng)指加密算法(尤其是塊密碼和加密散列函數(shù))的一種理想屬性。雪崩效應(yīng)是指當(dāng)輸入發(fā)生最微小的改變(例如,反轉(zhuǎn)一個(gè)二進(jìn)制位)時(shí),也會(huì)導(dǎo)致輸出的劇變(如,輸出中一半的二進(jìn)制位發(fā)生反轉(zhuǎn))。在高品質(zhì)的塊密碼中,無(wú)論密鑰或明文的任何細(xì)微變化都應(yīng)當(dāng)引起密文的劇烈改變。