張 品,李佳楠
(杭州電子科技大學(xué)通信工程學(xué)院,浙江 杭州 310018)
數(shù)據(jù)去重技術(shù)又稱重復(fù)數(shù)據(jù)刪除技術(shù),是一種云端數(shù)據(jù)壓縮技術(shù),即每個(gè)數(shù)據(jù)只保留一份,并為擁有相同數(shù)據(jù)副本的授權(quán)用戶創(chuàng)建訪問(wèn)鏈接,大大節(jié)省了網(wǎng)絡(luò)帶寬和存儲(chǔ)空間[1]。隨著信息安全問(wèn)題日益凸出,用戶對(duì)數(shù)據(jù)隱私越來(lái)越重視,不再直接將數(shù)據(jù)外包到云服務(wù)器上,而是將數(shù)據(jù)加密后上傳到云服務(wù)器[2]。由于不同用戶選擇不同的密鑰進(jìn)行加密,導(dǎo)致相同數(shù)據(jù)被加密成不同的密文,給數(shù)據(jù)去重技術(shù)帶來(lái)困難[3]。Douceur等[4]首次提出了收斂加密(Convergent Encryption,CE)用于平衡數(shù)據(jù)隱私性和去重高效性,但該方法的密鑰過(guò)于依賴明文數(shù)據(jù),在信息熵較低時(shí),容易遭受離線字典攻擊。在CE算法的基礎(chǔ)上,Bellare等[5]提出了消息鎖加密(Message-Locked Encryption,MLE),其本質(zhì)與CE算法相同,并不能解決語(yǔ)義安全問(wèn)題。Bellare等[6]改進(jìn)了MLE算法,提出交互式MLE(interactive MLE,i-MLE),采用同態(tài)加密保證了內(nèi)容的語(yǔ)義安全,但計(jì)算開(kāi)銷過(guò)大。Puzio等[7]提出ClouDedup方案,通過(guò)引入1個(gè)額外的服務(wù)器和元數(shù)據(jù)管理器(Metadata Manager,MM)來(lái)增強(qiáng)數(shù)據(jù)的機(jī)密性,但要求第三方服務(wù)器完全可信,比較難實(shí)現(xiàn)。Bellare等[8]提出DupLESS方案,數(shù)據(jù)的加密密鑰不再由明文導(dǎo)出,雖然能抵抗蠻力攻擊,但需要保證密鑰服務(wù)器(Key Server, KS)不能與云服務(wù)器合謀。Wang等[9]提出一種密文安全去重方案,借助1個(gè)索引服務(wù)器(Index Sever,IS)進(jìn)行密鑰的傳遞,使得擁有相同數(shù)據(jù)副本的用戶共享同一密鑰,實(shí)現(xiàn)了對(duì)加密數(shù)據(jù)的去重,但因?yàn)榈谌椒?wù)器在實(shí)際布置中存在技術(shù)限制,易成為系統(tǒng)瓶頸[10-11]。
針對(duì)現(xiàn)有數(shù)據(jù)去重方案存在的問(wèn)題,本文提出一種改進(jìn)的加密數(shù)據(jù)去重方案,不需要其他用戶的輔助,簡(jiǎn)化了密鑰傳遞的過(guò)程。通過(guò)添加額外的安全機(jī)制,使得非授權(quán)用戶無(wú)法下載數(shù)據(jù),降低了標(biāo)簽生成過(guò)程的計(jì)算開(kāi)銷,執(zhí)行效率更高。
給定G,GT是2個(gè)階數(shù)為p的乘法循環(huán)群,g是群G的生成元,定義雙線性映射e∶G×G→GT具有以下性質(zhì)[12-13]:
(1)雙線性:對(duì)于任意的a,b∈Zp,u,v∈G,都有e(ua,vb)=e(u,v)ab。
(2)非退化性:對(duì)于任意的g∈G,都有e(g,g)≠1。
(3)可計(jì)算性:對(duì)于任意的的u,v∈G,e(u,v)是可計(jì)算的。
本文提出的基于密鑰傳遞的加密數(shù)據(jù)安全去重方案主要考慮用戶和云服務(wù)器兩大實(shí)體。將數(shù)據(jù)外包到云服務(wù)器中以節(jié)省本地存儲(chǔ)空間和成本投入。為了保證數(shù)據(jù)的隱私性,選擇在進(jìn)行數(shù)據(jù)外包之前進(jìn)行加密。用戶(User,U)分為2類,一類是數(shù)據(jù)的初始上傳者,另一類是數(shù)據(jù)的后續(xù)上傳者。云服務(wù)器(Cloud Service Provider,CSP)主要提供數(shù)據(jù)存儲(chǔ)服務(wù)。
本文通過(guò)雙線性映射來(lái)構(gòu)建方案,在不泄露明文信息的前提下,云服務(wù)器可以驗(yàn)證加密數(shù)據(jù)是否來(lái)自同一明文。加密密鑰不再是由明文確定性生成,而是由用戶隨機(jī)選擇的,密鑰傳遞過(guò)程中無(wú)需可信第三方服務(wù)器和實(shí)時(shí)在線用戶的參與。通過(guò)Elgamal算法[14]進(jìn)行密鑰傳遞,保證傳遞過(guò)程的安全性。方案分3個(gè)階段執(zhí)行,分別為系統(tǒng)初始化、文件上傳、文件下載。
本文所用到的符號(hào)定義如表1所示。
表1 符號(hào)定義
在初始化階段,由系統(tǒng)定義2個(gè)階數(shù)為大素?cái)?shù)p的乘法循環(huán)群G,GT,g為群G的生成元,定義雙線性映射e∶G×G→GT。為Elgamal加密算法定義1個(gè)階數(shù)為大素?cái)?shù)q的乘法循環(huán)群G1,g1是該群的1個(gè)生成元。h1∶{0,1}*→Zp,h2∶{0,1}*→Zq是2個(gè)安全抗碰撞的哈希函數(shù)[15],H(·)是1個(gè)SHA256哈希函數(shù)。E(·)和D(·)表示對(duì)稱加密和對(duì)稱解密過(guò)程,Enc(·)和Dec(·)表示Elgamal算法的加密和解密過(guò)程。CSP生成(MK,SK)作為系統(tǒng)的主公鑰和主私鑰,并為每個(gè)加入系統(tǒng)的用戶生成唯一的身份標(biāo)識(shí)ID以及公私鑰對(duì)(sk,pk)。
在文件上傳階段,主要分為2種情形:一是文件第1次上傳,二是文件的重復(fù)上傳。
情形1假設(shè)用戶A作為數(shù)據(jù)F的初始上傳者,執(zhí)行流程如下:
(1)生成密鑰KenGen(x,p,g)→KA。用戶A隨機(jī)選擇1個(gè)x∈Zp,計(jì)算KA=gx作為自己的加密密鑰。
(2)生成去重檢測(cè)標(biāo)簽DedupToken(ti,F)→Tf。用戶輸入?yún)?shù)ti和文件數(shù)據(jù)F,輸出檢測(cè)標(biāo)簽。具體生成為Tf=(gti,gtih1(F)),其中ti是1個(gè)隨機(jī)數(shù),并且ti∈Zp。
(3)加密數(shù)據(jù)E(KA,F)→CF。用戶使用自己的密鑰KA對(duì)數(shù)據(jù)F進(jìn)行加密,生成密文CF。
(5)生成密文標(biāo)簽TokenGen(CF)→TC。用戶將加密后的數(shù)據(jù)密文CF作為輸入,經(jīng)H(CF)后生成標(biāo)簽TC,用來(lái)驗(yàn)證標(biāo)簽和密文的一致性。
(6)上傳數(shù)據(jù)Upload。用戶將身份標(biāo)識(shí)ID、數(shù)據(jù)密文CF、去重標(biāo)簽Tf、密鑰密文KC以及密文標(biāo)簽TC一同上傳到CSP中,用戶自己只需保存h2(F)、身份標(biāo)識(shí)ID和Tf用于下載數(shù)據(jù)解密時(shí)使用。
情景2假設(shè)用戶B作為數(shù)據(jù)F的后續(xù)上傳者,執(zhí)行流程如下:
(1)生成密鑰KeyGen(y,p,g)→KB。用戶B隨機(jī)選擇1個(gè)y∈Zp,計(jì)算KB=gy作為自己的加密密鑰。
(2)生成去重檢測(cè)標(biāo)簽DedupToken(tj,F)→Tf。用戶輸入?yún)?shù)tj和文件數(shù)據(jù)F,輸出檢測(cè)標(biāo)簽。具體生成為Tf=(gtj,gtjh1(F))。將檢測(cè)標(biāo)簽上傳到CSP中,由CSP對(duì)比云服務(wù)器中已經(jīng)存在的標(biāo)簽,計(jì)算e(gti,gtjh1(F))和e(gtj,gtih1(F))是否相等,若兩者相等則表示該數(shù)據(jù)已經(jīng)存在,不需要用戶再次上傳,需要進(jìn)行所有權(quán)驗(yàn)證。
(4)所有權(quán)證明階段(Proof of Ownership,POW)[16-17]。為了確保用戶確實(shí)持有與其上傳的標(biāo)簽相對(duì)應(yīng)的完整數(shù)據(jù),由CSP和用戶執(zhí)行POW交互協(xié)議,主要分為3個(gè)步驟。
①生成挑戰(zhàn)信息POWChal,由CSP執(zhí)行。CSP對(duì)存儲(chǔ)的加密數(shù)據(jù)進(jìn)行固定分塊,即C={C1,C2,C3,…,Ci},隨機(jī)抽取若干個(gè)塊信息,將塊的位置信息C0={C1,C2,…,Ck}作為挑戰(zhàn)信息以加密認(rèn)證的方式Enc(pkUB,C0)發(fā)送給用戶。
②生成挑戰(zhàn)證據(jù)POWPro,由用戶執(zhí)行。用戶接受到CSP的挑戰(zhàn)信息后,先用自己的私鑰skUB解密得到C0。根據(jù)得到的挑戰(zhàn)信息集合計(jì)算Hpro={H(C1),H(C2),…,H(Ck)},并按照一定的順序采用加密認(rèn)證的方式Enc(MK,Hpro)將挑戰(zhàn)證據(jù)返回給CSP。
③驗(yàn)證挑戰(zhàn)信息POWVer,由CSP執(zhí)行。CSP接受到用戶的證明信息后,使用自己的私鑰SK通過(guò)相同的方式對(duì)密文數(shù)據(jù)塊進(jìn)行計(jì)算,將計(jì)算的結(jié)果與Hpro進(jìn)行對(duì)比,如果相等則用戶通過(guò)POW證明,將用戶的身份標(biāo)識(shí)ID添加到授權(quán)用戶列表中;否則用戶挑戰(zhàn)失敗。
用戶需要下載數(shù)據(jù)F時(shí),先向CSP發(fā)送下載請(qǐng)求,再將身份標(biāo)識(shí)ID和檢測(cè)標(biāo)簽Tf一同發(fā)送給CSP。CSP收到請(qǐng)求后,首先檢測(cè)Tf所對(duì)應(yīng)的文件是否存在,如果存在則進(jìn)一步檢查該用戶的ID是否在文件的授權(quán)列表中,只有確定該用戶是數(shù)據(jù)F的擁有者后,才能將密鑰密文KC和數(shù)據(jù)密文CF返還給用戶。
(2)解密數(shù)據(jù)D(KA,CF)→F。通過(guò)數(shù)據(jù)密鑰運(yùn)行解密算法得到數(shù)據(jù)F。
實(shí)驗(yàn)在1臺(tái)聯(lián)想Lenovo Y700計(jì)算機(jī)上進(jìn)行,操作系統(tǒng)為Windows 10,配置為Intel(R)Core(TM)i5-6300HQ CPU@2.30Hz 2.30GHz,內(nèi)存為8 GB,編程語(yǔ)言為Java,哈希函數(shù)采用SHA-256,加密算法為對(duì)稱加密AES-256,雙線性映射構(gòu)造從JPBC庫(kù)[18]中調(diào)取,所使用的加密算法均來(lái)自O(shè)PENSSL函數(shù)庫(kù)。
為了對(duì)方案的計(jì)算開(kāi)銷有一個(gè)定量的描述,對(duì)各種運(yùn)算采用符號(hào)表示。Hash表示SHA-256,Exp和XOR分別表示指數(shù)運(yùn)算和異或操作,PE表示雙線性映射計(jì)算,Elgamal表示執(zhí)行1次Elgamal算法。以1個(gè)數(shù)據(jù)初始上傳者為例,將本文方案和文獻(xiàn)[9]方案在標(biāo)簽生成階段和密鑰傳遞階段所需的執(zhí)行操作進(jìn)行對(duì)比,結(jié)果如表2所示。
表2 不同方案在各階段的執(zhí)行操作
隨機(jī)生成不同大小的文件,分別為2 MB,4 MB,8 MB,16 MB,32 MB,64 MB和128 MB,使用本文方案和文獻(xiàn)[9]方案進(jìn)行文件上傳,取10次實(shí)驗(yàn)的平均值。不同大小的文件在標(biāo)簽生成階段的計(jì)算開(kāi)銷如圖1所示。
圖1 標(biāo)簽生成階段中,不同方案的計(jì)算開(kāi)銷
由圖1可知,在標(biāo)簽生成階段,本文方案的計(jì)算開(kāi)銷遠(yuǎn)小于文獻(xiàn)[9]方案,這是因?yàn)槲墨I(xiàn)[9]中標(biāo)簽生成采用Merkle哈希樹(shù)構(gòu)造,文件的分塊耗費(fèi)了大量時(shí)間,同時(shí),文獻(xiàn)[9]方案采用1 024個(gè)葉子節(jié)點(diǎn),需要計(jì)算2 047次哈希運(yùn)算;而本文方案計(jì)算標(biāo)簽時(shí),只需要1次哈希運(yùn)算和2次指數(shù)運(yùn)算,運(yùn)算量大大減少。
密鑰分發(fā)階段中,本文方案與文獻(xiàn)[9]方案的計(jì)算開(kāi)銷如表3所示。
表3 密鑰分發(fā)階段中,不同方案的計(jì)算開(kāi)銷 單位:ms
結(jié)合表2、表3和圖1可以看出,本文方案的計(jì)算開(kāi)銷要小于文獻(xiàn)[9]的去重方案。
本文方案中,數(shù)據(jù)初始上傳者和后續(xù)上傳者的總計(jì)算開(kāi)銷如圖2所示。從圖2可以看出,與數(shù)據(jù)初始上傳者相比,當(dāng)上傳的數(shù)據(jù)已經(jīng)存在時(shí),數(shù)據(jù)后續(xù)上傳者需要與CSP執(zhí)行POW來(lái)證明自己的數(shù)據(jù)擁有權(quán),計(jì)算開(kāi)銷要大于數(shù)據(jù)初始上傳者。
圖2 不同用戶的總計(jì)算開(kāi)銷對(duì)比
除了計(jì)算開(kāi)銷,在執(zhí)行數(shù)據(jù)去重的過(guò)程中還產(chǎn)生額外的通信開(kāi)銷和存儲(chǔ)開(kāi)銷。對(duì)于數(shù)據(jù)F,CID,CC,CK分別表示用戶標(biāo)識(shí)大小、密文大小、密鑰密文大小,CT,Csk,CS分別表示去重標(biāo)簽大小、用戶私鑰大小、隨機(jī)密鑰大小,Ch,CP,CV分別表示數(shù)據(jù)的哈希值、挑戰(zhàn)信息大小、證明信息大小,Ct表示系統(tǒng)參數(shù)。
通信開(kāi)銷主要產(chǎn)生于數(shù)據(jù)上傳、數(shù)據(jù)下載階段。本文方案和文獻(xiàn)[9]方案的通信開(kāi)銷如表4所示。
表4 不同方案的通信開(kāi)銷
從表4可以看出,相較于初始上傳者,數(shù)據(jù)后續(xù)上傳者不需要重復(fù)上傳數(shù)據(jù)密文,節(jié)省了通信開(kāi)銷。在數(shù)據(jù)的后續(xù)上傳階段,相較于文獻(xiàn)[9]方案,本文方案有額外的用戶標(biāo)識(shí)以及密鑰密文的開(kāi)銷,這是因?yàn)槲墨I(xiàn)[9]方案通過(guò)KS實(shí)現(xiàn)了對(duì)加密密鑰的管理,而本文方案則需要數(shù)據(jù)后續(xù)上傳者向CSP獲取密鑰。因此,在數(shù)據(jù)后續(xù)上傳階段,本文方案的通信開(kāi)銷要略大于文獻(xiàn)[9]。
存儲(chǔ)開(kāi)銷主要包括云服務(wù)器端、用戶端和額外服務(wù)器端。N表示合法用戶數(shù)量,本文方案和文獻(xiàn)[9]方案的存儲(chǔ)開(kāi)銷如表5所示。
表5 不同方案的存儲(chǔ)開(kāi)銷
從表5可以看出,本文方案和文獻(xiàn)[9]方案均實(shí)現(xiàn)了對(duì)加密數(shù)據(jù)的安全去重,但本文方案沒(méi)有可信第三方服務(wù)器的參與,不會(huì)出現(xiàn)服務(wù)器單點(diǎn)故障等問(wèn)題,可靠性更強(qiáng)。
本文提出一種基于密鑰傳遞的無(wú)可信第三方加密數(shù)據(jù)去重方案,實(shí)現(xiàn)了對(duì)加密數(shù)據(jù)的高效去重,擺脫了第三方服務(wù)器的束縛,提高了方案的實(shí)用性,計(jì)算開(kāi)銷更少、執(zhí)行效率更高。本方案中,數(shù)據(jù)的加密密鑰由用戶隨機(jī)選取,避免了CE算法中易遭受離線字典攻擊的問(wèn)題。但是,本文研究在數(shù)據(jù)去重的粒度方面以及所有權(quán)變更方面考慮不全,下一步將著重研究數(shù)據(jù)塊級(jí)別的去重,并針對(duì)用戶數(shù)據(jù)所有權(quán)變更提出相應(yīng)的應(yīng)對(duì)對(duì)策。