胡 衛(wèi) 吳邱涵 魏國(guó)珩
(1.武漢大學(xué)計(jì)算機(jī)學(xué)院 武漢 430072)(2.海軍工程大學(xué)信息安全系 武漢 430033)
隨著云計(jì)算技術(shù)的迅速發(fā)展和普及,隨之帶來(lái)了大量數(shù)據(jù)的存儲(chǔ)問(wèn)題,云存儲(chǔ)(Cloud Storage)的概念應(yīng)運(yùn)而生,云存儲(chǔ)是在云計(jì)算(Cloud Computing)概念上延伸和發(fā)展出來(lái)的一個(gè)新的概念,它是指通過(guò)服務(wù)器集群應(yīng)用、網(wǎng)格或分布式文件系統(tǒng)和虛擬化技術(shù)等,將網(wǎng)絡(luò)中不同類型的海量存儲(chǔ)設(shè)備通過(guò)網(wǎng)絡(luò)和應(yīng)用軟件集合起來(lái)協(xié)同工作,共同對(duì)外提供數(shù)據(jù)存儲(chǔ)和業(yè)務(wù)訪問(wèn)功能的一個(gè)系統(tǒng)[1~2]。與傳統(tǒng)數(shù)據(jù)管理技術(shù)相比,云存儲(chǔ)具有海量性、異構(gòu)性、外包性和混雜性等特點(diǎn),使得傳統(tǒng)數(shù)據(jù)管理技術(shù)不再適用[3]。
云存儲(chǔ)技術(shù)在展現(xiàn)資源共享、便捷高效、快速可伸縮等優(yōu)勢(shì)的同時(shí),也面臨許多關(guān)鍵性問(wèn)題,其安全性、可靠性及服務(wù)水平等眾多問(wèn)題仍亟待解決[4]。云存儲(chǔ)服務(wù)提供商的信譽(yù)往往受到質(zhì)疑,因?yàn)槌鲇诶娴目紤],云存儲(chǔ)服務(wù)提供商有時(shí)會(huì)刻意隱瞞數(shù)據(jù)的失效,不讓用戶掌握數(shù)據(jù)真實(shí)的可用性信息。即數(shù)據(jù)實(shí)際上丟失了,或者某個(gè)時(shí)段不可用,或者當(dāng)前數(shù)據(jù)副本有效的數(shù)量達(dá)不到事先協(xié)定的數(shù)量,但是服務(wù)商卻不讓用戶知曉,或者欺騙用戶該數(shù)據(jù)有效。當(dāng)前還沒(méi)有較適用的技術(shù)能夠完全解決這一欺騙行為。
當(dāng)用戶將數(shù)據(jù)存放在云服務(wù)器中,他們突然感覺(jué)對(duì)數(shù)據(jù)失去了掌控能力,他們無(wú)法掌握數(shù)據(jù)是否真實(shí)存在、是否完整可用、是否安全可靠、刪除的數(shù)據(jù)是否真正消失,用戶完全失去了對(duì)數(shù)據(jù)的感知。目前對(duì)云存儲(chǔ)數(shù)據(jù)感知方面的研究還處于起步階段,數(shù)據(jù)存在感知是數(shù)據(jù)感知的最基本的要求,通常的做法是通過(guò)數(shù)據(jù)持有性證明來(lái)達(dá)到感知數(shù)據(jù)存在效果[5]。本文即針對(duì)云存儲(chǔ)中用戶數(shù)據(jù)存在感知方法進(jìn)行研究。
目前數(shù)據(jù)存在感知方面,研究工作主要集中在可證明數(shù)據(jù)持有(Provable Data Possession,PDP)方案[5~8]和可恢復(fù)證明(Proof of Retrievability,POR)方案[9]。其主要過(guò)程如下:證實(shí)者Verifier(例如客戶端)將某個(gè)大文件F以分片的方式保存在驗(yàn)證者Prover(例如云服務(wù)提供商)一方,并插入一些驗(yàn)證元數(shù)據(jù);在Verifier需要驗(yàn)證F可用性時(shí),Prover根據(jù)存儲(chǔ)的數(shù)據(jù)和元數(shù)據(jù)計(jì)算獲得一個(gè)高度壓縮的證據(jù)并提供給Verifier,Verifier通過(guò)開(kāi)銷很小的計(jì)算就可以相信F是完整可用的。此外,Yun等在分析傳統(tǒng)Merkle hash tree的基礎(chǔ)上,提出一種基于Nonce的MAC Tree方案,將文件塊加密后組織為樹(shù)形結(jié)構(gòu),以保證數(shù)據(jù)的保密性和完整性[10]。Wang等提出一種基于BLS同態(tài)簽名和RS糾錯(cuò)碼方法[11]。但是這些技術(shù)處理對(duì)象的規(guī)模有限,處理海量云數(shù)據(jù)時(shí)會(huì)帶來(lái)嚴(yán)重的效率問(wèn)題。另外,這些技術(shù)本身并不具有容錯(cuò)和恢復(fù)數(shù)據(jù)的功能。即使其中只有一個(gè)文件分片被修改或者損壞,則整個(gè)F將不可獲取,從而導(dǎo)致Prover丟失該數(shù)據(jù)。
與他們的工作相比,本文將存在性驗(yàn)證與數(shù)據(jù)完整性、冗余可用性[12]結(jié)合起來(lái)考慮,采用密碼學(xué)中的知識(shí)證明方法,研究計(jì)算開(kāi)銷小、置信度高并且?guī)哂鄠浞莨δ艿拇嬖谛则?yàn)證技術(shù)。
本文所使用的基本密碼學(xué)符號(hào)及描述如表1所示。
表1 密碼學(xué)符號(hào)列表
對(duì)于單文件主要是驗(yàn)證其存在性與數(shù)據(jù)完整性。驗(yàn)證過(guò)程主要由4個(gè)階段組成:文件預(yù)處理階段、數(shù)據(jù)標(biāo)簽生成階段、挑戰(zhàn)應(yīng)答階段和證據(jù)驗(yàn)證階段。其中挑戰(zhàn)應(yīng)答階段由用戶向云存儲(chǔ)服務(wù)器發(fā)出挑戰(zhàn),請(qǐng)求返回持有某些數(shù)據(jù)塊的證據(jù),服務(wù)器響應(yīng)用戶生成持有文件的證據(jù)[13]。
3.2.1 文件預(yù)處理過(guò)程
在文件上傳到云存儲(chǔ)服務(wù)器之前,需要進(jìn)行一些預(yù)處理操作,包括數(shù)據(jù)分塊、加密處理和數(shù)據(jù)標(biāo)簽的生成。首先將文件F分割為m個(gè)長(zhǎng)度相等的部 分 f1,f2,…,fm,每 部 分 的 長(zhǎng) 度 為 Lbit,即利用密鑰K對(duì)源文件 F進(jìn)行加密處理形成密態(tài)的文件,其中bi=EK(fi),1≤i≤m。
3.2.2 數(shù)據(jù)標(biāo)簽的生成
文件預(yù)處理完畢后,利用密態(tài)的文件塊計(jì)算其對(duì)應(yīng)的數(shù)據(jù)標(biāo)簽,第i塊數(shù)據(jù)的標(biāo)簽計(jì)算公式為Ti=(h(Wi)?gbi)dmodN。其中Wi={v||i},i為文件塊的索引,v為隨機(jī)安全素?cái)?shù),將v與文件塊索引i相加,是為了增加Wi的不可預(yù)測(cè)性。h(?)為哈希函數(shù),這里采用MD5哈希摘要算法。g為安全素?cái)?shù),滿足 gmodN=1,,(e,d)是以N為模數(shù)RSA算法的公私鑰。標(biāo)簽的計(jì)算公式中bi和d都是大數(shù)模冪運(yùn)算的指數(shù),其值的大小直接決定了系統(tǒng)的計(jì)算開(kāi)銷。數(shù)據(jù)標(biāo)簽生成后將密態(tài)的文件塊及對(duì)應(yīng)的數(shù)據(jù)標(biāo)簽一并上傳至云存儲(chǔ)服務(wù)器。
3.2.3 挑戰(zhàn)應(yīng)答過(guò)程
當(dāng)客戶需要驗(yàn)證云服務(wù)器上所存儲(chǔ)的數(shù)據(jù)是否存在和完整時(shí),可以向服務(wù)器發(fā)起安全詢問(wèn)。安全詢問(wèn)的信息Q由三個(gè)參數(shù)組成(c,k,s),現(xiàn)對(duì)這三個(gè)參數(shù)的使用作出具體說(shuō)明:
參數(shù)c:客戶詢問(wèn)的文件塊的數(shù)量。
參數(shù)k:k是偽隨機(jī)置換σ的密鑰,用來(lái)隨機(jī)選擇文件塊,ji=σk(i),ji與…,bm中的 i有對(duì)應(yīng)關(guān)系,且1≤i≤c<m。
參數(shù)s:定義gs=gsmodN,其中 gs用于隨后的驗(yàn)證計(jì)算。
安全詢問(wèn)信息Q=(c,k,s)生成后,傳輸給云服務(wù)端,云服務(wù)端在收到詢問(wèn)信息之后,取出相應(yīng)的數(shù)據(jù)塊和數(shù)據(jù)標(biāo)簽進(jìn)行數(shù)據(jù)存在性證據(jù)V=(T,ρ)的計(jì)算:
最后生成驗(yàn)證信息V=(T,ρ),并傳送給客戶端。
3.2.4 數(shù)據(jù)標(biāo)簽的驗(yàn)證
客戶端在收到驗(yàn)證信息后,計(jì)算:
3.2.5 方案的效用分析
根據(jù)驗(yàn)證的過(guò)程可以看出:
1)驗(yàn)證信息的生成無(wú)需讀取所有的文件塊,也不需要傳輸文件。
2)驗(yàn)證信息ν=(T,ρ)相比文件本身而言要小的多,因此極大地節(jié)省了網(wǎng)絡(luò)傳輸開(kāi)銷,提高了驗(yàn)證的效率。
3)由于不是所有數(shù)據(jù)塊及其標(biāo)簽都參與計(jì)算,因此不能保證100%的置信度,詢問(wèn)文件塊的數(shù)量c越大,其置信度越高,計(jì)算開(kāi)銷越大。具體的c的取值是由文件塊的數(shù)量和用戶所要求的置信度,以及考慮計(jì)算開(kāi)銷的情況下綜合選定,一般要求置信度不低于99%。
對(duì)于文件的多個(gè)副本,不僅需要考慮文件的存在性和完整性,還要考慮多個(gè)副本的冗余可用性。
3.3.1 多副本冗余可用性
為了提高數(shù)據(jù)的可用性,現(xiàn)有云存儲(chǔ)平臺(tái)多采用副本技術(shù),即將數(shù)據(jù)的多個(gè)拷貝同時(shí)分散存儲(chǔ)于系統(tǒng)的不同物理位置,它們可以同時(shí)提供數(shù)據(jù)的訪問(wèn)服務(wù)。通過(guò)這種部署方式可以有效應(yīng)對(duì)可能出現(xiàn)的宕機(jī)、斷電、網(wǎng)絡(luò)錯(cuò)誤等故障,從而提高數(shù)據(jù)可用性[14]。
用戶將數(shù)據(jù)存入云存儲(chǔ)平臺(tái),云服務(wù)商承諾為用戶的每份數(shù)據(jù)保留若干數(shù)量的副本。對(duì)于用戶而言,這些副本的存在對(duì)于提高數(shù)據(jù)的可用性,保證數(shù)據(jù)的高效、快速訪問(wèn)具有重要的意義。但是在信任受限的數(shù)據(jù)環(huán)境中,存儲(chǔ)平臺(tái)在某些時(shí)候出于一些原因不愿意或者不能維持多個(gè)副本的同時(shí)存在。以云存儲(chǔ)應(yīng)用背景為例,出于對(duì)公司聲譽(yù)的影響,或者對(duì)經(jīng)濟(jì)因素的考慮,云存儲(chǔ)服務(wù)提供商不會(huì)主動(dòng)公布自己不能夠按照預(yù)先承諾維持足夠數(shù)量的副本。
3.3.2 多副本存在性驗(yàn)證方案
對(duì)于用戶而言,目前缺乏對(duì)多副本存在性驗(yàn)證的方法。本文3.2節(jié)中針對(duì)單一文件的存在性驗(yàn)證技術(shù)并不適用于多副本的存在性驗(yàn)證問(wèn)題。簡(jiǎn)單地采用單個(gè)數(shù)據(jù)存在性驗(yàn)證方案分別對(duì)每個(gè)副本進(jìn)行驗(yàn)證是不可行的,因?yàn)楦鱾€(gè)副本內(nèi)容相同,服務(wù)提供方的多個(gè)服務(wù)器可以通過(guò)“合謀”的方式,以單一副本的存在偽造生成多個(gè)副本存在的證據(jù)。多副本驗(yàn)證時(shí)若每個(gè)副本不做處理,服務(wù)商出于成本考慮可能用一個(gè)文件多次引用造成多副本的假象。原始方法采用每個(gè)副本分別加密作為不同文件,這樣每個(gè)副本都要生成一次同態(tài)標(biāo)簽,副本數(shù)目較多時(shí)會(huì)造成極大的運(yùn)算開(kāi)銷。
本文首先將數(shù)據(jù)加密,然后將加密數(shù)據(jù)與t個(gè)不同的隨機(jī)掩碼異或生成多個(gè)副本,在驗(yàn)證時(shí)使用同一組同態(tài)標(biāo)簽進(jìn)行模指運(yùn)算,一次性驗(yàn)證所有副本,從而提高驗(yàn)證的效率。
1)多副本數(shù)據(jù)生成
2)多副本數(shù)據(jù)標(biāo)簽的生成
文件的多個(gè)副本均共用一組標(biāo)簽{Tj},。標(biāo)簽生成后,將標(biāo)簽 {T1,T2,…,Tm} 上傳至每個(gè)云存儲(chǔ)服務(wù)器。
3)多副本數(shù)據(jù)存在性驗(yàn)證
云存儲(chǔ)服務(wù)器將數(shù)據(jù)存在性證據(jù)V=(T,ρ)傳送給客戶端,客戶端在收到驗(yàn)證信息后,計(jì)算:
本文所提出的數(shù)據(jù)存在性驗(yàn)證方案中數(shù)據(jù)標(biāo)簽的計(jì)算是基于有限域上的離散對(duì)數(shù)難解性問(wèn)題設(shè)計(jì)的,從數(shù)據(jù)標(biāo)簽的計(jì)算公式可以看出,通過(guò)合理的選取兩個(gè)安全素?cái)?shù)v和g,可以防止非法用戶或云存儲(chǔ)服務(wù)端的篡改和偽造。同時(shí)采用了RSA公鑰密碼算法的私鑰d進(jìn)行簽名,進(jìn)一步增強(qiáng)了標(biāo)簽的防偽造性,RSA公鑰密碼算法是以大合數(shù)因子分解困難性為前提,本文方案中選擇了模數(shù)為2048位的RSA算法,在當(dāng)前的計(jì)算能力下,能夠保證算法的安全性。
在對(duì)數(shù)據(jù)存在性驗(yàn)證過(guò)程中的各個(gè)階段的性能開(kāi)銷進(jìn)行分析時(shí),我們將所有指數(shù)運(yùn)算轉(zhuǎn)化為乘法運(yùn)算,將中的乘法運(yùn)算開(kāi)銷記作MultCost(N),對(duì)于計(jì)算 yx,轉(zhuǎn)換為乘法運(yùn)算需要|x|次乘法,即時(shí)間開(kāi)銷約為 |x|MultCost(N)[15],如果采用快速模冪運(yùn)算的方式計(jì)算,則實(shí)際的時(shí)間開(kāi)銷會(huì)更小。
在數(shù)據(jù)標(biāo)簽的生成過(guò)程,由標(biāo)簽的計(jì)算公式Ti=(h(Wi)?gbi)dmodN,其主要的開(kāi)銷為模乘運(yùn)算的開(kāi)銷,每塊數(shù)據(jù)的長(zhǎng)度為L(zhǎng)bit,m塊數(shù)據(jù)的標(biāo)簽計(jì)算總開(kāi)銷為mdLMultCost(N)。
挑戰(zhàn)應(yīng)答過(guò)程中,有c次偽隨機(jī)置換操作和c次模N乘操作,模乘運(yùn)算開(kāi)銷較大,為c(dL+s)MultCost(N)。標(biāo)簽驗(yàn)證階段運(yùn)算開(kāi)銷為esMultCost(N)。單文件存在性驗(yàn)證方案挑戰(zhàn)應(yīng)答和驗(yàn)證階段總的計(jì)算開(kāi)銷主要為(cdL+cs+es)MultCost(N)。
在實(shí)際的云存儲(chǔ)應(yīng)用時(shí),由于受到網(wǎng)絡(luò)帶寬的限制,時(shí)間開(kāi)銷會(huì)稍微多一點(diǎn)。我們選用配置為Intel Core i5 CPU 2.2GHz,4GB RAM的計(jì)算機(jī)上進(jìn)行測(cè)試,得到 MultCost(N)≈4.2μs,則對(duì)于一個(gè)1MB的文件,分塊設(shè)為8KB的塊,則m=128,設(shè)RSA算法的密鑰選用2048位,抽取的數(shù)據(jù)塊數(shù)量c為20,參數(shù)s為32位,則標(biāo)簽建立階段的計(jì)算開(kāi)銷約為4.3s,標(biāo)簽挑戰(zhàn)應(yīng)答和驗(yàn)證階段總的計(jì)算開(kāi)銷約為0.16s,這里標(biāo)簽建立階段計(jì)算開(kāi)銷相對(duì)大點(diǎn),但是標(biāo)簽只計(jì)算一次,以后主要是挑戰(zhàn)應(yīng)答和驗(yàn)證,一次驗(yàn)證過(guò)程0.31s的時(shí)間開(kāi)銷是可以接受的。
本文所提出的數(shù)據(jù)存在感知方案,可以讓用戶無(wú)限次地驗(yàn)證數(shù)據(jù)是否被正確持有,并且在提供數(shù)據(jù)存在感知的同時(shí),還可以對(duì)數(shù)據(jù)進(jìn)行完整性驗(yàn)證。在驗(yàn)證文件的多個(gè)副本的存在性和完整性時(shí),還將多個(gè)副本的冗余可用性一并考慮。但是方案中采用數(shù)據(jù)塊參與運(yùn)算,如果數(shù)據(jù)塊選取較大則很可能影響效率,下一步將研究利用數(shù)據(jù)塊的同態(tài)hash值代替數(shù)據(jù)塊本身參與標(biāo)簽的生成和證據(jù)的運(yùn)算,進(jìn)一步提高方案的效率。