楊 杰,譚道軍,邵金俠
(湖南科技學院 電子與信息工程學院,湖南 永州 425199)
隨著云計算的發(fā)展,云存儲作為云計算的一項重要服務得到越來越多的關注[1-3],它允許個人和行業(yè)以較低的成本將數(shù)據保存在云中,為了方便管理數(shù)據并降低管理成本,許多數(shù)據所有者將數(shù)據外包給云服務器[4-5],這使得云存儲服務的用戶數(shù)量迅速增長。但是,將個人及企業(yè)數(shù)據存儲在云中需要信任的存儲服務,以確保數(shù)據的保護和隱私。數(shù)據安全和隱私保護是云計算面臨的挑戰(zhàn),這些安全挑戰(zhàn)的出現(xiàn)主要是由于“缺乏信任”和“缺乏控制”的原因。用戶正在將數(shù)據提供給不受信任的云存儲,因此,數(shù)據可能會被損壞,修改,被盜或甚至被刪除[6-7]。
由于所有的安全策略都是由云服務提供商處理的,用戶無法控制自己的數(shù)據。因此,為了使云存儲安全高效,云服務必須確保數(shù)據的可用性和完整性這2個基本安全要求[8-10]。
文獻[11]提出了隱私欺騙阻止和安全計算審計協(xié)議,同時解決了云計算數(shù)據存儲安全性與計算安全性,通過指定的驗證者簽名,批量驗證和概率抽樣技術來實現(xiàn)隱私欺騙阻礙。為了解決對大量加密的云數(shù)據進行高效全文檢索這個挑戰(zhàn),文獻[12]提出了一個基于Bloom過濾器的樹索引,通過提出索引詞的隸屬熵來優(yōu)化查詢和加密文檔之間的相似性,實現(xiàn)了加密云數(shù)據的全文檢索。
文獻[13]給出了云計算環(huán)境的實際數(shù)據完整性需求,并研究了區(qū)塊鏈在實現(xiàn)數(shù)據完整性面臨的問題,設計了云計算環(huán)境中基于區(qū)塊鏈的有效數(shù)據庫。文獻[14]提出了一種高效的相互驗證的可證明數(shù)據擁有方案,該方案利用Diffie-Hellman共享密鑰構造同態(tài)驗證器,該方案中的驗證者是無狀態(tài)的,獨立于云存儲服務,因為不需要雙線性操作,所以所提出的方案非常有效。
為了提高云存儲數(shù)據的安全性與完整性,本文在研究以上方法的基礎上,提出了一種基于顯式精確最小存儲再生代碼(explicit exact minimal storage regenerating code, EEMSR)的云計算安全性研究方法,該方法使用加密哈希函數(shù)的精確再生代碼的顯式構造,以確保云中存儲數(shù)據的可用性和完整性。在本文協(xié)議中,用戶首先使用EEMSR代碼對數(shù)據進行編碼,然后將此編碼數(shù)據上傳到云中。該編碼有助于重新生成丟失的數(shù)據,以此確保數(shù)據的可用性。另外還使用加密哈希函數(shù)通過Challenge-Response協(xié)議來驗證數(shù)據的完整性,如果完整性得到驗證則可以重構數(shù)據,否則,可以使用EEMSR代碼修復數(shù)據。
用戶將數(shù)據存儲在不可信的云系統(tǒng)中, 一旦數(shù)據存儲后,用戶就會失去對數(shù)據的控制權,數(shù)據可能會丟失或者數(shù)據可能被調節(jié),這種缺乏控制主要產生了2個安全挑戰(zhàn):完整性和可用性。
云系統(tǒng)體系結構(見圖1)中有用戶和云服務器2個實體。用戶首先對原始文件進行編碼,上傳到云端,產生挑戰(zhàn)并檢查來自服務器的響應是否有效;云服務器存儲和維護用戶上傳的數(shù)據。
已經上傳至云服務器上的數(shù)據會受到不同種類的安全威脅。本文云存儲模型主要關注2種威脅:①由于硬件故障而引起的數(shù)據丟失;②由于任何惡意活動而引起的數(shù)據損壞。
EEMSR碼是(n,k,d,B,α,β)再生碼,最初,大小為B的文件被分成e個塊,每個塊的大小為β=B/e,其中,e=n×(n-1)/2,在編碼矩陣的幫助下,這e個信息塊被進一步編碼為n個編碼塊,每個編碼塊的大小α使得屬于n個塊中的k個塊足以重建原始文件。這些編碼的塊存儲在云服務器中。如果任一服務器發(fā)生故障,則可以通過從d服務器下載β數(shù)據來重新生成丟失的數(shù)據。表1是對EEMSR碼中各符號的描述。
表1 符號描述
為了確保云存儲數(shù)據的完整性和可用性,本文提出EEMSR和Hash函數(shù)的存儲數(shù)據安全性新方法,該方法有4個階段:設置階段、完整性驗證階段、重建和再生階段,其流程圖如圖2。
圖2 本文方法過程圖Fig.2 Method process diagram in this paper
設置階段是在上傳數(shù)據之前的準備工作,完整性驗證階段是上傳數(shù)據以后進行的階段,本文方法主要集中在設置階段和完整性驗證階段。
用戶在云中存儲數(shù)據之前準備的文件,包括3個算法;密鑰生成、文件編碼和元數(shù)據生成。
1)密鑰生成。用戶選擇一些隨機正整數(shù)S用作私鑰及選擇一些大的素數(shù)P和正整數(shù)r(P的原始根)作為公鑰。公鑰將用于Deffie-Hellman算法生成共享密鑰S′, 因此,S和{r,P}將分別作為私鑰和公鑰使用。
2)文件編碼。為了確保云存儲中的數(shù)據可用性,用戶在把數(shù)據存儲到云中之前,通過使用顯式精確再生代碼來對文件進行編碼。 文件編碼分為文件分區(qū)、編碼矩陣構建和文件編碼3個部分。
文件分區(qū):文件F被分成e-1個區(qū)塊,其中,e=n×(n-1)/2,即
F={m1,m2,…,me-1}
(1)
(1)式中,mi,(i=1,…,e-1)表示分塊后的塊文件。在文件分區(qū)之后,用戶通過計算每e-1個塊的異或運算來生成一個新塊,然后將新塊添加到以前的e-1塊。因此,最后F包含全部e塊為
F′={m1,m2,…,me-1,me}
(2)
分區(qū)算法:FileDivision (F,e)
procedure:F′→ FileDivision (F,e)
e=n×(n-1)/2,將文件F分為(e-1)個塊
計算me=m1+m2
fori=3 toe-1
me=me+mi
end for
end procedure
編碼矩陣E構造:該矩陣大小為n×e,其元素是0或1,且每一行都有d個1,每列只有2個1。
文件編碼:在生成編碼矩陣后,用戶可以將編碼矩陣E乘以文件F′來對文件進行編碼。
C=E×F′
(3)
文件編碼算法:FileEncode (E,mj,n,e)
procedure:C→ FileEncode (E,mj,n,e)
fori=1 ton
sum=0
forj=1 toe
sum=sum+(Eij×mj)
end for
Ci1=sum
end for
end procedure
文件編碼過程如圖3。
圖3 文件編碼過程Fig.3 File encoding process
元數(shù)據生成:在對文件進行編碼之后,用戶通過使用密鑰S計算文件F′的每個塊的hash值來生成文件的元數(shù)據,并在預處理文件已經發(fā)送到云存儲中以后在本地刪除文件F′。
元數(shù)據生成算法:MetadataGen (mi,S)
procedure:M→ MetadataGen (mi,S)
forj=1 ton
end for
end procedure
元數(shù)據生成算法中,P表示一個素數(shù)。
將數(shù)據存儲在云中后,用戶需要通過challenge-response協(xié)議來檢查數(shù)據的完整性。為此,用戶創(chuàng)建challenge并發(fā)送到云服務器,接收到客戶端云服務器的challenge后,生成與挑戰(zhàn)相對應的響應并將response發(fā)送回客戶端,然后客戶端驗證數(shù)據的完整性。該階段由challenge生成、response生成和驗證3種算法組成。
Challenge生成:最初,用戶使用SOBOL隨機序列選擇隨機密鑰KSRP,并計算集合[1,n]的隨機索引1≤j≤n(j=1,…,c),其中,c=πKSRP(c),它阻止服務器猜測下一個challenge中將查詢哪個塊。用戶選擇一個隨機整數(shù)XA并計算YA,用于生成共享密鑰S′。
算法:ChallengeGen (KSRP,XA)
procedure: Chall→ ChallengeGen (KSRP,XA)
生成隨機密鑰KSRP, 選擇一些隨機整數(shù)XA
計算YA=rXAmodP,計算c=πKSRP(c)
生成Chall={c,YA}
end procedure
Response生成:基于收到的challenge,服務器生成response并發(fā)送給用戶進行進一步驗證。最初服務器選擇一個秘密整數(shù)XA并計算YA,之后計算共享密鑰S′,該共享密鑰用于生成response,即R。
算法:ResponseGen (c,YA,XB)
procedure: {Φ,YB}→ ResponseGen (c,YA,XB)
forj=1 toc
end for
end procedure
驗證:用戶通過檢查response是否有效來驗證數(shù)據的完整性。這個算法以Rj,Hj和Y為輸入,比較詢問中索引所有索引塊的response和哈希值,并檢查它們是否相同,如果相同,那么完整性被驗證,該算法將返回1,如不同則返回0。
算法:Verification (Φ,Hj,YB)
procedure: 0/1→Verification (Φ,Hj,YB)
Φ1=H′S′modP,Φ2=ΦSmodP
fori=1 toc
If (Φ1==Φ2)
return 1
else
return 0
end procedure
重建階段:在云存儲中存儲數(shù)據后,如果驗證了完整性,用戶可以從云服務器重建數(shù)據。原始數(shù)據可以通過重構算法恢復,算法以k和e作為輸入,并返回原始文件F′作為輸出。對于重構用戶將從任何k個服務器下載大小為α的數(shù)據,并刪除重復的塊,由此,用戶將從e塊中獲得e-1個塊,通過對所有e-1個塊進行異或運算,可以在這些e-1塊的幫助下生成剩余的一個塊。
算法:MetadataGen (mj,S)
procedure:M→MetadataGen (mj,S)
從任意k臺服務器下載所有數(shù)據,刪除重復塊
me=m1+m2
forj=3 toe-1
計算me=me+mj
end for
end procedure
再生階段:特定服務器網絡的故障能夠重新生成丟失的數(shù)據,丟失的數(shù)據可以通過從每d個服務器下載β數(shù)據來重新生成。
本文方法作為安全觀點進行分析,則需要確保在所有情況下的完整性和健全性。
為了確保完整性,需要滿足以下2個屬性:完整性和健全性。
完整性。只要用戶向服務器發(fā)送challenge,服務器就需要計算response,如果服務器計算相應challenge的response,則用戶將始終接受response為有效的。
健全性。只要用戶向服務器發(fā)送challenge,服務器就需要計算response,如果服務器不誠實地計算相應挑戰(zhàn)的響應,則用戶將總是以微小的概率接受響應。
所提出的方法是完整的或健全的證明。
1)完整性證明。
只須證明Φ1=Φ2就可。
Φ1=H′S′modP
(4)
從(5)式和(6)式可以得出Φ1=Φ2。
2)健全性證明。
在這個證明中,表明一個不誠實的服務器不能通過使用預先計算的元數(shù)據來欺騙用戶。主要有2種可能性,即服務提供商可以在不存儲用戶數(shù)據的情況下計算響應。
如果服務器猜測或使用預先計算的元數(shù)據,首先猜測正確的response以可忽略的概率發(fā)生,并且如果服務器嘗試使用預先計算的response,那么這是不可能的,因為每次用戶使用Sobol隨機序列向服務器發(fā)送一個新的隨機challenge,這是很難猜測到的。
另一種方法是通過基于先前的challenge發(fā)送response來欺騙用戶,在這種情況下,服務器必須從challenge Chall中找到j來計算正確的證明。
在本節(jié)中,通過測量3種操作(文件編碼,驗證和再生)的運行時間,分析本文提出的云存儲方案的性能,另外,還將此方法的運行時間開銷與現(xiàn)有的方法進行比較。
實驗環(huán)境:Intel Core i3 CPU和3 GB RAM的筆記本電腦,在MATLAB R2014b中使用各種參數(shù)進行實驗。在圖4顯示了文件編碼操作和再生操作的運行時間,編碼矩陣的生成很容易,因為不涉及任何算術運算。
圖4 文件編碼和再生操作的運行時間Fig.4 Runtime for file encoding and regeneration operations
從圖4可以看到,隨著文件大小增加,編碼矩陣的生成時間逐漸增加,將文件大小為50 MByte的doc文件分成多個塊時,執(zhí)行文件編碼操作所需的平均時間為3.64 s。對于再生操作運行時間,這是精確的修復,編碼和解碼規(guī)則不需要更新,因此計算復雜度較低。在實驗中,將文件大小為50 MByte的doc文件分成多個塊時,再生操作的平均時間為0.189 s。
將本文方法與糾刪碼(reed-solomon code, R-S code)和功能最小存儲再生碼functional minimum storage regenerating code, FMSR code)進行比較。
圖5 驗證操作的運行時間Fig.5 Runtime of verification operations
在圖5中顯示了驗證操作的運行時間,改變challenge中塊的數(shù)量與驗證操作運行時間的關系,階段性成線性關系,并且與其他2種方法比較,本文方法運行時間更短。
在圖6中,比較了本文方法與其他方法對云存儲數(shù)據安全性驗證的總體運行時間。
由圖6可以看出來,本文方法在云存儲數(shù)據安全性用時更少,并且隨著文件的增大,運行時間減少的更明顯。
圖7比較了本文方法與其他方法在challenge中塊的數(shù)量與編碼速率的關系,由圖7可以得到本文方法編碼速率高于其他2種方法,隨著challenge中塊的數(shù)量的增加,編碼速率呈下降趨勢,但本文方法還是優(yōu)于其他2種方法。
圖6 不同方法對云數(shù)據安全性驗證的運行時間Fig.6 Running time of cloud data security verification under different methods
圖7 不同方法下編碼速率Fig.7 Code rate under different methods
在本文中,通過加密哈希函數(shù)提出了一種基于EEMSR的新方法,以確保存儲在云中的數(shù)據的完整性和可用性。從安全分析中發(fā)現(xiàn)本文方法足夠安全,適用于多種類型的攻擊。實驗表明,本文方法是可行的與有效的,并且與現(xiàn)有其他方法比較,本文方法花費較少的運行時間。本文方法使得云存儲服務更安全,通過確保完整性以及存儲在云中數(shù)據的可用性,具有較少的運行時間開銷。