一種適用于備份系統(tǒng)的安全數(shù)據(jù)去重方法和系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開了一種適用于備份系統(tǒng)的安全數(shù)據(jù)去重方法,包括:接收用戶提交的備份請(qǐng)求,對(duì)需要備份的每個(gè)文件進(jìn)行分塊,以得到多個(gè)不同大小的數(shù)據(jù)塊,使用哈希算法計(jì)算每個(gè)數(shù)據(jù)塊的哈希值F1來作為數(shù)據(jù)塊的加密密鑰,再次使用哈希算法計(jì)算每個(gè)數(shù)據(jù)塊哈希值F1的哈希值F2作為該數(shù)據(jù)塊的指紋來識(shí)別重復(fù)數(shù)據(jù)塊,并采用經(jīng)典加密算法使用用戶的私鑰對(duì)數(shù)據(jù)塊的哈希值F1進(jìn)行加密以得到數(shù)據(jù)哈希值F1的密文E(F1)來保護(hù)數(shù)據(jù)塊的加密密鑰。將所有數(shù)據(jù)塊指紋F2等順序打包成指紋段發(fā)送傳輸?shù)酱鎯?chǔ)服務(wù)器。本發(fā)明中所有通信過程采用安全套接層協(xié)議。本發(fā)明通過采用該安全數(shù)據(jù)去重方法,能夠保證在數(shù)據(jù)去重率不變的基礎(chǔ)上,防止數(shù)據(jù)丟失、篡改等存儲(chǔ)安全問題。
【專利說明】一種適用于備份系統(tǒng)的安全數(shù)據(jù)去重方法和系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于計(jì)算機(jī)存儲(chǔ)領(lǐng)域,更具體地,涉及一種適用于備份系統(tǒng)的安全數(shù)據(jù)去重方法和系統(tǒng)。
【背景技術(shù)】
[0002]近年來,隨著計(jì)算機(jī)技術(shù)和網(wǎng)絡(luò)的發(fā)展普及,全球的數(shù)據(jù)信息存儲(chǔ)量呈爆炸式增長(zhǎng)的趨勢(shì)。全球范圍內(nèi)個(gè)人電腦、智能手機(jī)等設(shè)備的普及,和新興市場(chǎng)內(nèi)不斷增長(zhǎng)的互聯(lián)網(wǎng)訪問量,以及監(jiān)控?cái)z像機(jī)或智能電表等設(shè)備產(chǎn)生的數(shù)據(jù)爆增,使數(shù)字宇宙的規(guī)模在最近兩年翻了一番,達(dá)到驚人的2.8ZB。IDC預(yù)計(jì),到2020年,數(shù)字宇宙規(guī)模將超出預(yù)期,達(dá)到40ZB。在線數(shù)字內(nèi)容的增長(zhǎng)導(dǎo)致了硬件、人力維護(hù)在內(nèi)的存儲(chǔ)系統(tǒng)成本的增加,減少傳輸、存儲(chǔ)管理過程中的數(shù)據(jù)量變得極其重要。在海量的數(shù)據(jù)中存在大量的重復(fù)數(shù)據(jù)和相似數(shù)據(jù),如同樣的文件為確保安全存儲(chǔ)了多份,在計(jì)算機(jī)系統(tǒng)通常存儲(chǔ)和操作同一數(shù)據(jù)的若干副本,這些冗余數(shù)據(jù)占用了大量的存儲(chǔ)空間。數(shù)據(jù)去重技術(shù)是一種通過大規(guī)模消除冗余數(shù)據(jù),降低存儲(chǔ)成本的重要技術(shù)。簡(jiǎn)單舉例說明:若有一個(gè)IOMB大小的文件,將其拷貝給100個(gè)用戶,需要使用IGB的存儲(chǔ)空間;若每周對(duì)100個(gè)用戶的數(shù)據(jù)進(jìn)行備份,則每周需要額外增加IGB的存儲(chǔ)空間;一年之后,總共需要浪費(fèi)52GB的存儲(chǔ)空間;而進(jìn)行數(shù)據(jù)去重之后,僅需要IOMB大小的空間即可存儲(chǔ)。
[0003]隨著容災(zāi)備份系統(tǒng)和數(shù)據(jù)去重技術(shù)的發(fā)展,隱私數(shù)據(jù)的丟失與篡改等存儲(chǔ)安全問題日漸突出,例如:對(duì)于現(xiàn)有的備份系統(tǒng),在存儲(chǔ)服務(wù)過程中,存儲(chǔ)系統(tǒng)錯(cuò)誤配置、管理員操作失誤、敵手通過抓包獲取等有可能將用戶的明文數(shù)據(jù)直接暴露給他人;即使敵手無(wú)法獲取明文,也可能通過破壞傳輸文件,篡改數(shù)據(jù)、暴力攻擊等方式獲取和破壞用戶和企業(yè)的重要數(shù)據(jù)。因此,如何在數(shù)據(jù)備份過程中建立一個(gè)安全的數(shù)據(jù)去重系統(tǒng)成為了工業(yè)界和學(xué)術(shù)界研究的熱點(diǎn)。
[0004]數(shù)據(jù)安全在現(xiàn)在存儲(chǔ)系統(tǒng)中逐漸引起企業(yè)和學(xué)術(shù)界的重視,在很大程度上,數(shù)據(jù)去重和加密在邏輯上是完全相反和矛盾的。數(shù)據(jù)去重利用了數(shù)據(jù)的相似性,相反密碼學(xué)的目標(biāo)是使得密文分布更接近于理論上的隨機(jī)性。假如按照經(jīng)典數(shù)據(jù)去重算法,不同用戶對(duì)于共享的數(shù)據(jù)塊加密,由于密文的隨機(jī)性將得到不同的密文,產(chǎn)生不同的指紋,導(dǎo)致數(shù)據(jù)去重的效率大大降低。假如采用不同的用戶對(duì)共享的數(shù)據(jù)塊明文計(jì)算處理得到相同的指紋,再使用不同的密鑰加密數(shù)據(jù)塊得到不同的密文,導(dǎo)致其他用戶無(wú)法解密。同時(shí)在數(shù)據(jù)去重技術(shù)中增加加密、身份認(rèn)證等安全技術(shù)勢(shì)必會(huì)增加備份系統(tǒng)的負(fù)擔(dān),降低備份系統(tǒng)的性能。
【發(fā)明內(nèi)容】
[0005]針對(duì)現(xiàn)有技術(shù)的以上缺陷或改進(jìn)需求,本發(fā)明提供了一種適用于備份系統(tǒng)的安全數(shù)據(jù)去重方法和系統(tǒng),其目的在于保證在數(shù)據(jù)去重率不變的基礎(chǔ)上,防止數(shù)據(jù)丟失、篡改等存儲(chǔ)安全問題。
[0006]為實(shí)現(xiàn)上述目的,按照本發(fā)明的一個(gè)方面,提供了一種適用于備份系統(tǒng)的安全數(shù)據(jù)去重方法,包括:
[0007]—、備份階段,其包括以下步驟:
[0008](I)接收用戶提交的備份請(qǐng)求;
[0009](2)對(duì)需要備份的每個(gè)文件進(jìn)行分塊,以得到多個(gè)不同大小的數(shù)據(jù)塊;
[0010](3)使用哈希算法計(jì)算每個(gè)數(shù)據(jù)塊的哈希值F1來作為數(shù)據(jù)塊加密密鑰。
[0011](4)再次使用哈希算法計(jì)算每個(gè)數(shù)據(jù)塊哈希值F1的哈希值F2,并將哈希值F2作為該數(shù)據(jù)塊的指紋,并采用經(jīng)典加密算法使用用戶的私鑰對(duì)數(shù)據(jù)塊的哈希值F1進(jìn)行加密以得到數(shù)據(jù)哈希值F1的密文E (F1);
[0012](5)將文件的數(shù)據(jù)塊個(gè)數(shù)nChunkNum,所有數(shù)據(jù)塊指紋F2等打包成指紋段并記錄,順序?qū)⑺兄讣y段以指紋流的形式發(fā)送傳輸?shù)酱鎯?chǔ)服務(wù)器,并發(fā)送校驗(yàn)流到存儲(chǔ)服務(wù)器;
[0013](6)在存儲(chǔ)服務(wù)器的內(nèi)存中建立用于記錄該文件的數(shù)據(jù)塊是否重復(fù)的單鏈表;
[0014](7)根據(jù)指紋段和文件數(shù)據(jù)塊個(gè)數(shù)nChunkNum在存儲(chǔ)服務(wù)器端進(jìn)行數(shù)據(jù)去重的操作過程;
[0015](8)在客戶端準(zhǔn)備備份非重復(fù)的數(shù)據(jù)塊,設(shè)置計(jì)數(shù)器j=l,并判斷j是否大于nChunkNum,如果是則轉(zhuǎn)步驟(12),否則轉(zhuǎn)步驟(9);
[0016](9)對(duì)于第j個(gè)數(shù)據(jù)塊,如果其是重復(fù)的數(shù)據(jù)塊,則不予發(fā)送;如果其是新的數(shù)據(jù)塊,采用文件壓縮算法壓縮,并以數(shù)據(jù)塊哈希值F1作為第j個(gè)數(shù)據(jù)塊的數(shù)據(jù)塊加密密鑰,并使用該數(shù)據(jù)塊加密密鑰和經(jīng)典加密算法對(duì)第j個(gè)數(shù)據(jù)塊加密,得到的密文數(shù)據(jù)塊;
[0017](10)將加密后的密文數(shù)據(jù)塊和數(shù)據(jù)塊哈希值F1的密文E (F1)以數(shù)據(jù)流的形式發(fā)送至存儲(chǔ)服務(wù)器,并發(fā)送校驗(yàn)流到存儲(chǔ)服務(wù)器,設(shè)置j=j+l ;
[0018](11)根據(jù)第j個(gè)數(shù)據(jù)塊在存儲(chǔ)服務(wù)器中的存儲(chǔ)位置,保存數(shù)據(jù)塊密文,然后返回步驟(8);
[0019](12)將該單鏈表發(fā)送回客戶端,并將所有數(shù)據(jù)塊的數(shù)據(jù)哈希值F1的密文E (F1)寫入到存儲(chǔ)服務(wù)器的文件譜中;
[0020](13)釋放內(nèi)存中單鏈表的數(shù)據(jù)結(jié)構(gòu),備份過程結(jié)束;
[0021]二、恢復(fù)階段,其包括以下步驟:
[0022](14)接收用戶提交的恢復(fù)請(qǐng)求;具體而言,該等信息,由備份服務(wù)器根據(jù)文件這些信息等查找到該文件指定的存儲(chǔ)服務(wù)器。
[0023](15)從存儲(chǔ)服務(wù)器中查找該恢復(fù)文件對(duì)應(yīng)的文件譜,將文件譜中的所有內(nèi)容包括所有數(shù)據(jù)塊哈希值F1的密文E (F1)、文件名、文件路徑等信息讀出,并以指紋流的形式發(fā)送回客戶端;
[0024](16)通過使用LockBox機(jī)制取出用戶的私有密鑰,并對(duì)接收到的數(shù)據(jù)塊哈希值F1的密文(E (F1))使用用戶的私有密鑰進(jìn)行解密,并將解密得到的數(shù)據(jù)塊哈希值Fl以單鏈表結(jié)構(gòu)保存在內(nèi)存中;
[0025](17)對(duì)數(shù)據(jù)塊哈希值F1使用備份過程中相同的哈希算法再次求取哈希值,以得到數(shù)據(jù)塊指紋F2,并將其發(fā)送回存儲(chǔ)服務(wù)器;具體而言,本發(fā)明采用的是SHA-1算法計(jì)算哈希值;
[0026]( 18)根據(jù)數(shù)據(jù)塊指紋F2找到數(shù)據(jù)塊,并將數(shù)據(jù)塊發(fā)送回客戶端;
[0027]( 19)對(duì)接收到的數(shù)據(jù)塊進(jìn)行解密和解壓縮處理,并寫入文件;[0028](20)釋放內(nèi)存中保存的數(shù)據(jù)塊哈希值F1的單鏈表數(shù)據(jù)結(jié)構(gòu),恢復(fù)過程結(jié)束。
[0029]優(yōu)選地,備份請(qǐng)求包括需要備份的文件名、文件的路徑、文件的大小、文件的備份時(shí)間,恢復(fù)請(qǐng)求包括恢復(fù)文件對(duì)象、恢復(fù)文件名、恢復(fù)路徑。
[0030]優(yōu)選地,其特征在于,哈希算法采用的是SHA-1方法,經(jīng)典加密算法采用的是AES算法,用戶的私有密鑰是通過Lockbox機(jī)制進(jìn)行保護(hù)。
[0031]優(yōu)選地,步驟(7)包括以下子步驟:
[0032](7-1)設(shè)置計(jì)數(shù)器i=l,判斷i是否大于nChunkNum。如果是則轉(zhuǎn)入步驟(8),否則轉(zhuǎn)入步驟(7-2);
[0033](7-2)對(duì)需要備份的文件的指紋段中的內(nèi)容進(jìn)行解析,以得到第i個(gè)數(shù)據(jù)塊的數(shù)據(jù)塊指紋F2、數(shù)據(jù)哈希值F1的密文E (Fl )、數(shù)據(jù)塊長(zhǎng)度等信息;
[0034](7-3)在存儲(chǔ)服務(wù)器的指紋庫(kù)中判斷是否可查找到數(shù)據(jù)塊指紋F2,如果可查找到,則表明第i個(gè)數(shù)據(jù)塊為重復(fù)塊,以指紋F2為索引條件直接指向已存在的數(shù)據(jù)塊;反之,則表明第i個(gè)數(shù)據(jù)塊是新數(shù)據(jù)塊,根據(jù)指紋F2為索引條件設(shè)置該新數(shù)據(jù)塊在存儲(chǔ)服務(wù)器中的存儲(chǔ)位置
[0035](7-4)設(shè)置計(jì)數(shù)器i=i+l,建立新結(jié)點(diǎn),將第i個(gè)數(shù)據(jù)塊是否重復(fù)的信息寫入該結(jié)點(diǎn),并將單鏈表的尾指針指向該結(jié)點(diǎn),并且尾指針后移一位,然后返回步驟(7-1)。
[0036]優(yōu)選地,步驟(9)中數(shù)據(jù)塊哈希值F1作為加密密鑰采用PBE的加密策略對(duì)安全性進(jìn)行處理,并對(duì)密鑰長(zhǎng)度進(jìn)行調(diào)整。
[0037]優(yōu)選地,步驟(18)具體為,根據(jù)數(shù)據(jù)塊指紋F2讀取恢復(fù)文件對(duì)應(yīng)的相似性容器,遍歷文件譜中的指紋鏈表,以找到所有數(shù)據(jù)塊對(duì)應(yīng)的容器的ID,讀出容器中相應(yīng)的密文數(shù)據(jù)塊,并將密文數(shù)據(jù)塊和數(shù)據(jù)塊個(gè)數(shù)nChunkNum以數(shù)據(jù)流的形式傳輸回客戶端,并發(fā)送校驗(yàn)流到客戶端,
[0038]優(yōu)選地,步驟(19)包括以下子步驟:
[0039](19-1)設(shè)置計(jì)數(shù)器k=0,判斷k是否大于nChunkNum,如果是轉(zhuǎn)步驟(20),否則轉(zhuǎn)步驟(19-2);
[0040](19-2)根據(jù)文件譜中包含的文件名、文件路徑等信息找到本地磁盤位置創(chuàng)建新文件;
[0041](19-3)調(diào)用在內(nèi)存中保存的數(shù)據(jù)塊哈希值F1,以數(shù)據(jù)塊哈希值F1為數(shù)據(jù)塊解密密鑰對(duì)第k個(gè)數(shù)據(jù)塊進(jìn)行解密,采用文件壓縮算法壓縮(GNUzip,簡(jiǎn)稱gzip),并將該明文數(shù)據(jù)塊內(nèi)容寫入到文件中,置k=k+l,轉(zhuǎn)步驟(19-1)。
[0042]按照本發(fā)明的另一方面,提供了一種適用于備份系統(tǒng)的安全數(shù)據(jù)去重系統(tǒng),包括:
[0043]第一模塊,用于接收用戶提交的備份請(qǐng)求;
[0044]第二模塊,用于對(duì)需要備份的每個(gè)文件進(jìn)行分塊,以得到多個(gè)不同大小的數(shù)據(jù)塊;
[0045]第三模塊,用于使用哈希算法計(jì)算每個(gè)數(shù)據(jù)塊的哈希值F1 ;
[0046]第四模塊,用于再次使用哈希算法計(jì)算每個(gè)數(shù)據(jù)塊哈希值F1的哈希值F2,并將哈希值F2作為該數(shù)據(jù)塊的指紋,并采用經(jīng)典加密算法使用用戶的私鑰對(duì)數(shù)據(jù)塊的哈希值F1進(jìn)行加密以得到數(shù)據(jù)哈希值F1的密文E (F1);[0047]第五模塊,用于將文件的數(shù)據(jù)塊個(gè)數(shù)nChunkNum,所有數(shù)據(jù)塊指紋F2等打包成指紋段并記錄,順序?qū)⑺兄讣y段以指紋流的形式發(fā)送傳輸?shù)酱鎯?chǔ)服務(wù)器,并發(fā)送校驗(yàn)流到存儲(chǔ)服務(wù)器;
[0048]第六模塊,用于在存儲(chǔ)服務(wù)器的內(nèi)存中建立用于記錄該文件的數(shù)據(jù)塊是否重復(fù)的單鏈表;
[0049]第七模塊,用于根據(jù)指紋段和文件數(shù)據(jù)塊個(gè)數(shù)nChunkNum在存儲(chǔ)服務(wù)器端進(jìn)行數(shù)據(jù)去重的操作過程;
[0050]第八模塊,用于在客戶端準(zhǔn)備備份非重復(fù)的數(shù)據(jù)塊,設(shè)置計(jì)數(shù)器j=l,并判斷j是否大于nChunkNum,如果是則轉(zhuǎn)步驟(12),否則轉(zhuǎn)步驟(9);
[0051]第九模塊,用于對(duì)于第j個(gè)數(shù)據(jù)塊,如果其是重復(fù)的數(shù)據(jù)塊,則不予發(fā)送;如果其是新的數(shù)據(jù)塊,采用文件壓縮算法壓縮,并以數(shù)據(jù)塊哈希值F1作為第j個(gè)數(shù)據(jù)塊的數(shù)據(jù)塊加密密鑰,并使用該數(shù)據(jù)塊加密密鑰和經(jīng)典加密算法對(duì)第j個(gè)數(shù)據(jù)塊加密,得到的密文數(shù)據(jù)塊;
[0052]第十模塊,用于將加密后的密文數(shù)據(jù)塊和數(shù)據(jù)塊哈希值F1的密文E (F1)以數(shù)據(jù)流的形式發(fā)送至存儲(chǔ)服務(wù)器,并發(fā)送校驗(yàn)流到存儲(chǔ)服務(wù)器,設(shè)置j=j+l ;
[0053]第十一模塊,用于根據(jù)第j個(gè)數(shù)據(jù)塊在存儲(chǔ)服務(wù)器中的存儲(chǔ)位置,保存數(shù)據(jù)塊密文,然后返回步驟(8);
[0054]第十二模塊,用于將該單鏈表發(fā)送回客戶端,并將所有數(shù)據(jù)塊的數(shù)據(jù)哈希值F1的密文E (F1)寫入到存儲(chǔ)服務(wù)器的文件譜中;
[0055]第十三模塊,用于釋放內(nèi)存中單鏈表的數(shù)據(jù)結(jié)構(gòu),備份過程結(jié)束;
[0056]第十四模塊,用于接收用戶提交的恢復(fù)請(qǐng)求;具體而言,該等信息,由備份服務(wù)器根據(jù)文件這些信息等查找到該文件指定的存儲(chǔ)服務(wù)器。
[0057]第十五模塊,用于從存儲(chǔ)服務(wù)器中查找該恢復(fù)文件對(duì)應(yīng)的文件譜,將文件譜中的所有內(nèi)容包括所有數(shù)據(jù)塊哈希值F1的密文E (F1)、文件名、文件路徑等信息讀出,并以指紋流的形式發(fā)送回客戶端;
[0058]第十六模塊,用于通過使用LockBox機(jī)制取出用戶的私有密鑰,并對(duì)接收到的數(shù)據(jù)塊哈希值F1的密文(E (F1))使用用戶的私有密鑰進(jìn)行解密,并將解密得到的數(shù)據(jù)塊哈希值F1以單鏈表結(jié)構(gòu)保存在內(nèi)存中;
[0059]第十七模塊,用于對(duì)數(shù)據(jù)塊哈希值F1使用備份過程中相同的哈希算法再次求取哈希值,以得到數(shù)據(jù)塊指紋F2,并將其發(fā)送回存儲(chǔ)服務(wù)器;具體而言,本發(fā)明采用的是SHA-1算法計(jì)算哈希值;
[0060]第十八模塊,用于根據(jù)數(shù)據(jù)塊指紋F2找到數(shù)據(jù)塊,并將數(shù)據(jù)塊發(fā)送回客戶端;
[0061]第十九模塊,用于對(duì)接收到的數(shù)據(jù)塊進(jìn)行解密和解壓縮處理,并寫入文件;
[0062]第二十模塊,用于釋放內(nèi)存中保存的數(shù)據(jù)塊哈希值F1的單鏈表數(shù)據(jù)結(jié)構(gòu),恢復(fù)過程結(jié)束。
[0063]總體而言,通過本發(fā)明所構(gòu)思的以上技術(shù)方案與現(xiàn)有技術(shù)相比,能夠取得下列有益效果:
[0064]1、本發(fā)明采用適用于備份系統(tǒng)的安全數(shù)據(jù)去重方法,所有的加密解密過程全部在客戶端執(zhí)行,由此,能夠有效地減輕備份服務(wù)器和存儲(chǔ)服務(wù)器的負(fù)擔(dān),提高多用戶并發(fā)環(huán)境下的性能。
[0065]2、本發(fā)明中數(shù)據(jù)塊和密鑰在傳輸和存儲(chǔ)過程中都以密文的形式存在,確保即使敵手獲取了傳輸內(nèi)容也無(wú)法獲取加密密鑰和數(shù)據(jù)塊明文,傳輸過程中通信雙方需要身份驗(yàn)證,有效保障了數(shù)據(jù)和密鑰的傳輸和存儲(chǔ)安全性,降低了數(shù)據(jù)丟失和被篡改的概率。
[0066]3、相對(duì)于先加密再去重的方式必須將所有數(shù)據(jù)塊先加密、然后發(fā)送到存儲(chǔ)服務(wù)器進(jìn)行去重處理而言,本發(fā)明通過先進(jìn)行數(shù)據(jù)去重再對(duì)新數(shù)據(jù)塊加密的方式,只需要對(duì)非重復(fù)的數(shù)據(jù)塊加密,減少了大量的加密工作,有效降低了客戶端的開銷和時(shí)間延遲。
[0067]4、本發(fā)明將數(shù)據(jù)塊加密密鑰放在存儲(chǔ)服務(wù)器端,即使客戶端的數(shù)據(jù)和密鑰丟失,都能保證數(shù)據(jù)正?;謴?fù)正常解密;因此,通過減少交互次數(shù),如以文件為單位,一次或幾次完成所有的交互信息,減少鏈表的訪問次數(shù),記錄上次訪問地址,性能會(huì)得到很大的提升。
【專利附圖】
【附圖說明】
[0068]圖1是本發(fā)明應(yīng)用的備份系統(tǒng)的架構(gòu)圖。
[0069]圖2是本發(fā)明適用于備份系統(tǒng)的安全數(shù)據(jù)去重方法的備份過程原理圖。
[0070]圖3是本發(fā)明適用于備份系統(tǒng)的安全數(shù)據(jù)去重方法的恢復(fù)過程原理圖。
[0071]圖4是本發(fā)明適用于備份系統(tǒng)的安全數(shù)據(jù)去重方法的備份流程圖。
[0072]圖5是本發(fā)明適用于備份系統(tǒng)的安全數(shù)據(jù)去重方法的恢復(fù)流程圖。
【具體實(shí)施方式】
[0073]為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。此外,下面所描述的本發(fā)明各個(gè)實(shí)施方式中所涉及到的技術(shù)特征只要彼此之間未構(gòu)成沖突就可以相互組合。
[0074]本發(fā)明主要涉及到3個(gè)重要的變量:數(shù)據(jù)塊哈希值F1、數(shù)據(jù)塊指紋F2、數(shù)據(jù)塊哈希值F1的密文E(F1)15使用哈希算法計(jì)算每個(gè)數(shù)據(jù)塊的哈希值F1來作為數(shù)據(jù)塊的加密密鑰,再次使用哈希算法計(jì)算每個(gè)數(shù)據(jù)塊哈希值F1的哈希值F2作為該數(shù)據(jù)塊的指紋來識(shí)別重復(fù)數(shù)據(jù)塊,并采用經(jīng)典加密算法使用用戶的私鑰對(duì)數(shù)據(jù)塊的哈希值F1進(jìn)行加密以得到數(shù)據(jù)哈希值F1的密文E (F1)來保護(hù)數(shù)據(jù)塊的加密密鑰。
[0075]本發(fā)明適用于備份系統(tǒng)的安全數(shù)據(jù)去重方法的基本思路在于,在客戶端將待備份數(shù)據(jù)流分塊、求取數(shù)據(jù)塊哈希值F1之后,對(duì)數(shù)據(jù)塊哈希值F1再次求取哈希值得到F2,并且將哈希值F2作為該數(shù)據(jù)塊的指紋進(jìn)行數(shù)據(jù)去重操作過程。該方法采用的是先去重后加密的策略,客戶端將所有數(shù)據(jù)塊指紋F2發(fā)送到存儲(chǔ)服務(wù)器的指紋庫(kù)中進(jìn)行查找比對(duì),如果存在說明是重復(fù)數(shù)據(jù)塊;如果不存在說明是新數(shù)據(jù)塊,將指紋寫入到數(shù)據(jù)庫(kù)中。所有數(shù)據(jù)塊指紋對(duì)比完畢后,將是否重復(fù)的信息記錄并發(fā)回客戶端??蛻舳烁鶕?jù)該信息,對(duì)于重復(fù)數(shù)據(jù)塊不予發(fā)送;對(duì)于新的數(shù)據(jù)塊,使用數(shù)據(jù)塊本身的哈希值F1經(jīng)過處理之后作為密鑰,采用高級(jí)加密標(biāo)準(zhǔn)(Advanced Encryption Standard,簡(jiǎn)稱AES)算法等經(jīng)典加密算法對(duì)數(shù)據(jù)塊加密,將密文塊發(fā)送到存儲(chǔ)服務(wù)器儲(chǔ)存。
[0076]為了進(jìn)行密鑰保護(hù),客戶端將數(shù)據(jù)塊的哈希值F1 (即數(shù)據(jù)塊加密密鑰)使用用戶私有的對(duì)稱密鑰加密得到E (F1),將E (F1)發(fā)送到存儲(chǔ)服務(wù)器的文件譜中存儲(chǔ),而用戶的私有密鑰通過Lockbox機(jī)制進(jìn)行保護(hù),確保密鑰的安全性。
[0077]在進(jìn)行文件恢復(fù)時(shí),客戶端首先會(huì)請(qǐng)求由存儲(chǔ)服務(wù)器將文件譜從磁盤中讀出發(fā)送回客戶端,客戶端接收文件譜,從LockBox中取出用戶的私有密鑰,對(duì)文件譜中的E (F1)解密得到數(shù)據(jù)塊加密密鑰F1暫時(shí)保存在內(nèi)存中;同時(shí)對(duì)解密得到的數(shù)據(jù)塊哈希值F1再次求取哈希值得到數(shù)據(jù)塊指紋F2,將數(shù)據(jù)塊指紋F2發(fā)送到存儲(chǔ)服務(wù)器根據(jù)索引查找數(shù)據(jù)塊,將數(shù)據(jù)塊發(fā)送到客戶端,客戶端使用密鑰F1對(duì)密文塊解密,將數(shù)據(jù)塊明文寫入文件中,整理后恢復(fù)過程結(jié)束。
[0078]如圖1所示,使用本發(fā)明方法的備份系統(tǒng),主要包含三個(gè)部分,即客戶端、備份服務(wù)器和存儲(chǔ)服務(wù)器。
[0079]備份服務(wù)器主要負(fù)責(zé)資源調(diào)度和元數(shù)據(jù)管理。資源調(diào)度主要是監(jiān)聽備份代理和存儲(chǔ)服務(wù)器的各項(xiàng)請(qǐng)求,并對(duì)收到的請(qǐng)求完成對(duì)應(yīng)的功能,主要包括驗(yàn)證備份代理身份,響應(yīng)備份代理的服務(wù)請(qǐng)求,對(duì)備份和恢復(fù)文件進(jìn)行調(diào)度,協(xié)調(diào)存儲(chǔ)服務(wù)器與備份代理完成文件任務(wù),存儲(chǔ)空間分配;元數(shù)據(jù)管理主要對(duì)用戶和存儲(chǔ)服務(wù)器提供的元數(shù)據(jù)進(jìn)行組織和管理,如用戶名,登錄時(shí)間,用戶備份的索引信息等。
[0080]存儲(chǔ)服務(wù)器主要完成數(shù)據(jù)存儲(chǔ)和組織。主要是接收客戶端傳送的指紋,進(jìn)行指紋匹配完成去重功能并返回查找信息,接收并存儲(chǔ)數(shù)據(jù)塊密文和文件譜信息等。如圖1所示,存儲(chǔ)服務(wù)器完成了密鑰的存儲(chǔ)和管理。
[0081]客戶端主要完成備份和恢復(fù)申請(qǐng),備份數(shù)據(jù)的分塊、求哈希、求指紋和數(shù)據(jù)塊加密解密等功能。如圖1所示,客戶端與存儲(chǔ)服務(wù)器之間的數(shù)據(jù)通信采用安全套接層協(xié)議(Secure Socket Layer/Transport Layer Security,簡(jiǎn)稱 SSL/TLS)。
[0082]本發(fā)明適用于備份系統(tǒng)的安全數(shù)據(jù)去重方法包括:
[0083]一、備份階段,如圖2和圖4所示,其包括以下步驟:
[0084](I)接收用戶提交的備份請(qǐng)求,該備份請(qǐng)求包括需要備份的文件名、文件的路徑、文件的大小、文件的備份時(shí)間等;
[0085](2)對(duì)需要備份的每個(gè)文件進(jìn)行分塊,以得到多個(gè)不同大小的數(shù)據(jù)塊;在本實(shí)施方式中,分塊采用的是基于Rabin指紋的滑動(dòng)窗口分塊算法;
[0086](3)使用哈希算法計(jì)算每個(gè)數(shù)據(jù)塊的哈希值F1 ;具體而言,本發(fā)明采用的是SHA-1算法計(jì)算哈希值,該哈希值用來作為數(shù)據(jù)塊的加密密鑰;
[0087](4)再次使用哈希算法計(jì)算每個(gè)數(shù)據(jù)塊哈希值F1的哈希值F2,并將哈希值F2作為該數(shù)據(jù)塊的指紋來識(shí)別重復(fù)數(shù)據(jù)塊,并采用經(jīng)典加密算法使用用戶的私鑰對(duì)數(shù)據(jù)塊的哈希值F1進(jìn)行加密以得到數(shù)據(jù)哈希值F1的密文E (F1),從而保護(hù)數(shù)據(jù)塊加密密鑰F1 ;具體而言,哈希算法采用的是SHA-1方法,經(jīng)典加密算法采用的是高級(jí)加密標(biāo)準(zhǔn)(AdvancedEncryption Standard,簡(jiǎn)稱AES)算法,用戶的私有密鑰是通過Lockbox機(jī)制進(jìn)行保護(hù);
[0088]本步驟的優(yōu)點(diǎn)在于,經(jīng)過兩次哈希計(jì)算,能快速地獲取數(shù)據(jù)塊指紋,加快了數(shù)據(jù)去重的速度。并且通過Lockbox機(jī)制有效地保護(hù)用戶的私有密鑰。
[0089](5)將文件的數(shù)據(jù)塊個(gè)數(shù)nChunkNum,所有數(shù)據(jù)塊指紋F2等打包成指紋段并記錄,順序?qū)⑺兄讣y段以指紋流的形式發(fā)送傳輸?shù)酱鎯?chǔ)服務(wù)器,并發(fā)送校驗(yàn)流到存儲(chǔ)服務(wù)器;具體而言,在傳輸過程中采用安全套接層協(xié)議(Secure Socket Layer/Transport LayerSecurity,簡(jiǎn)稱SSL/TLS),客戶端與服務(wù)器數(shù)據(jù)通信包含3種流類型:指紋流,數(shù)據(jù)流和校驗(yàn)流。
[0090](6)在存儲(chǔ)服務(wù)器的內(nèi)存中建立用于記錄該文件的數(shù)據(jù)塊是否重復(fù)的單鏈表;
[0091](7)根據(jù)指紋段和文件數(shù)據(jù)塊個(gè)數(shù)nChunkNum在存儲(chǔ)服務(wù)器端進(jìn)行數(shù)據(jù)去重的操作過程;本步驟包括以下子步驟:
[0092](7-1)設(shè)置計(jì)數(shù)器i=l,判斷i是否大于nChunkNum。如果是則轉(zhuǎn)入步驟(8),否則轉(zhuǎn)入步驟(7-2);
[0093](7-2)對(duì)需要備份的文件的指紋段中的內(nèi)容進(jìn)行解析,以得到第i個(gè)數(shù)據(jù)塊的數(shù)據(jù)塊指紋F2、數(shù)據(jù)哈希值F1的密文E (F1)、數(shù)據(jù)塊長(zhǎng)度等信息;
[0094](7-3)在存儲(chǔ)服務(wù)器的指紋庫(kù)中判斷是否可查找到數(shù)據(jù)塊指紋F2,如果可查找到,則表明第i個(gè)數(shù)據(jù)塊為重復(fù)塊,以指紋F2為索引條件直接指向已存在的數(shù)據(jù)塊;反之,則表明第i個(gè)數(shù)據(jù)塊是新數(shù)據(jù)塊,根據(jù)指紋F2為索引條件設(shè)置該新數(shù)據(jù)塊在存儲(chǔ)服務(wù)器中的存儲(chǔ)位置;具體而言,本發(fā)明中提到的索引用于數(shù)據(jù)塊的存儲(chǔ)和查找。
[0095](7-4)設(shè)置計(jì)數(shù)器i=i+l,建立新結(jié)點(diǎn),將第i個(gè)數(shù)據(jù)塊是否重復(fù)的信息寫入該結(jié)點(diǎn),并將單鏈表的尾指針指向該結(jié)點(diǎn),并且尾指針后移一位,然后返回步驟(7-1);
[0096](8)在客戶端準(zhǔn)備備份非重復(fù)的數(shù)據(jù)塊,設(shè)置計(jì)數(shù)器j=l,并判斷j是否大于nChunkNum,如果是則轉(zhuǎn)步驟(12),否則轉(zhuǎn)步驟(9);
[0097](9)對(duì)于第j個(gè)數(shù)據(jù)塊,如果其是重復(fù)的數(shù)據(jù)塊,則不予發(fā)送;如果其是新的數(shù)據(jù)塊,采用文件壓縮算法壓縮(GNUzip,簡(jiǎn)稱gzip),并以數(shù)據(jù)塊哈希值F1作為第j個(gè)數(shù)據(jù)塊的數(shù)據(jù)塊加密密鑰,并使用該數(shù)據(jù)塊加密密鑰和經(jīng)典加密算法對(duì)第j個(gè)數(shù)據(jù)塊加密,得到的密文數(shù)據(jù)塊;具體而言,數(shù)據(jù)塊哈希值F1作為加密密鑰需要采用基于口令加密(Passwordbased encryption,簡(jiǎn)稱PBE)的加密策略對(duì)安全性進(jìn)行處理,并對(duì)密鑰長(zhǎng)度進(jìn)行調(diào)整。
[0098]本步驟的優(yōu)點(diǎn)在于,所有的加密解密過程全部在客戶端執(zhí)行,由此,能夠有效地減輕備份服務(wù)器和存儲(chǔ)服務(wù)器的負(fù)擔(dān)。并且只對(duì)新的數(shù)據(jù)塊加密,減少了重復(fù)加密的負(fù)擔(dān)。
[0099](10)將加密后的密文數(shù)據(jù)塊和數(shù)據(jù)塊哈希值F1的密文E (F1)以數(shù)據(jù)流的形式發(fā)送至存儲(chǔ)服務(wù)器,并發(fā)送校驗(yàn)流到存儲(chǔ)服務(wù)器,設(shè)置j=j+l ;具體而言,在傳輸過程中采用安全套接層協(xié)議(Secure Socket Layer/Transport Layer Security,簡(jiǎn)稱 SSL/TLS)。
[0100]本步驟的優(yōu)點(diǎn)在于數(shù)據(jù)和密鑰在傳輸和存儲(chǔ)過程中都以密文的形式存在,確保即使敵手獲取了傳輸內(nèi)容也無(wú)法獲取加密密鑰和數(shù)據(jù)塊明文,傳輸過程中通信雙方需要身份驗(yàn)證,有效保障了數(shù)據(jù)和密鑰的傳輸和存儲(chǔ)安全性,降低了數(shù)據(jù)丟失和被篡改的概率。
[0101](11)根據(jù)步驟(7-3)中指紋F2設(shè)置的第j個(gè)數(shù)據(jù)塊在存儲(chǔ)服務(wù)器中的存儲(chǔ)位置,保存數(shù)據(jù)塊密文,然后返回步驟(8);
[0102](12)將該單鏈表發(fā)送回客戶端,并將所有數(shù)據(jù)塊的數(shù)據(jù)哈希值F1的密文E (F1)寫入到存儲(chǔ)服務(wù)器的文件譜中;具體而言,文件譜是用于數(shù)據(jù)恢復(fù)時(shí)的文件。
[0103](13)釋放內(nèi)存中單鏈表的數(shù)據(jù)結(jié)構(gòu),備份過程結(jié)束;
[0104]二、恢復(fù)階段,如圖3和圖5所示,其包括以下步驟:
[0105](14)接收用戶提交的恢復(fù)請(qǐng)求;具體而言,該恢復(fù)請(qǐng)求包括恢復(fù)文件對(duì)象、恢復(fù)文件名、以及恢復(fù)路徑等信息,由備份服務(wù)器根據(jù)文件這些信息等查找到該文件指定的存儲(chǔ)服務(wù)器。
[0106](15)從存儲(chǔ)服務(wù)器中查找該恢復(fù)文件對(duì)應(yīng)的文件譜,將文件譜中的所有內(nèi)容包括所有數(shù)據(jù)塊哈希值F1的密文E (F1)、文件名、文件路徑等信息讀出,并以指紋流的形式發(fā)送回客戶端;
[0107](16)通過使用LockBox機(jī)制取出用戶的私有密鑰,并對(duì)接收到的數(shù)據(jù)塊哈希值F1的密文(E (F1))使用用戶的私有密鑰進(jìn)行解密,并將解密得到的數(shù)據(jù)塊哈希值F1以單鏈表結(jié)構(gòu)保存在內(nèi)存中;
[0108](17)對(duì)數(shù)據(jù)塊哈希值F1使用備份過程中相同的哈希算法再次求取哈希值,以得到數(shù)據(jù)塊指紋F2,并將其發(fā)送回存儲(chǔ)服務(wù)器;具體而言,本發(fā)明采用的是SHA-1算法計(jì)算哈希值;
[0109](18)根據(jù)數(shù)據(jù)塊指紋F2找到數(shù)據(jù)塊,并將數(shù)據(jù)塊發(fā)送回客戶端;具體而言,根據(jù)數(shù)據(jù)塊指紋F2讀取恢復(fù)文件對(duì)應(yīng)的相似性容器,遍歷文件譜中的指紋鏈表,以找到所有數(shù)據(jù)塊對(duì)應(yīng)的容器的ID,讀出容器中相應(yīng)的密文數(shù)據(jù)塊,并將密文數(shù)據(jù)塊和數(shù)據(jù)塊個(gè)數(shù)nChunkNum以數(shù)據(jù)流的形式傳輸回客戶端,并發(fā)送校驗(yàn)流到客戶端,本發(fā)明傳輸過程采用安全套接層協(xié)議(Secure Socket Layer/Transport Layer Security,簡(jiǎn)稱SSL/TLS),相似性容器設(shè)置于存儲(chǔ)服務(wù)器,用于快速查找數(shù)據(jù)塊;
[0110](19)對(duì)接收到的數(shù)據(jù)塊進(jìn)行解密和解壓縮處理,并寫入文件;本步驟具體包括以下子步驟:
[0111](19-1)設(shè)置計(jì)數(shù)器k=0,判斷k是否大于nChunkNum,如果是轉(zhuǎn)步驟(20),否則轉(zhuǎn)步驟(19-2)
[0112](19-2)根據(jù)文件譜中包含的文件名、文件路徑等信息找到本地磁盤位置創(chuàng)建新文件;
[0113](19-3)調(diào)用在內(nèi)存中保存的數(shù)據(jù)塊哈希值F1,以數(shù)據(jù)塊哈希值F1為數(shù)據(jù)塊解密密鑰對(duì)第k個(gè)數(shù)據(jù)塊進(jìn)行解密,采用文件壓縮算法壓縮(GNUz ip,簡(jiǎn)稱gz ip),并將該明文數(shù)據(jù)塊內(nèi)容寫入到文件中,置k=k+l,轉(zhuǎn)步驟(19-1);具體而言,數(shù)據(jù)塊哈希值F1作為加密密鑰需要采用基于口令加密(Password Based Encryption,簡(jiǎn)稱PBE)的加密策略對(duì)安全性進(jìn)行處理,并對(duì)密鑰長(zhǎng)度進(jìn)行調(diào)整。
[0114](20)釋放內(nèi)存中保存的數(shù)據(jù)塊哈希值F1的單鏈表數(shù)據(jù)結(jié)構(gòu),恢復(fù)過程結(jié)束。
[0115]本發(fā)明適用于備份系統(tǒng)的安全數(shù)據(jù)去重系統(tǒng),是應(yīng)用在一種備份系統(tǒng)中,該備份系統(tǒng)包括客戶端、備份服務(wù)器和存儲(chǔ)服務(wù)器,該安全數(shù)據(jù)去重系統(tǒng)包括:
[0116]第一模塊,其設(shè)置于備份服務(wù)器中,用于接收用戶提交的備份請(qǐng)求;
[0117]第二模塊,其設(shè)置于客戶端中,用于對(duì)需要備份的每個(gè)文件進(jìn)行分塊,以得到多個(gè)不同大小的數(shù)據(jù)塊;
[0118]第三模塊,其設(shè)置于客戶端中,用于使用哈希算法計(jì)算每個(gè)數(shù)據(jù)塊的哈希值F1來作為數(shù)據(jù)塊的加密密鑰;
[0119]第四模塊,其設(shè)置于客戶端中,用于再次使用哈希算法計(jì)算每個(gè)數(shù)據(jù)塊哈希值F1的哈希值F2,并將哈希值F2作為該數(shù)據(jù)塊的指紋,并采用經(jīng)典加密算法使用用戶的私鑰對(duì)數(shù)據(jù)塊的哈希值F1進(jìn)行加密以得到數(shù)據(jù)哈希值F1的密文E(F0,從而保護(hù)數(shù)據(jù)塊加密密鑰F1 ;
[0120]第五模塊,其設(shè)置于客戶端中,用于將文件的數(shù)據(jù)塊個(gè)數(shù)nChunkNum,所有數(shù)據(jù)塊指紋F2等打包成指紋段并記錄,順序?qū)⑺兄讣y段以指紋流的形式發(fā)送傳輸?shù)酱鎯?chǔ)服務(wù)器,并發(fā)送校驗(yàn)流到存儲(chǔ)服務(wù)器;
[0121]第六模塊,其設(shè)置于存儲(chǔ)服務(wù)器中,用于在存儲(chǔ)服務(wù)器的內(nèi)存中建立用于記錄該文件的數(shù)據(jù)塊是否重復(fù)的單鏈表;
[0122]第七模塊,其設(shè)置于存儲(chǔ)服務(wù)器中,用于根據(jù)指紋段和文件數(shù)據(jù)塊個(gè)數(shù)nChunkNum在存儲(chǔ)服務(wù)器端進(jìn)行數(shù)據(jù)去重的操作過程;
[0123]第八模塊,其設(shè)置于存儲(chǔ)服務(wù)器中,用于在客戶端準(zhǔn)備備份非重復(fù)的數(shù)據(jù)塊,設(shè)置計(jì)數(shù)器j=l,并判斷j是否大于nChunkNum,如果是則轉(zhuǎn)第十二模塊,否則轉(zhuǎn)第九模塊;
[0124]第九模塊,其設(shè)置于存儲(chǔ)服務(wù)器中,用于對(duì)于第j個(gè)數(shù)據(jù)塊,如果其是重復(fù)的數(shù)據(jù)塊,則不予發(fā)送;如果其是新的數(shù)據(jù)塊,采用文件壓縮算法壓縮,并以數(shù)據(jù)塊哈希值F1作為第j個(gè)數(shù)據(jù)塊的數(shù)據(jù)塊加密密鑰,并使用該數(shù)據(jù)塊加密密鑰和經(jīng)典加密算法對(duì)第j個(gè)數(shù)據(jù)塊加密,得到的密文數(shù)據(jù)塊;
[0125]第十模塊,其設(shè)置于客戶端中,用于將加密后的密文數(shù)據(jù)塊和數(shù)據(jù)塊哈希值F1的密文E (F1)以數(shù)據(jù)流的形式發(fā)送至存儲(chǔ)服務(wù)器,并發(fā)送校驗(yàn)流到存儲(chǔ)服務(wù)器,設(shè)置j=j+l ;
[0126]第十一模塊,其設(shè)置于存儲(chǔ)服務(wù)器中,用于根據(jù)第j個(gè)數(shù)據(jù)塊在存儲(chǔ)服務(wù)器中的存儲(chǔ)位置,保存數(shù)據(jù)塊密文,然后返回第八模塊;
[0127]第十二模塊,其設(shè)置于存儲(chǔ)服務(wù)器中,用于將該單鏈表發(fā)送回客戶端,并將所有數(shù)據(jù)塊的數(shù)據(jù)哈希值F1的密文E (F1)寫入到存儲(chǔ)服務(wù)器的文件譜中;
[0128]第十三模塊,其設(shè)置于存儲(chǔ)服務(wù)器中,用于釋放內(nèi)存中單鏈表的數(shù)據(jù)結(jié)構(gòu),備份過程結(jié)束;
[0129]第十四模塊,其設(shè)置于備份服務(wù)器中,用于接收用戶提交的恢復(fù)請(qǐng)求;具體而言,該等信息,由備份服務(wù)器根據(jù)文件這些信息等查找到該文件指定的存儲(chǔ)服務(wù)器。
[0130]第十五模塊,其設(shè)置于存儲(chǔ)服務(wù)器中,用于從存儲(chǔ)服務(wù)器中查找該恢復(fù)文件對(duì)應(yīng)的文件譜,將文件譜中的所有內(nèi)容包括所有數(shù)據(jù)塊哈希值Fl的密文E (F1)、文件名、文件路徑等信息讀出,并以指紋流的形式發(fā)送回客戶端;
[0131]第十六模塊,其設(shè)置于客戶端中,用于通過使用LockBox機(jī)制取出用戶的私有密鑰,并對(duì)接收到的數(shù)據(jù)塊哈希值F1的密文(E (F1))使用用戶的私有密鑰進(jìn)行解密,并將解密得到的數(shù)據(jù)塊哈希值F1以單鏈表結(jié)構(gòu)保存在內(nèi)存中;
[0132]第十七模塊,其設(shè)置于客戶端中,用于對(duì)數(shù)據(jù)塊哈希值F1使用備份過程中相同的哈希算法再次求取哈希值,以得到數(shù)據(jù)塊指紋F2,并將其發(fā)送回存儲(chǔ)服務(wù)器;具體而言,本發(fā)明采用的是SHA-1算法計(jì)算哈希值;
[0133]第十八模塊,其設(shè)置于存儲(chǔ)服務(wù)器中,用于根據(jù)數(shù)據(jù)塊指紋F2找到數(shù)據(jù)塊,并將數(shù)據(jù)塊發(fā)送回客戶端;
[0134]第十九模塊,其設(shè)置于客戶端中,用于對(duì)接收到的數(shù)據(jù)塊進(jìn)行解密和解壓縮處理,并與入文件;
[0135]第二十模塊,其設(shè)置于客戶端中,用于釋放內(nèi)存中保存的數(shù)據(jù)塊哈希值F1的單鏈表數(shù)據(jù)結(jié)構(gòu),恢復(fù)過程結(jié)束。
[0136]本領(lǐng)域的技術(shù)人員容易理解,以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1.一種適用于備份系統(tǒng)的安全數(shù)據(jù)去重方法,其特征在于,包括: 一、備份階段,其包括以下步驟: (1)接收用戶提交的備份請(qǐng)求; (2)對(duì)需要備份的每個(gè)文件進(jìn)行分塊,以得到多個(gè)不同大小的數(shù)據(jù)塊; (3)使用哈希算法計(jì)算每個(gè)數(shù)據(jù)塊的哈希值F1來作為數(shù)據(jù)塊加密密鑰。 (4)再次使用哈希算法計(jì)算每個(gè)數(shù)據(jù)塊哈希值F1的哈希值F2,并將哈希值F2作為該數(shù)據(jù)塊的指紋來識(shí)別重復(fù)數(shù)據(jù)塊,并采用經(jīng)典加密算法使用用戶的私鑰對(duì)數(shù)據(jù)塊的哈希值F1進(jìn)行加密以得到數(shù)據(jù)哈希值F1的密文E (F1),從而保護(hù)數(shù)據(jù)塊加密密鑰F1 ; (5)將文件的數(shù)據(jù)塊個(gè)數(shù)nChunkNum,所有數(shù)據(jù)塊指紋F2等打包成指紋段并記錄,順序?qū)⑺兄讣y段以指紋流的形式發(fā)送傳輸?shù)酱鎯?chǔ)服務(wù)器,并發(fā)送校驗(yàn)流到存儲(chǔ)服務(wù)器; (6)在存儲(chǔ)服務(wù)器的內(nèi)存中建立用于記錄該文件的數(shù)據(jù)塊是否重復(fù)的單鏈表; (7)根據(jù)指紋段和文件數(shù)據(jù)塊個(gè)數(shù)nChunkNum在存儲(chǔ)服務(wù)器端進(jìn)行數(shù)據(jù)去重的操作過程; (8)在客戶端準(zhǔn)備備份非重復(fù)的數(shù)據(jù)塊,設(shè)置計(jì)數(shù)器j=l,并判斷j是否大于nChunkNum,如果是則轉(zhuǎn)步驟(12),否則轉(zhuǎn)步驟(9); (9)對(duì)于第j個(gè)數(shù)據(jù)塊,如果其是重復(fù)的數(shù)據(jù)塊,則不予發(fā)送;如果其是新的數(shù)據(jù)塊,采用文件壓縮算法壓縮,并以數(shù)據(jù)塊哈希值F1作為第j個(gè)數(shù)據(jù)塊的數(shù)據(jù)塊加密密鑰,并使用該數(shù)據(jù)塊加密密鑰和經(jīng)典加密算法對(duì)第j個(gè)數(shù)據(jù)塊加密,得到的密文數(shù)據(jù)塊; (10)將加密后的密文數(shù)據(jù)塊和數(shù)據(jù)塊哈希值F1的密文E(F1)以數(shù)據(jù)流的形式發(fā)送至存儲(chǔ)服務(wù)器,并發(fā)送校驗(yàn)流到存儲(chǔ)服務(wù)器,設(shè)置j=j+l ; (11)根據(jù)第j個(gè)數(shù)據(jù)塊在存儲(chǔ)服務(wù)器中的存儲(chǔ)位置,保存數(shù)據(jù)塊密文,然后返回步驟(8); (12)將該單鏈表發(fā)送回客戶端,并將所有數(shù)據(jù)塊的數(shù)據(jù)哈希值F1的密文E(F1)寫入到存儲(chǔ)服務(wù)器的文件譜中; (13)釋放內(nèi)存中單鏈表的數(shù)據(jù)結(jié)構(gòu),備份過程結(jié)束; 二、恢復(fù)階段,其包括以下步驟: (14)接收用戶提交的恢復(fù)請(qǐng)求;具體而言,該等信息,由備份服務(wù)器根據(jù)文件這些信息等查找到該文件指定的存儲(chǔ)服務(wù)器。 (15)從存儲(chǔ)服務(wù)器中查找該恢復(fù)文件對(duì)應(yīng)的文件譜,將文件譜中的所有內(nèi)容包括所有數(shù)據(jù)塊哈希值F1的密文E (F1)、文件名、文件路徑等信息讀出,并以指紋流的形式發(fā)送回客戶端; (16)通過使用LockBox機(jī)制取出用戶的私有密鑰,并對(duì)接收到的數(shù)據(jù)塊哈希值F1的密文(E (F1))使用用戶的私有密鑰進(jìn)行解密,并將解密得到的數(shù)據(jù)塊哈希值F1以單鏈表結(jié)構(gòu)保存在內(nèi)存中; (17)對(duì)數(shù)據(jù)塊哈希值F1使用備份過程中相同的哈希算法再次求取哈希值,以得到數(shù)據(jù)塊指紋F2,并將其發(fā)送回存儲(chǔ)服務(wù)器;具體而言,本發(fā)明采用的是SHA-1算法計(jì)算哈希值; (18)根據(jù)數(shù)據(jù)塊指紋F2找到數(shù)據(jù)塊,并將數(shù)據(jù)塊發(fā)送回客戶端; (19)對(duì)接收到的數(shù)據(jù)塊進(jìn)行解密和解壓縮處理,并寫入文件; (20)釋放內(nèi)存中保存的數(shù)據(jù)塊哈希值F1的單鏈表數(shù)據(jù)結(jié)構(gòu),恢復(fù)過程結(jié)束。
2.根據(jù)權(quán)利要求1所述的安全數(shù)據(jù)去重方法,其特征在于,備份請(qǐng)求包括需要備份的文件名、文件的路徑、文件的大小、文件的備份時(shí)間,恢復(fù)請(qǐng)求包括恢復(fù)文件對(duì)象、恢復(fù)文件名、恢復(fù)路徑。
3.根據(jù)權(quán)利要求1所述的安全數(shù)據(jù)去重方法,其特征在于, 哈希算法采用的是SHA-1方法; 經(jīng)典加密算法采用的是AES算法; 用戶的私有密鑰是通過Lockbox機(jī)制進(jìn)行保護(hù)。
4.根據(jù)權(quán)利要求1所述的安全數(shù)據(jù)去重方法,其特征在于,步驟(7)包括以下子步驟: (7-1)設(shè)置計(jì)數(shù)器i=l,判斷i是否大于nChunkNum。如果是則轉(zhuǎn)入步驟(8),否則轉(zhuǎn)入步驟(7-2); (7-2)對(duì)需要備份的文件的指紋段中的內(nèi)容進(jìn)行解析,以得到第i個(gè)數(shù)據(jù)塊的數(shù)據(jù)塊指紋F2、數(shù)據(jù)塊長(zhǎng)度等信息; (7-3)在存儲(chǔ)服務(wù)器的指紋庫(kù)中判斷是否可查找到數(shù)據(jù)塊指紋F2,如果可查找到,則表明第i個(gè)數(shù)據(jù)塊為重復(fù)塊,以指紋F2為索引條件直接指向已存在的數(shù)據(jù)塊;反之,則表明第i個(gè)數(shù)據(jù)塊是新數(shù)據(jù)塊,根據(jù)指紋F2為索引條件設(shè)置該新數(shù)據(jù)塊在存儲(chǔ)服務(wù)器中的存儲(chǔ)位置 (7-4)設(shè)置計(jì)數(shù)器i=i+l,建立新結(jié)點(diǎn),將第i個(gè)數(shù)據(jù)塊是否重復(fù)的信息寫入該結(jié)點(diǎn),并將單鏈表的尾指針指向該結(jié)點(diǎn),并且尾指針后移一位,然后返回步驟(7-1)。
5.根據(jù)權(quán)利要求1所述的安全數(shù)據(jù)去重方法,其特征在于,步驟(9)中數(shù)據(jù)塊哈希值F1作為加密密鑰采用PBE的加密策略對(duì)安全性進(jìn)行處理,并對(duì)密鑰長(zhǎng)度進(jìn)行調(diào)整。
6.根據(jù)權(quán)利要求1所述的安全數(shù)據(jù)去重方法,其特征在于,步驟(18)具體為,根據(jù)數(shù)據(jù)塊指紋F2讀取恢復(fù)文件對(duì)應(yīng)的相似性容器,遍歷文件譜中的指紋鏈表,以找到所有數(shù)據(jù)塊對(duì)應(yīng)的容器的ID,讀出容器中相應(yīng)的密文數(shù)據(jù)塊,并將密文數(shù)據(jù)塊和數(shù)據(jù)塊個(gè)數(shù)nChunkNum以數(shù)據(jù)流的形式傳輸回客戶端,并發(fā)送校驗(yàn)流到客戶端。
7.根據(jù)權(quán)利要求1所述的安全數(shù)據(jù)去重方法,其特征在于,步驟(19)包括以下子步驟: (19-1)設(shè)置計(jì)數(shù)器k=0,判斷k是否大于nChunkNum,如果是轉(zhuǎn)步驟(20),否則轉(zhuǎn)步驟(19-2); (19-2)根據(jù)文件譜中包含的文件名、文件路徑等信息找到本地磁盤位置創(chuàng)建新文件;(19-3)調(diào)用在內(nèi)存中保存的數(shù)據(jù)塊哈希值F1,以數(shù)據(jù)塊哈希值F1為數(shù)據(jù)塊解密密鑰對(duì)第k個(gè)數(shù)據(jù)塊進(jìn)行解密,采用文件壓縮算法壓縮(GNUzip,簡(jiǎn)稱gzip),并將該明文數(shù)據(jù)塊內(nèi)容寫入到文件中,置k=k+l,轉(zhuǎn)步驟(19-1 )。
8.一種適用于備份系統(tǒng)的安全數(shù)據(jù)去重系統(tǒng),其特征在于,包括: 第一模塊,用于接收用戶提交的備份請(qǐng)求; 第二模塊,用于對(duì)需要備份的每個(gè)文件進(jìn)行分塊,以得到多個(gè)不同大小的數(shù)據(jù)塊; 第三模塊,用于使用哈希算法計(jì)算每個(gè)數(shù)據(jù)塊的哈希值F1 ; 第四模塊,用于再 次使用哈希算法計(jì)算每個(gè)數(shù)據(jù)塊哈希值F1的哈希值F2,并將哈希值F2作為該數(shù)據(jù)塊的指紋,并采用經(jīng)典加密算法使用用戶的私鑰對(duì)數(shù)據(jù)塊的哈希值F1進(jìn)行加密以得到數(shù)據(jù)哈希值F1的密文E (F1);第五模塊,用于將文件的數(shù)據(jù)塊個(gè)數(shù)nChunkNum,所有數(shù)據(jù)塊指紋F2等打包成指紋段并記錄,順序?qū)⑺兄讣y段以指紋流的形式發(fā)送傳輸?shù)酱鎯?chǔ)服務(wù)器,并發(fā)送校驗(yàn)流到存儲(chǔ)服務(wù)器; 第六模塊,用于在存儲(chǔ)服務(wù)器的內(nèi)存中建立用于記錄該文件的數(shù)據(jù)塊是否重復(fù)的單鏈表; 第七模塊,用于根據(jù)指紋段和文件數(shù)據(jù)塊個(gè)數(shù)nChunkNum在存儲(chǔ)服務(wù)器端進(jìn)行數(shù)據(jù)去重的操作過程; 第八模塊,用于在客戶端準(zhǔn)備備份非重復(fù)的數(shù)據(jù)塊,設(shè)置計(jì)數(shù)器j=l,并判斷j是否大于nChunkNum,如果是則轉(zhuǎn)第十二模塊,否則轉(zhuǎn)第九模塊; 第九模塊,用于對(duì)于第j個(gè)數(shù)據(jù)塊,如果其是重復(fù)的數(shù)據(jù)塊,則不予發(fā)送;如果其是新的數(shù)據(jù)塊,采用文件壓縮算法壓縮,并以數(shù)據(jù)塊哈希值F1作為第j個(gè)數(shù)據(jù)塊的數(shù)據(jù)塊加密密鑰,并使用該數(shù)據(jù)塊加密密鑰和經(jīng)典加密算法對(duì)第j個(gè)數(shù)據(jù)塊加密,得到的密文數(shù)據(jù)塊; 第十模塊,用于將加密后的密文數(shù)據(jù)塊和數(shù)據(jù)塊哈希值F1的密文E (F1)以數(shù)據(jù)流的形式發(fā)送至存儲(chǔ)服務(wù)器,并發(fā)送校驗(yàn)流到存儲(chǔ)服務(wù)器,設(shè)置j=j+l ; 第十一模塊,用于根據(jù)第j個(gè)數(shù)據(jù)塊在存儲(chǔ)服務(wù)器中的存儲(chǔ)位置,保存數(shù)據(jù)塊密文,然后返回第八模塊; 第十二模塊,用于將該單鏈表發(fā)送回客戶端,并將所有數(shù)據(jù)塊的數(shù)據(jù)哈希值F1的密文E(F1)寫入到存儲(chǔ)服務(wù)器的文件譜中;` 第十三模塊,用于釋放內(nèi)存中單鏈表的數(shù)據(jù)結(jié)構(gòu),備份過程結(jié)束; 第十四模塊,用于接收用戶提交的恢復(fù)請(qǐng)求;具體而言,該等信息,由備份服務(wù)器根據(jù)文件這些信息等查找到該文件指定的存儲(chǔ)服務(wù)器。 第十五模塊,用于從存儲(chǔ)服務(wù)器中查找該恢復(fù)文件對(duì)應(yīng)的文件譜,將文件譜中的所有內(nèi)容包括所有數(shù)據(jù)塊哈希值F1的密文E (F1)、文件名、文件路徑等信息讀出,并以指紋流的形式發(fā)送回客戶端; 第十六模塊,用于通過使用LockBox機(jī)制取出用戶的私有密鑰,并對(duì)接收到的數(shù)據(jù)塊哈希值F1的密文(E (F1))使用用戶的私有密鑰進(jìn)行解密,并將解密得到的數(shù)據(jù)塊哈希值F1以單鏈表結(jié)構(gòu)保存在內(nèi)存中; 第十七模塊,用于對(duì)數(shù)據(jù)塊哈希值F1使用備份過程中相同的哈希算法再次求取哈希值,以得到數(shù)據(jù)塊指紋F2,并將其發(fā)送回存儲(chǔ)服務(wù)器;具體而言,本發(fā)明采用的是SHA-1算法計(jì)算哈希值; 第十八模塊,用于根據(jù)數(shù)據(jù)塊指紋F2找到數(shù)據(jù)塊,并將數(shù)據(jù)塊發(fā)送回客戶端; 第十九模塊,用于對(duì)接收到的數(shù)據(jù)塊進(jìn)行解密和解壓縮處理,并寫入文件; 第二十模塊,用于釋放內(nèi)存中保存的數(shù)據(jù)塊哈希值F1的單鏈表數(shù)據(jù)結(jié)構(gòu),恢復(fù)過程結(jié)束。
【文檔編號(hào)】H04L9/32GK103530201SQ201310301670
【公開日】2014年1月22日 申請(qǐng)日期:2013年7月17日 優(yōu)先權(quán)日:2013年7月17日
【發(fā)明者】馮丹, 周玉坤, 夏文, 付忞, 黃方亭 申請(qǐng)人:華中科技大學(xué)