吳 波,柳 毅
廣東工業(yè)大學(xué) 計(jì)算機(jī)學(xué)院,廣州510006
由于云計(jì)算提供靈活、經(jīng)濟(jì)的云存儲(chǔ)服務(wù),促使企業(yè)和個(gè)人選擇將數(shù)據(jù)外包給云服務(wù)器,根據(jù)IDC的分析報(bào)道,2020年全球數(shù)據(jù)量將超過(guò)44 ZB。隨著存儲(chǔ)數(shù)據(jù)的快速增長(zhǎng),急需高效可行的技術(shù)有效利用存儲(chǔ)空間和網(wǎng)絡(luò)帶寬。為了降低云存儲(chǔ)中數(shù)據(jù)重復(fù)率很多云服務(wù)(例如Dropbox、Google Drive)提供商采用數(shù)據(jù)去重(Deduplication)技術(shù)[1],實(shí)現(xiàn)在云服務(wù)器中只存儲(chǔ)冗余數(shù)據(jù)的一個(gè)副本,有效節(jié)約存儲(chǔ)空間,降低網(wǎng)絡(luò)帶寬,然而,從安全性來(lái)講,跨用戶數(shù)據(jù)共享帶來(lái)了新的挑戰(zhàn)。
由于用戶更關(guān)心他們數(shù)據(jù)的隱私,一般在上傳數(shù)據(jù)至云服務(wù)器之前會(huì)對(duì)數(shù)據(jù)進(jìn)行加密處理,由于加密算法的隨機(jī)性,相同數(shù)據(jù)的多個(gè)用戶利用不同加密密鑰產(chǎn)生不同的密文,使得云服務(wù)器不能判斷明文是否相同并去重,因此傳統(tǒng)的加密方案不能同時(shí)實(shí)現(xiàn)去重和加密。為了使加密數(shù)據(jù)去重復(fù)成為可能,Douceur等人[2]提出了收斂加密(Convergent Encryption,CE),后續(xù)很多CE方案的變體被提出[3-6]。由于CE 方案存在標(biāo)簽一致性問(wèn)題,LR[7](Leakage-Resilient)方案被提出,Bellare M等人提出消息鎖加密(Message-Locked Encryption,MLE)[8],同時(shí),他們構(gòu)造了一種隨機(jī)化收斂加密方案(Randomized Convergent Encryption,RCE)用于強(qiáng)化原有方案的安全性。一些方案[9-10]借助可信第三方進(jìn)行數(shù)據(jù)管理,從而保證用戶數(shù)據(jù)的機(jī)密性。但增加可信第三方使得開(kāi)銷過(guò)大,在實(shí)際的云服務(wù)系統(tǒng)中難以實(shí)現(xiàn)。
然而,以上方案都忽略了所有權(quán)撤銷問(wèn)題,即云用戶刪除、修改原數(shù)據(jù)。如果用戶撤銷文件所有權(quán)之后保留加密密鑰,那他依舊可以正確解密密文。如何阻止未授權(quán)用戶訪問(wèn)加密數(shù)據(jù)[11]實(shí)現(xiàn)動(dòng)態(tài)所有權(quán)管理已經(jīng)成為一個(gè)研究熱點(diǎn)。為了實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)去重,文獻(xiàn)[12]提出了基于會(huì)話密鑰的收斂密鑰管理方案(SKC)和收斂密鑰共享方案(CKS)。文獻(xiàn)[13]第一次提出了基于PAKE協(xié)議的數(shù)據(jù)去重方案,該方案不需要可信第三方,支持客戶端數(shù)據(jù)加密。文獻(xiàn)[14]提出基于隨機(jī)標(biāo)簽的安全去重方案,提出了一個(gè)新的原語(yǔ)R-MLE2。基于動(dòng)態(tài)所有權(quán)管理和代理重加密,文獻(xiàn)[15]提出了云存儲(chǔ)中加密大數(shù)據(jù)去重方案。文獻(xiàn)[16]提出了一種云存儲(chǔ)中基于動(dòng)態(tài)所有權(quán)管理的安全去重技術(shù),利用二進(jìn)制KEK(Key-Encrypting Key)樹(shù)更新重加密密鑰,該方案考慮了密鑰更新問(wèn)題和動(dòng)態(tài)所有權(quán)問(wèn)題,但是KEK數(shù)量與云用戶數(shù)量正相關(guān),當(dāng)云中用戶規(guī)模龐大時(shí),存儲(chǔ)開(kāi)銷過(guò)大,并且該方案不支持新用戶加入,當(dāng)有更多的用戶加入到云中,超過(guò)有限數(shù)量時(shí),該方案無(wú)法適應(yīng)。文獻(xiàn)[17]提出一種無(wú)須代理重加密的基于動(dòng)態(tài)用戶管理的安全可伸縮重復(fù)數(shù)據(jù)刪除技術(shù),該方案利用重加密實(shí)現(xiàn)動(dòng)態(tài)所有權(quán)管理,添加訪問(wèn)控制技術(shù)減少通信開(kāi)銷,但該方案在重加密密鑰更新太過(guò)頻繁,計(jì)算開(kāi)銷大。
針對(duì)上述方案所存在的問(wèn)題,本文提出一種無(wú)須代理重加密的高效加密數(shù)據(jù)去重技術(shù),實(shí)現(xiàn)動(dòng)態(tài)所有權(quán)管理,限制未授權(quán)或撤銷所有權(quán)的用戶訪問(wèn)數(shù)據(jù);采用隨機(jī)收斂加密實(shí)現(xiàn)標(biāo)簽一致性,確保數(shù)據(jù)完整,有效抵抗污染攻擊;同時(shí),構(gòu)造了基于Bloom Filter 的所有權(quán)證明,結(jié)合延遲更新策略減少重加密密鑰更新頻率,降低計(jì)算開(kāi)銷,提升去重效率。
隨機(jī)收斂加密(Randomized Convergent Encryption,RCE)是收斂加密[1]的一個(gè)變體。它包括以下幾個(gè)算法:
RCE.KeyGen(M)→K :密鑰生成算法。K 是從數(shù)據(jù)M 中派生出來(lái),通常由哈希函數(shù)生成,即K=H(M),作為加密密鑰的密鑰(Key-Encryption Key,KEK),即用于加密密鑰L。
RCE.Enc(M,K)→(C,T):隨機(jī)收斂加密算法。輸入隨機(jī)密鑰L 和明文M ,輸出密文C=C1||C2 和數(shù)據(jù)標(biāo)簽T 。具體過(guò)程如下:
(1)Encrypt(L,M)→C1:加密算法。其中L 是選擇的隨機(jī)密鑰,輸入數(shù)據(jù)M 、加密密鑰L,輸出文件密文C1。
(2)KeyEncrypt(K,L)→C2:密鑰加密算法。輸入加密密鑰的密鑰K 、密鑰L,輸出經(jīng)過(guò)加密算法的密鑰密文C2(C2=K ⊕L)。
(3)TagGen(K)→T :標(biāo)簽生成算法。輸入K ,輸出文件標(biāo)簽T 。
RCE.Dec(C,K)→M :隨機(jī)收斂解密算法。它包含兩個(gè)部分,首先從C2 中獲得隨機(jī)密鑰L,L=C2 ⊕K,然后用L 解密密文得到明文M ,M=Decrypt(L,C1)。
一個(gè)Elgamal[18]公鑰加密方案包括以下3個(gè)算法:
定義G 是一個(gè)p 階乘法循環(huán)群,g ∈Zp是G 的生成元。
KeyGeneration(p,G,g)→(e,d) :密鑰生成算法。輸入p、G、g ,輸出公鑰e 和私鑰d 。用戶隨機(jī)選擇一個(gè)元素x ∈Zp,計(jì)算X=gxmod p,公鑰e=(p,G,g,X),私鑰d=(p,G,g,x)。
Enc(e,M)→C:加密算法。輸入私鑰e 和數(shù)據(jù)M,輸出密文C。用戶隨機(jī)選擇元素k ∈?p,首先計(jì)算C1=gkmod p,C2=mXkmod p,然后輸出密文C=C1||C2。
Dec(d,C)→M :解密算法。輸入私鑰d 和密文C,輸出明文M=C2/C1xmod p。
Bloom Filter[19]是一種概率數(shù)據(jù)結(jié)構(gòu),通常由一個(gè)m 比特的二進(jìn)制向量和k 個(gè)哈希函數(shù)組成,用于驗(yàn)證一個(gè)元素是否在一個(gè)集合中,空間效率和查詢時(shí)間都遠(yuǎn)遠(yuǎn)超過(guò)一般的算法,缺點(diǎn)是有一定的誤識(shí)別率。首先,Bloom Filter初始化把所有比特位置為0,假設(shè)集合中有n 個(gè)元素,通過(guò)k 個(gè)哈希函數(shù){H1,H2,…,Hk}計(jì)算每個(gè)元素的哈希值,把這k 個(gè)哈希值映射到向量{1,2,…,m} 中,把對(duì)應(yīng)的比特位置為1。如圖1 所示,n=3 ,k=3,箭頭指向的位置即是該元素經(jīng)過(guò)哈希計(jì)算后的哈希值所對(duì)應(yīng)的比特位(置為1)。
圖1 Bloom Filter映射關(guān)系圖
當(dāng)插入元素x 時(shí),把對(duì)應(yīng)Hi(x)(1 ≤i ≤k)的比特位置為1;當(dāng)查詢一個(gè)元素e 時(shí),計(jì)算{H1(e),H2(e),…,Hk(e)},查看對(duì)應(yīng)比特位是否全都為1,若不全都為1,則該集合一定不包含該元素,相反,該元素可能在集合中,這是因?yàn)锽loom Filter 有一定的誤識(shí)別率pf 。Bloom Filter報(bào)告某元素在集合中,但實(shí)際上該元素并不存在,這種現(xiàn)象稱為假陽(yáng)性(false positives)。隨著存入的元素?cái)?shù)量增加,誤識(shí)別率隨之增加。元素存在的誤識(shí)別率pf 計(jì)算公式如下,其中,k 表示哈希函數(shù)的個(gè)數(shù),m 表示布隆過(guò)濾器的長(zhǎng)度,n 表示插入的元素個(gè)數(shù):
如圖2所示,本文系統(tǒng)模型包括云用戶和云服務(wù)器。
圖2 系統(tǒng)模型
云用戶(Users):希望將數(shù)據(jù)上傳到云中節(jié)省存儲(chǔ)空間的客戶端。用戶將數(shù)據(jù)加密,把密文和索引信息(標(biāo)簽)上傳到云存儲(chǔ),如果云存儲(chǔ)中不存在該數(shù)據(jù),則該上傳者稱為初始上傳者(First Uploader,F(xiàn)U),否則稱為后續(xù)上傳者(Subsequent Uploader,SU)。另外,云存儲(chǔ)中共享相同數(shù)據(jù)的一組所有者稱為該數(shù)據(jù)的所有權(quán)組。
云服務(wù)提供商(Cloud Server Provider,CSP):提供云存儲(chǔ)服務(wù)的服務(wù)端,由云存儲(chǔ)和云服務(wù)器組成。云服務(wù)器負(fù)責(zé)維護(hù)存儲(chǔ)數(shù)據(jù)的所有權(quán)列表(由數(shù)據(jù)標(biāo)簽、所有者身份和相應(yīng)的公鑰組成),根據(jù)所有權(quán)組列表控制對(duì)存儲(chǔ)數(shù)據(jù)的訪問(wèn)。另外,對(duì)密鑰密文重加密實(shí)現(xiàn)動(dòng)態(tài)所有權(quán)管理,確保撤銷權(quán)限的用戶不能正確解密密文。
在本文方案的威脅模型中,將攻擊者來(lái)源分兩大類:
(1)內(nèi)部攻擊者。云服務(wù)器被認(rèn)為是誠(chéng)實(shí)但好奇的,即誠(chéng)實(shí)地執(zhí)行系統(tǒng)中分配的任務(wù),但是,它希望盡可能多地了解有關(guān)加密內(nèi)容的信息。因此,應(yīng)該防止云服務(wù)器訪問(wèn)加密數(shù)據(jù)的明文。
(2)外部攻擊者。通常指的是來(lái)自CSP外部的攻擊者,他們通過(guò)一些渠道獲得感興趣的文件的一些信息,比如文件的摘要,扮演數(shù)據(jù)所有者的角色與云服務(wù)器進(jìn)行交互,并希望通過(guò)該信息來(lái)獲得全部的數(shù)據(jù)。另外,外部攻擊者可能與合法的用戶進(jìn)行合作,或與內(nèi)部攻擊者進(jìn)行串謀。
(1)數(shù)據(jù)保密性和完整性:未經(jīng)授權(quán)的用戶(包括撤銷權(quán)限的用戶)不能正確解密云存儲(chǔ)中的數(shù)據(jù)密文。另外,云服務(wù)器是不完全可信的,因此要阻止云服務(wù)器非法訪問(wèn)云存儲(chǔ)中的加密數(shù)據(jù),也就是說(shuō)去重算法應(yīng)該允許數(shù)據(jù)的合法擁有者驗(yàn)證從從云存儲(chǔ)中下載的數(shù)據(jù)沒(méi)有被更改。
(2)抗污染攻擊:阻止惡意用戶上傳與數(shù)據(jù)摘要不符的數(shù)據(jù),防止數(shù)據(jù)污染。
(3)向前和向后保密:向前保密是指任意用戶在刪除或修改數(shù)據(jù)后應(yīng)被阻止訪問(wèn)該外包數(shù)據(jù);向后保密是指未獲得訪問(wèn)所有權(quán)之前,應(yīng)該阻止所有用戶訪問(wèn)外包數(shù)據(jù),包括數(shù)據(jù)的擁有者,在他獲得所有權(quán)之前同樣無(wú)法訪問(wèn)數(shù)據(jù)。
(4)抗合謀攻擊:保證云存儲(chǔ)中沒(méi)有合法所有權(quán)的未授權(quán)用戶即使與服務(wù)器合謀也無(wú)法正確解密密文。
本文方案主要包括以下計(jì)算算法:
PP ←Setup(1λ):由CSP運(yùn)行。輸入安全參數(shù)1λ,輸出為公共參數(shù)PP=(p,g,G,H),其中,G 是一個(gè)p 階乘法循環(huán)群,g 是它的生成元(g ∈?p);H 代表哈希函數(shù):{0,1}*→{0,1}n。
(C,T,token,X)←Encrypt(M):加密算法。輸入明文數(shù)據(jù)M ,云用戶運(yùn)行得到K ←RCE.KeyGen(M),運(yùn)行RCE.Enc(M,K)得到(C,T)=C1||C2 ←RCE.Enc(M,K),另外,云用戶計(jì)算數(shù)據(jù)摘要token ←TokenGen(C) ,最后,云用戶選取隨機(jī)數(shù)x ∈Zp作為私鑰,對(duì)應(yīng)的公鑰Xi=gximod p。
C′←Re-encrypt(C):對(duì)于密文C=C1||C2,云服務(wù)器首先生成組密鑰G ,然后重加密密鑰密文C2,得到C2'=EH(G)(C2),相應(yīng)的C'=C1||C2'。
C ←Re-decrypt(C') :對(duì)于密文C'=C1||C2' ,云用戶利用組密鑰G 解密C2'得到C2=DH(G)(C2'),獲得相應(yīng)的C=C1||C2。
M ←Decrypt(K,C,token):云用戶重新計(jì)算token'←TokenGen(C),判斷token'=token?如果兩者相等,運(yùn)行M ←RCE.Dec(C,K),反之表明服務(wù)器惡意篡改用戶存儲(chǔ)的數(shù)據(jù),用戶拒絕接收數(shù)據(jù)。
如圖3 所示,延遲更新是當(dāng)用戶上傳、下載文件時(shí)所有權(quán)組密鑰不需要立即更新,而是延遲更新,即在用戶刪除或修改文件時(shí)更新密鑰,實(shí)現(xiàn)高效動(dòng)態(tài)管理所有權(quán)。組密鑰更新步驟如下:
服務(wù)器設(shè)置ni=ni+1,選擇一個(gè)隨機(jī)數(shù)yni∈?p,Yni=gynimod p,計(jì)算得到新的所有權(quán)組密鑰在本文模型中,組密鑰由所有撤銷權(quán)限的用戶公鑰Xt和最近一次撤銷權(quán)限的用戶Y= gymod p 組成(Gi=X1…XiYi)。
本文中用戶下載、刪除或修改文件都需經(jīng)過(guò)身份認(rèn)證,只有通過(guò)身份認(rèn)證的用戶才能執(zhí)行以上所列操作。用戶下載、刪除或修改文件向服務(wù)器發(fā)送身份標(biāo)識(shí)IDi和文件標(biāo)簽Ti,服務(wù)器在接收到請(qǐng)求后對(duì)用戶進(jìn)行身份認(rèn)證,身份認(rèn)證機(jī)制細(xì)節(jié)如下(加解密算法采用Elgamal的加密和解密算法):
(1)首先服務(wù)器在所有權(quán)表Vi中查找對(duì)應(yīng)用戶身份標(biāo)識(shí)IDi的公鑰Xi,隨機(jī)選擇r ∈?p,計(jì)算R=Enc(r,Xi)并發(fā)送給用戶。
(2)用戶利用私鑰Xi解密R 得到r'=Dec(R,xi),并返回H(r′)至服務(wù)器。
(3)服務(wù)器計(jì)算H(r),并檢查H(r')=H(r)?如果相等,則身份認(rèn)證成功,否則認(rèn)證失敗,返回認(rèn)證結(jié)果。
設(shè)G是一個(gè)p 階乘法循環(huán)群,g 是G 的生成元(g ∈?p),初始化加密算法EK(M)→C,輸入密鑰K 和明文M ,輸出密文C 。初始化解密算法DK(C)→M ,輸入密文C 和密鑰K ,輸出明文M 。初始化ElGamal公鑰加密算法E(M,pk)→C,輸入公鑰pk 和明文M ,輸出密文C。初始化解密算法D(C,sk)→M ,輸入密文C 和私鑰sk ,輸出明文M 。初始化哈希函數(shù)H:{0,1}*→{0,1}n,設(shè)公參集合pp=(p,g,G,H)。另外,在上傳數(shù)據(jù)至云之前選擇一個(gè)隨機(jī)數(shù)IDt作為身份標(biāo)識(shí)(用戶ID)。
圖4 上傳流程圖
用戶請(qǐng)求上傳文件步驟如下:
數(shù)據(jù)上傳流程圖如圖4所示,詳細(xì)步驟如下:
(1)用戶ui請(qǐng)求上傳文件F,運(yùn)行隨機(jī)收斂加密算法的密鑰生成算法K ←RCE.Enc(F)得到收斂密鑰K ,運(yùn)行隨機(jī)收斂加密算法得到密文和文件標(biāo)簽(C,Ti)←RCE.Enc(F,K),其中C=C1||C2,上傳Ti至服務(wù)器。
(2)服務(wù)器檢查T(mén)i是否已存在于云存儲(chǔ)中,若存在,轉(zhuǎn)到(3)進(jìn)行所有權(quán)證明(以下簡(jiǎn)稱為PoW 驗(yàn)證);若不存在,則轉(zhuǎn)到(4)繼續(xù)執(zhí)行。
(3)Ti已存在(即云存儲(chǔ)中已經(jīng)有了文件F 的備份),服務(wù)器發(fā)起挑戰(zhàn),隨機(jī)選擇r 個(gè)數(shù)據(jù)塊索引發(fā)送給用戶;用戶響應(yīng)挑戰(zhàn),將對(duì)應(yīng)的r 個(gè)數(shù)據(jù)塊的標(biāo)簽{tokenr}返回服務(wù)器;服務(wù)器重新計(jì)算{tokeni}的哈希值,檢查Bloom Filter 對(duì)應(yīng)比特位是否全為1,若全為1,則該用戶通過(guò)PoW驗(yàn)證,是該數(shù)據(jù)的合法擁有者,用戶上傳身份標(biāo)識(shí)IDt、公鑰Xi,把(IDt,Xi)插入到關(guān)于Ti的所有權(quán)表中。相反,若不全為1,則表示該用戶PoW 驗(yàn)證失敗。
(4)Ti不存在,該文件為初始上傳,用戶選擇一個(gè)隨機(jī)數(shù)xi∈?p作為私鑰,對(duì)應(yīng)的公鑰Xi=gximod p,把密文C、身份標(biāo)識(shí)IDt、摘要token 以及公鑰Xi上傳至服務(wù)器,同時(shí)用戶保存收斂密鑰K 和私鑰xi,并刪除本地文件F 以節(jié)省存儲(chǔ)空間。
圖3 延遲更新策略
(5)服務(wù)器對(duì)接收到的密文C 重新計(jì)算摘要token'←TokenGen(C),判斷token'=token?如果相等,則轉(zhuǎn)到(5)繼續(xù)執(zhí)行;如果不等,則說(shuō)明密文數(shù)據(jù)塊與摘要不符,返回警告,數(shù)據(jù)上傳失敗。
(6)服務(wù)器為文件F 創(chuàng)建一個(gè)所有權(quán)表Vi={Ti},并把二元組(IDt,Xi)插入其中。
(7)對(duì)于密文C ,服務(wù)器運(yùn)行重加密算法C'←Re-encrypt(C),設(shè)置ni=1,選擇隨機(jī)數(shù)yni∈?p,計(jì)算得到Y(jié)ni=gynimod p,所有權(quán)組密鑰Gi=YniXnimod p,接著重新加密密鑰密文C2'=EH(Gi)(C2) ,得到C'=C1||C2' ,并為文件F 創(chuàng)建一個(gè)更新表U={Ti},把(Y1,G1)加入到該表中。
(8)用戶把文件劃分為n 個(gè)數(shù)據(jù)塊{Bi}(0 ≤i ≤n),為每個(gè)塊計(jì)算數(shù)據(jù)摘要tokeni=H(Bi) 并返回給服務(wù)器,服務(wù)器根據(jù){tokeni}值進(jìn)行哈希,把產(chǎn)生的k 個(gè)哈希值插入到Bloom Filter中,對(duì)應(yīng)比特位置為1。
住院醫(yī)師培訓(xùn)的重點(diǎn)是各種臨床技能,但是CP教學(xué)法有其自身的局限性,特別是對(duì)于心血管外科,臨床上只有3種疾病可以實(shí)施CP,很多復(fù)雜的疾病尚無(wú)法建立CP,執(zhí)行CP的疾病個(gè)體之間也存在一定的變異性。對(duì)于這些還未建立起標(biāo)準(zhǔn)路徑的心血管外科疾病,只能采取其他教學(xué)模式。因此,CP教學(xué)法不能作為單獨(dú)的住院醫(yī)師培養(yǎng)手段,必須和其他教學(xué)方法相結(jié)合,才能收到更好的教學(xué)效果。
用戶請(qǐng)求下載文件步驟如下:
(1)用戶Uj請(qǐng)求下載文件,運(yùn)行隨機(jī)收斂加密的標(biāo)簽生成算法得到文件標(biāo)簽T ←TagGen(K),連同身份標(biāo)識(shí)IDj一起發(fā)送至服務(wù)器。
(2)服務(wù)器對(duì)用戶進(jìn)行身份認(rèn)證,執(zhí)行認(rèn)證協(xié)議。如果認(rèn)證結(jié)果是成功,則跳轉(zhuǎn)至(3)。相反,如果認(rèn)證結(jié)果是失敗,則終止操作。
(3)服務(wù)器發(fā)送A=C||token||G 至用戶,其中C=C1||C2'。
(4)用戶接收到A,運(yùn)行M ←Decrypt(K,C,token)算法,首先利用組密鑰Gi解密得到密鑰密文C2 ←DH(Gi)(C2'),用戶重新計(jì)算token'←TokenGen(C),此時(shí)C=C1||C2,判斷token=token'?如果兩者相等,則表明用戶存儲(chǔ)數(shù)據(jù)完整,未曾遭到污染,也未遭誠(chéng)實(shí)但好奇服務(wù)器篡改,用戶接收文件并運(yùn)行隨機(jī)收斂加密解密算法得到文件明文F ←RCE.Dec(C,K)。如果兩者不相等,則存儲(chǔ)數(shù)據(jù)的完整性遭到破壞,用戶放棄下載文件。
用戶請(qǐng)求刪除文件F 步驟如下:
(1)用戶Ud請(qǐng)求刪除文件F ,并發(fā)送用戶IDd和文件標(biāo)簽Ti至服務(wù)器。
(3)服務(wù)器運(yùn)行重加密操作C'←Re-encrypt(C) 。首先用組密鑰Gi解密得到密鑰密文C2=DH(Gi)(C2'),然后執(zhí)行組密鑰更新操作得到新的組密鑰Gi,從Vi中刪除(IDd,Xd),用新的組密鑰Gi重新加密密鑰密文得到新的C2''=EH(Gi)(C2),得到C=C1||C2''。
(4)把當(dāng)前用戶的相關(guān)信息從所有權(quán)表中刪除,同時(shí)修改更新表U{T},用當(dāng)前的(Yni,Gi)替換掉原有的(Yni-1,Gi-1)。
用戶請(qǐng)求更新文件F 步驟如下:
(1)用戶us請(qǐng)求把文件F 修改為F′,運(yùn)行隨機(jī)收斂加密算法的密鑰生成算法K ←RCE.Enc(F)得到收斂密鑰K' ,運(yùn)行隨機(jī)收斂加密算法得到密文和文件標(biāo)簽(C',Ti')←RCE.Enc(F',K),其中C'=C1'||C2' ,選擇一個(gè)隨機(jī)數(shù)xs∈?p作為私鑰,對(duì)應(yīng)的公鑰Xs=gxsmod p,上傳Ti、Ti'、C'、IDs、Xs至服務(wù)器。
(2)服務(wù)器對(duì)用戶進(jìn)行身份認(rèn)證,執(zhí)行認(rèn)證協(xié)議。如果認(rèn)證結(jié)果是成功,則跳轉(zhuǎn)至(3)。相反,如果認(rèn)證結(jié)果是失敗,則終止操作。
(3)與文件刪除的步驟(3)、(4)一樣,服務(wù)器執(zhí)行重加密操作并刪除和更新相關(guān)信息。
(4)服務(wù)器進(jìn)一步檢查T(mén)i' 是否存在,如果Ti' 已存在,則執(zhí)行文件上傳的步驟(3);如果Ti'不存在,執(zhí)行文件上傳的步驟(4)~(8)。
云服務(wù)器假設(shè)是誠(chéng)實(shí)但好奇的,也就是說(shuō),它會(huì)誠(chéng)實(shí)地執(zhí)行系統(tǒng)中分配的任務(wù),但是,它可能會(huì)非法訪問(wèn)云存儲(chǔ)中的數(shù)據(jù)。在本文模型中,密文C=C1||C2'存儲(chǔ)在服務(wù)器中,即使服務(wù)器擁有組密鑰Gi,由于加密哈希函數(shù)的特性,獲得密鑰K 在計(jì)算上是不可行的。另外,盡管服務(wù)器可以用Gi解密C2'得到密鑰密文C2,但是沒(méi)有收斂密鑰,它就不能從C2 中獲取到隨機(jī)密鑰L,因此服務(wù)器并不能解密密文C1 得到明文F。
另一種攻擊是來(lái)自未經(jīng)授權(quán)的用戶。在本文模型中,利用ElGamal 加密機(jī)制實(shí)現(xiàn)訪問(wèn)控制,任何未經(jīng)授權(quán)的用戶將被阻止接收關(guān)于數(shù)據(jù)的任何信息。因此即使這些惡意用戶以某種途徑獲得了密文C 和隨機(jī)密鑰L,由于不能獲得組密鑰Gi(只有通過(guò)身份認(rèn)證的用戶才能獲得),它依然不能解密密文得到明文。
因此,本文模型能阻止誠(chéng)實(shí)但好奇服務(wù)器和外部未授權(quán)用戶解密密文,保證了數(shù)據(jù)的隱私。
在很多去重方案中,一些惡意用戶上傳與文件標(biāo)簽不符的密文至服務(wù)器,造成數(shù)據(jù)污染。設(shè)惡意用戶u 是文件F1 的初始上傳者,該文件對(duì)應(yīng)的標(biāo)簽是T1,然而該用戶并未上傳與T1對(duì)應(yīng)文件F1 的密文C1,而是上傳F2(F2 ≠F1)的密文C2,此后其他用戶請(qǐng)求下載T1對(duì)應(yīng)的文件時(shí),解密得到的文件是F2 而不是F1,這就造成了數(shù)據(jù)污染。另外,誠(chéng)實(shí)但好奇服務(wù)器可能會(huì)惡意篡改用戶存儲(chǔ)數(shù)據(jù),數(shù)據(jù)完整性遭到破壞。
在本文模型中,文件初始上傳者需要上傳密文C,摘要token 等信息至服務(wù)器,服務(wù)器通過(guò)重新計(jì)算密文C 的摘要token' ,判斷token'=token?如果相等,則說(shuō)明數(shù)據(jù)沒(méi)有污染,否則說(shuō)明存在污染。同時(shí),在本文方案中數(shù)據(jù)完整性很容易檢測(cè)出來(lái)。設(shè)合法用戶u 請(qǐng)求下載文件F ,服務(wù)器返回C'=C||token||G 給用戶u,用戶用G 解密C2' 得到密鑰密文C2,重新計(jì)算數(shù)據(jù)摘要token'=H(C),其中,C=C1||C2||T1,檢查token'=token?如果兩個(gè)摘要不一致,則用戶拒絕接收數(shù)據(jù),如果摘要一致,則用戶用本地保存的收斂密鑰解密C2 得到隨機(jī)密鑰L,最后用L 解密密文C1 得到明文F。因此,在本文模型中,標(biāo)簽一致性很容易檢測(cè)出來(lái),保證數(shù)據(jù)完整性。
在云用戶刪除或是更新文件(用戶刪除或更新文件可視為撤銷所有權(quán))之后,服務(wù)器會(huì)立即更新對(duì)應(yīng)的組密鑰和所有權(quán)列表,也就是說(shuō),當(dāng)用戶撤銷所有權(quán)后,服務(wù)器會(huì)生成新的組密鑰并重加密密文,而用戶ID 和對(duì)應(yīng)文件公鑰也將從所有權(quán)表中移除。因此撤銷所有權(quán)的用戶不能通過(guò)身份認(rèn)證機(jī)制獲得組密鑰,因而不能正確解密密文,保證向前加密。
在一個(gè)云用戶請(qǐng)求下載文件F 之前,云存儲(chǔ)中已有該文件,用戶并不在該文件的所有權(quán)表中,因此不能通過(guò)身份認(rèn)證機(jī)制,服務(wù)器將會(huì)忽略這次請(qǐng)求,保證向后保密,也就是說(shuō)向后保密阻止任何未獲得所有權(quán)的用戶訪問(wèn)外包數(shù)據(jù)。
在本文方案中,云用戶只有同時(shí)知道加密密鑰L 和組密鑰G 才能正確解密密文獲得明文。組密鑰G 是由初始上傳用戶和撤銷所有權(quán)的用戶的公鑰生成的,用戶通過(guò)所有權(quán)驗(yàn)證之后,服務(wù)器會(huì)返回給用戶組密鑰,另外,滿足延遲更新策略的條件下,組密鑰會(huì)立即更新并重加密密鑰密文,以阻止撤銷所有權(quán)的用戶繼續(xù)訪問(wèn)文件。在這種情況下,即使未授權(quán)用戶擁有收斂密鑰K ,他仍然不能解密密文得到明文,原因在于它不能通過(guò)身份認(rèn)證,也就不能獲得組密鑰G 。因此,在本文模型中,可以抵抗合謀攻擊。同時(shí),訪問(wèn)控制(身份認(rèn)證機(jī)制)阻止不能正確解密密文的惡意用戶訪問(wèn)外包數(shù)據(jù),大大減少通信開(kāi)銷。
如表1 所示,文獻(xiàn)[16-17]和本文都做了所有權(quán)管理方面的工作,文獻(xiàn)[17]和本文都通過(guò)訪問(wèn)控制技術(shù)驗(yàn)證用戶是否在文件的所有權(quán)表中,阻止未授權(quán)用戶繼續(xù)訪問(wèn)系統(tǒng),降低通信開(kāi)銷。與文獻(xiàn)[17]相比,本文考慮了所有權(quán)證明并采用延遲更新策略大幅降低了計(jì)算開(kāi)銷。
本文方案中,后繼上傳用戶需要通過(guò)一個(gè)基于布隆過(guò)濾器的所有權(quán)證明(PoW)驗(yàn)證來(lái)獲得所有權(quán),而不是僅僅通過(guò)文件標(biāo)簽來(lái)判斷該用戶是否是文件的擁有者。
攻擊者可能從別的地方獲得文件摘要或者部分文件內(nèi)容,而企圖從服務(wù)器中下載整個(gè)文件。在PoW 階段,攻擊者需要提供對(duì)應(yīng)服務(wù)器返回的r 個(gè)隨機(jī)數(shù)據(jù)塊的token 值證明自己是合法擁有者,僅擁有文件標(biāo)簽是不可能通過(guò)PoW 驗(yàn)證的;攻擊者通過(guò)PoW 驗(yàn)證(記為事件A)的情況分兩種:其一攻擊者憑借擁有的部分文件成功通過(guò)PoW 驗(yàn)證,記為事件W ;其二Bloom Filter 發(fā)生誤判,誤判率為pf 。那么事件A 發(fā)生的概率為:
假設(shè)整個(gè)文件為n 個(gè)數(shù)據(jù)塊,攻擊者擁有部分文件m 個(gè)數(shù)據(jù)塊,占整個(gè)文件的百分比為p=m/n,服務(wù)器返回r 個(gè)隨機(jī)索引,r 個(gè)數(shù)據(jù)塊中有攻擊者沒(méi)有的數(shù)據(jù)塊時(shí),攻擊者只能猜測(cè)數(shù)據(jù)塊內(nèi)容或者其摘要值,猜測(cè)成功的概率記為P1,顯然P1 趨近于0;攻擊者恰好擁有這r 個(gè)數(shù)據(jù)塊的概率為:
得到:
把公式(3)代入公式(1)得到:
表1 去重方案性能對(duì)比
例如一個(gè)劃分為n=100 個(gè)數(shù)據(jù)塊的文件,已知攻擊者擁有其中m=50 個(gè),根據(jù)文件劃分塊數(shù)得到挑戰(zhàn)數(shù)組r的長(zhǎng)度為5,pf 為0.05,由公式(4)計(jì)算可得P(A)=0.076。由此可見(jiàn),攻擊者擁有該文件一半的數(shù)據(jù),單次響應(yīng)通過(guò)PoW協(xié)議驗(yàn)證的概率仍然很小。若攻擊者不擁有任何該文件數(shù)據(jù),則通過(guò)驗(yàn)證的概率P(A)=pf ,一般情況下pf 可忽略不計(jì)。
主要分析后繼上傳時(shí)的計(jì)算開(kāi)銷:
客戶端:文獻(xiàn)[16]中RCE 算法的開(kāi)銷為T(mén)rce,計(jì)算標(biāo)簽的開(kāi)銷為T(mén)f,隨機(jī)生成ID的開(kāi)銷為T(mén)ID,則文獻(xiàn)[16]的計(jì)算開(kāi)銷是Trce+Tf+TID。文獻(xiàn)[17]由于實(shí)現(xiàn)了訪問(wèn)控制,所以在文獻(xiàn)[16]的基礎(chǔ)上還需要選擇隨機(jī)數(shù)x作為私鑰,生成公鑰X ,計(jì)算開(kāi)銷為T(mén)X,則文獻(xiàn)[17]的計(jì)算開(kāi)銷是Trce+Tf+TID+TX。本文的計(jì)算開(kāi)銷是TT+TID+Ts+TX+Ttokeni,其中,TT是計(jì)算數(shù)據(jù)標(biāo)簽的開(kāi)銷,TX是生成公鑰X 的計(jì)算開(kāi)銷,Ts和Ttokeni是用于PoW 所產(chǎn)生的開(kāi)銷,分別表示數(shù)據(jù)分塊計(jì)算開(kāi)銷和數(shù)據(jù)塊摘要計(jì)算開(kāi)銷。
服務(wù)器端:文獻(xiàn)[16]、[17]生成組密鑰的計(jì)算開(kāi)銷為T(mén)G,對(duì)數(shù)據(jù)密文重加密計(jì)算開(kāi)銷為T(mén)C1,則文獻(xiàn)[16]、[17]的計(jì)算開(kāi)銷是TG+TC1。本文由于采用延遲更新策略,在后繼上傳中不需更新組密鑰,但要求用戶進(jìn)行PoW 驗(yàn)證,服務(wù)器隨機(jī)生成數(shù)據(jù)塊總數(shù)5%的挑戰(zhàn)數(shù)組的計(jì)算開(kāi)銷為T(mén)c ,根據(jù)客戶生成的響應(yīng),服務(wù)端Bloom Filter利用k 個(gè)哈希函數(shù)驗(yàn)證用戶響應(yīng)的計(jì)算開(kāi)銷為T(mén)r,因此本文后繼上傳計(jì)算開(kāi)銷是Tc+Tr。
本方案是在英特爾酷睿處理器、i7-4790的CPU、主頻3.6 GHz、內(nèi)存8 GB、系統(tǒng)為Windows 10 的PC 機(jī)上實(shí)現(xiàn)的。在eclipse軟件上,使用Java語(yǔ)言仿真實(shí)驗(yàn)。實(shí)驗(yàn)中,哈希算法均采用SHA1,加密算法采用AES128,利用Elgamal公鑰密碼體制實(shí)現(xiàn)訪問(wèn)控制。圖5、圖6分別比較了三個(gè)方案在后繼上傳中客戶端和服務(wù)器端的計(jì)算開(kāi)銷。
由圖5可知,后繼上傳客戶端計(jì)算開(kāi)銷本文方案少于文獻(xiàn)[16]、[17],原因在于即使上傳文件已經(jīng)是重復(fù)數(shù)據(jù),文獻(xiàn)[16]、[17]仍然執(zhí)行RCE算法對(duì)明文進(jìn)行加密操作,即先加密后去重,而本文方案是先去重后加密,對(duì)于后繼上傳重復(fù)文件不再執(zhí)行加密操作,因此計(jì)算開(kāi)銷減少,另外,本文在后繼上傳過(guò)程中要求用戶進(jìn)行PoW驗(yàn)證,因此,需要對(duì)文件進(jìn)行分塊并計(jì)算塊摘要{tokeni},綜合以上開(kāi)銷,本文方案后繼上傳客戶端計(jì)算開(kāi)銷少于文獻(xiàn)[16]、[17]。
由圖6 可知,隨著數(shù)據(jù)大小的增長(zhǎng),本文方案后繼上傳服務(wù)端計(jì)算開(kāi)銷少于文獻(xiàn)[16]、[17]。為達(dá)到動(dòng)態(tài)管理所有權(quán),文獻(xiàn)[16]、[17]在后繼上傳中更新組密鑰,計(jì)算開(kāi)銷與數(shù)據(jù)大小呈正相關(guān),而本文采用延遲更新策略避免組密鑰頻繁更新,在確保實(shí)現(xiàn)動(dòng)態(tài)所有權(quán)管理的前提下大量減少計(jì)算開(kāi)銷,因而更加高效,另外,本文后繼上傳主要是PoW驗(yàn)證產(chǎn)生的計(jì)算開(kāi)銷,分別對(duì)1 MB、10 MB、20 MB、40 MB、60 MB、80 MB 和100 MB 的文件進(jìn)行分塊,每個(gè)數(shù)據(jù)塊16 KB,服務(wù)器生成挑戰(zhàn)數(shù)組發(fā)送給用戶(每次運(yùn)行PoW 協(xié)議時(shí)挑戰(zhàn)數(shù)據(jù)塊r 的取值是數(shù)據(jù)塊總數(shù)的5%,Bloom Filter中哈希函數(shù)的個(gè)數(shù)k 取為4),用戶根據(jù)挑戰(zhàn)數(shù)組生成響應(yīng),服務(wù)器驗(yàn)證用戶返回的響應(yīng)是否正確。
圖5 后繼上傳中客戶端計(jì)算開(kāi)銷
圖6 后繼上傳中服務(wù)器端計(jì)算開(kāi)銷
針對(duì)當(dāng)前云存儲(chǔ)中數(shù)據(jù)安全去重方案存在的缺陷,提出一種改進(jìn)的動(dòng)態(tài)所有權(quán)管理加密數(shù)據(jù)安全去重技術(shù)。在動(dòng)態(tài)所有權(quán)管理過(guò)程中,由于用戶頻繁對(duì)數(shù)據(jù)執(zhí)行重復(fù)上傳、修改、刪除等操作,提出延遲更新策略大幅減少重加密密鑰更新頻率,節(jié)省計(jì)算時(shí)間,提高效率,并構(gòu)建了基于布隆過(guò)濾器的所有權(quán)證明方案。分析和實(shí)驗(yàn)結(jié)果表明,本文方案在保證安全性的同時(shí)降低計(jì)算開(kāi)銷。