鄭李偉,王雪平
(復(fù)旦大學(xué) 計算機(jī)科學(xué)技術(shù)學(xué)院,上海 200082)
隨著數(shù)據(jù)量越來越大,越來越多的企業(yè)、個人有了上云的需求.最近幾年云存儲方面的產(chǎn)業(yè)也飛速發(fā)展,各大廠商紛紛推出自己的云存儲產(chǎn)品[1].而用戶們也喜歡使用云存儲產(chǎn)品,因為云存儲產(chǎn)品不需要太多的投入就可以解放本地的存儲空間,而且具有良好的擴(kuò)展性[2].
然而云存儲也有壞處:讓用戶失去了對文件的控制權(quán)[3].如果存儲方不是絕對安全的,那么就可能引發(fā)安全性方面的問題[4].例如,云存儲環(huán)境中常見的是以明文方式存儲文件,這樣的做法缺少了完整性檢查、控制訪問機(jī)制.而且,如果把敏感數(shù)據(jù)存儲在他人的云存儲環(huán)境里,就可能出現(xiàn)泄密問題,進(jìn)而可能引發(fā)安全事故.
但是,大多數(shù)的云存儲服務(wù)商都要求用戶以明文存儲,并信任他們的服務(wù)器和管理員.然而,事實上他們的服務(wù)并不那么可靠,云存儲泄密事件屢見不鮮.過去一段時間,許多采用亞馬遜網(wǎng)絡(luò)服務(wù)公司的AWS S3 簡單云存儲服務(wù)的企業(yè),其中包括道瓊斯、威瑞森、聯(lián)邦快遞和特斯拉等公司都發(fā)生了數(shù)據(jù)泄露的安全事故.雖然在大多數(shù)情況下并不一定是亞馬遜公司云平臺的問題.例如聯(lián)邦快遞和特斯拉公司,這兩家公司的AWS S3 存儲服務(wù)器沒有設(shè)定密碼進(jìn)行保護(hù),導(dǎo)致其關(guān)鍵數(shù)據(jù)暴露無遺.所以,無論云存儲服務(wù)的提供商是否值得信賴,都應(yīng)該有健全的安全機(jī)制來保證用戶的數(shù)據(jù)安全.
為此,一些存儲系統(tǒng)提出了自己的解決方案[5,6].這些存儲系統(tǒng)保證云存儲安全性的主要手段是加密文件[7].他們將數(shù)據(jù)的訪問控制權(quán)交給數(shù)據(jù)擁有者,其他用戶想要訪問數(shù)據(jù),需要先與數(shù)據(jù)擁有者聯(lián)系[8],這樣的做法在一定程度上提高了安全性,但是這樣也引入了新的問題:第一,數(shù)據(jù)擁有者有了更高的數(shù)據(jù)管理門檻,甚至可能需要提供在線服務(wù),這可能讓用戶流失.第二,隨著數(shù)據(jù)擁有者分享的用戶增多,對分享用戶的管理也會越來越復(fù)雜.第三,將數(shù)據(jù)分享給其他用戶后,其他用戶可能會做出超出分享權(quán)限的操作.
針對現(xiàn)有的情況來看,安全云存儲系統(tǒng)主要需要解決的問題是在保證數(shù)據(jù)不會被服務(wù)提供者和其他只擁有部分權(quán)限的用戶竊取的情況下,讓系統(tǒng)的開銷盡可能小.以保證用戶能在保證安全的情況下繼續(xù)低成本的使用云產(chǎn)品服務(wù).
本文基于以下假設(shè):第一,數(shù)據(jù)需要存儲在不可信的云存儲服務(wù)器上,這個云存儲服務(wù)器可能會破壞、竊取用戶的數(shù)據(jù).第二,一些惡意用戶可能會竊取其他用戶的數(shù)據(jù)或者執(zhí)行超出自己權(quán)限范圍的操作[9].根據(jù)以上假設(shè),本文提出了一套新的安全云存儲系統(tǒng).
這套安全云存儲系統(tǒng)將文件轉(zhuǎn)化為一個基于Merkle 樹設(shè)計的Merkle-B+樹來存儲.Merkle-B+樹的各結(jié)點上存儲著通過CTR 模式的AES 分組加密算法加密形成的文件密文.基于這樣的設(shè)計,當(dāng)發(fā)生對文件的修改時,不需要對所有文件內(nèi)容都進(jìn)行重加密和重哈希,只需要對其中被修改的部分重加密和重哈希即可,這樣既保證了文件的安全性,又降低了完整性檢查帶來的重哈希以及文件重加密的開銷.本系統(tǒng)還通過非對稱的讀寫密鑰的分發(fā)實現(xiàn)了文件讀寫權(quán)限的分離.并且本系統(tǒng)用密鑰來實現(xiàn)文件的讀寫分享等功能,不需要依賴可信第三方也不需要要求客戶端長時間在線.本文設(shè)計的安全存儲系統(tǒng)有安全性高、加解密速度快、文件額外占用空間少、管理和使用成本低等特點.
本文第1 節(jié)介紹系統(tǒng)設(shè)計的目標(biāo),第2 節(jié)介紹系統(tǒng)設(shè)計中的關(guān)鍵技術(shù)和具體實現(xiàn),第3 節(jié)給出系統(tǒng)的性能測試結(jié)果并與其他系統(tǒng)進(jìn)行比較,第4 節(jié)進(jìn)行總結(jié)和展望.
如引言所說,現(xiàn)有的安全存儲系統(tǒng)保證安全性的主要手段就是加密文件.而主要的研究方向在于:(1)實現(xiàn)現(xiàn)有的存儲系統(tǒng)難以實現(xiàn)的功能.如對加密文件的內(nèi)容進(jìn)行檢索等功能.(2)降低加密文件所帶來的開銷.本文的研究方向在于第二點,即提出一種開銷更低的安全存儲系統(tǒng).
相關(guān)工作介紹如下:CFS[10]是早期的安全存儲系統(tǒng).它通過在磁盤上架設(shè)一層虛擬磁盤,在每次往磁盤中寫的時候就對文件進(jìn)行加密,從磁盤中讀的時候就對文件解密的方式來實現(xiàn)安全存儲.而CFS 的訪問控制就是通過分享這個加密文件的密鑰來實現(xiàn)的.這就導(dǎo)致CFS 只能實現(xiàn)粗粒度的分享而無法實現(xiàn)讀寫權(quán)限的分離.
Cepheus[11]率先提出了鎖盒子的概念.在用戶間進(jìn)行文件分享時,需要依賴一個可信的密鑰服務(wù)器(可信第三方)來存儲用戶信息并依賴此可信第三方進(jìn)行身份認(rèn)證和訪問控制.
Corslet[12]在Cepheus 的基礎(chǔ)上進(jìn)行了進(jìn)一步的優(yōu)化創(chuàng)新.它通過鎖盒子和Merkle樹的使用,將文件明文的hash 值和加密文件的密鑰統(tǒng)一起來,而且使得在對文件進(jìn)行修改時,只需要對文件中被修改的文件塊進(jìn)行重加密和重哈希即可,可以實現(xiàn)高效的重加密和重哈希.但是Corslet 依然需要引入一個可信第三方來實現(xiàn)訪問控制和身份認(rèn)證.
SiRiUS[13]使用非對稱密鑰進(jìn)行權(quán)限控制.在SiRiUS中,文件是被整體加解密的,完整性校驗也是對整個文件明文去計算哈希來保證的,當(dāng)發(fā)生權(quán)限撤銷、文件修改時,就需要對文件整體進(jìn)行重新加密和重新哈希,性能開銷較大.
Plutus[8]提供了組共享、懶惰撤銷、隨機(jī)訪問、文件名加密等功能.但Plutus 的密鑰分享方式門檻很高:當(dāng)用戶想訪問某文件時,需要向文件擁有者索要密鑰,這時文件擁有者必須在線才能完成密鑰的分發(fā).
綜上所述,現(xiàn)有的安全存儲系統(tǒng)在高效的加解密方式和不需要可信第三方兩者之間只能實現(xiàn)其中一項.故本文提出了一種新的安全存儲系統(tǒng),可以既實現(xiàn)高效的加解密又不需要可信第三方.
本系統(tǒng)架設(shè)在底層文件系統(tǒng)之上,與底層文件系統(tǒng)相互獨立,當(dāng)要從底層文件系統(tǒng)中讀或者要向底層文件系統(tǒng)中寫的時候,文件經(jīng)過本系統(tǒng)會自動解密或者加密,然后從底層文件系統(tǒng)中讀出或者寫入.這樣就形成了一個虛擬的磁盤,用戶在使用的時候感覺不到加密解密的存在,仿佛在使用一個安全的虛擬磁盤.這樣的做法提高了系統(tǒng)的易用性,降低了用戶的使用門檻和管理成本.
本系統(tǒng)使用安全易用的密鑰實現(xiàn)文件共享機(jī)制.不需要依賴可信第三方也不需要要求用戶長時間在線來保證文件的分享.文件擁有者可以分享文件給其他用戶,而且可以選擇僅分享讀權(quán)限或分享讀寫權(quán)限.從服務(wù)提供方的角度來看,不需要可信第三方,可以大大降低運(yùn)營成本,從而可以為用戶提供更加便宜的產(chǎn)品.從用戶的角度來看,不需要用戶長時間在線來保證文件的分享,這樣降低了用戶的使用門檻和使用成本,更加簡單易用.
本系統(tǒng)保證只有合法的被授權(quán)的用戶可以獲得數(shù)據(jù)明文,非法的用戶、服務(wù)器管理員、底層文件系統(tǒng)管理員都無法獲取數(shù)據(jù)明文.而且本系統(tǒng)有完整性保護(hù),對數(shù)據(jù)的非法篡改可以被用戶察覺,從而保證用戶得到的數(shù)據(jù)都是正確的[12].端到端的保密性是為了保證文件的明文不會被服務(wù)提供方竊取.完整性檢查用來檢測是否有只讀用戶對文件進(jìn)行了寫操作,從而保證用戶只能做自己權(quán)限內(nèi)的事,不能做超出權(quán)限范圍的事.以上兩點保證了存儲系統(tǒng)的安全性.
本系統(tǒng)可以讓客戶端不需要存儲密鑰,降低被攻擊而泄密的風(fēng)險,具有較高的安全性,也降低了用戶管理密鑰的成本.而且密鑰的使用和存放對用戶是透明的,對于用戶來說更加易用,使用成本更低.對于每一個文件只會產(chǎn)生一個對稱密鑰用來加密,一方面,這樣加解密更快,另一方面,這樣文件產(chǎn)生的密鑰數(shù)較少,方便密鑰管理,讓密鑰管理的成本更低,也更加節(jié)約存儲空間.
本系統(tǒng)對文件的加解密都使用的是對稱密鑰,這樣速度更快.而且本系統(tǒng)通過將文件分塊化處理,使用分塊化處理的方法讓文件被修改后只需要重加密其中被修改的文件塊,并只需要對這些塊重新進(jìn)行哈希計算,而不需要對整個文件進(jìn)行重加密和重哈希計算.所以,表現(xiàn)出較高的性能.
為下文描述方便,本文所用術(shù)語的縮寫及含義如表1 術(shù)語表.另外,系統(tǒng)的整體結(jié)構(gòu)如圖1 系統(tǒng)結(jié)構(gòu)圖.
圖1 系統(tǒng)結(jié)構(gòu)圖
表1 術(shù)語表
存儲服務(wù)器SS 負(fù)責(zé)存放文件,在用戶視角中的一個文件,在存儲服務(wù)器中被存儲為一棵Merkle-B+樹.Merkle-B+樹上不僅存儲有文件的密文還有文件明文的哈希值,其中明文的哈希值用來實現(xiàn)完整性檢驗.Merkle-B+樹的具體實現(xiàn)在后面詳細(xì)介紹.每個用戶會有一對公私鑰——UEK 和UDK.其中UDK 是通過用戶的密碼直接生成的,而UEK 是和UDK 匹配的公鑰,直接存放在SS 上.因此,UDK 只在使用時由用戶鍵入密碼后直接生成.這樣CL 本地就不需要存儲UDK,提高了系統(tǒng)的安全性.當(dāng)需要使用UEK 時可以直接從SS處獲得UEK.FSK 是一個對稱密鑰,用來加解密文件,使用對稱密鑰來加解密文件速度比非對稱密鑰更快,可以達(dá)到更高的效率.RHSK 和RHDK 用來加解密Merkle-B+樹的根結(jié)點,以此來實現(xiàn)讀寫權(quán)限的分離.這部分內(nèi)容之后會詳細(xì)介紹.
本文基于Merkle 樹[14]設(shè)計了Merkle-B+樹來完成存儲文件、進(jìn)行完整性檢驗等功能.如圖2,Merkle-B+樹分為葉子節(jié)點和非葉子節(jié)點.其中,葉子節(jié)點有6 個部分組成:hash 部分、CTR 部分、文件內(nèi)容部分、指向父節(jié)點的指針、指向下一個葉子節(jié)點的指針、指向前一個葉子結(jié)點的指針.其中hash 部分記錄了文件內(nèi)容明文的哈希值.系統(tǒng)使用AES 的CTR 加密模式,CTR 部分存儲CTR 數(shù).本系統(tǒng)將一個文件分成多個塊,最小的加解密和哈希計算粒度是文件塊,每個文件塊的密文存儲在一個結(jié)點的文件內(nèi)容區(qū)域上.非葉子結(jié)點由4 個部分組成:hash 部分、指向父節(jié)點的指針、指向下一個非葉子節(jié)點的指針、指向上一個非葉子結(jié)點的指針.其中hash 部分值的計算方法如下:
圖2 Merkle-B+樹結(jié)構(gòu)圖
其中,||表示拼接.上層結(jié)點的hash 部分是下層節(jié)點的hash 部分的拼接的hash 值.這樣的Merkle-B+樹設(shè)計可以讓文件有以下好處:
(1)輕量級的重加密.通過將文件分塊,這樣在對文件進(jìn)行修改后,只需要對其中的一部分進(jìn)行重加密,而不需要對整個文件繼續(xù)重加密.這樣加快了加密速度,實現(xiàn)了一種輕量級的重加密.
(2)輕量級的重哈希.為了實現(xiàn)完整性檢驗的功能,原來對文件進(jìn)行修改后需要對全文進(jìn)行重哈希,這樣才能通過比對哈希值的方式來確認(rèn)文件的完整性,從而發(fā)現(xiàn)是否有用戶篡改了文件內(nèi)容.這樣就意味著在對一個文件的部分繼續(xù)進(jìn)行修改后需要對全文進(jìn)行一次哈希計算,這樣開銷較大.將文件組織成Merkle-B+樹后,可以只對被修改的塊進(jìn)行重哈希,然后按照樹的結(jié)構(gòu)一層層向上重哈希就可以.這樣將O(n)的重哈希時間就降低到了O(logn)的時間.而且因為B+樹的度較大,樹高較小,這樣在實際進(jìn)行重加密時所消耗的時間只會更小.
(3)能夠適應(yīng)多種場景.Merkle-B+樹的樹高、度等參數(shù)都是可以由用戶進(jìn)行自定義調(diào)節(jié)的,可以由用戶自己調(diào)節(jié)來適應(yīng)各種應(yīng)用場景.滿足各種時間和空間的要求.
Merkle-B+樹的使用過程在訪問協(xié)議部分介紹.
本系統(tǒng)為了能讓文件能夠分塊,采用AES 分組加密算法的CTR 加密模式.采用CTR 加密模式是因為:
(1)CTR 加密模式不需要對文件進(jìn)行填充,方便文件塊的處理而且節(jié)約空間開銷.
(2)支持并行計算,可以充分利用CPU 資源來加速加密、解密.
(3)相同的明文加密后呈現(xiàn)為不同的密文,不容易被統(tǒng)計攻擊,具有更好的安全性.
如圖2所示,每個葉子節(jié)點上不止存儲著文件的密文,還存儲著CTR 數(shù)值.當(dāng)用戶要對文件進(jìn)行解密的時候,可以用FSK 加密CTR 值后得到用來加解密文件的對稱密鑰FFK,然后用FFK 對文件進(jìn)行加解密.其中,FSK 是在文件上傳時隨機(jī)生成的,對一個文件的所有文件塊進(jìn)行加解密都使用同一個FSK 密鑰.
至此,文件被組織成Merkle-B+樹的形式,文件分塊存儲在Merkle-B+樹中.
完整性檢查如上文在Merkle-B+介紹中所說的那樣,由Merkle-B+的hash 部分來完成,具體使用方法在訪問協(xié)議部分介紹.而讀寫權(quán)限分離的實現(xiàn)是通過密鑰來實現(xiàn)的,即,是否具有某種權(quán)限是由是否具有某種密鑰來決定的.
文件在上傳時會生成一個FSK、一個RHSK、一個RHDK.其中FSK 用來進(jìn)行加密文件.而RHSK 和RHDK 用來加密和解密Merkle-B+樹的根結(jié)點,這樣就可以利用完整性檢驗來實現(xiàn)讀寫權(quán)限分離的.
具體來說,將文件轉(zhuǎn)化為上文說的Merkle-B+樹后,用RHSK 來加密根節(jié)點,然后用UEK 加密RHSK得到RHSK 的密文.將FSK 的密文、RHSK 的密文、RHDK 的明文以及Merkle-B+樹存入SS.當(dāng)用戶要讀取文件內(nèi)容時,用戶可以從SS 處拿到FSK 密文,然后用UDK 解密FSK 密文.之后,用戶用FSK 明文去解密Merkle-B+樹,得到每一個文件塊的明文,拼接在一起就是文件內(nèi)容.按照Merkle-B+樹的結(jié)構(gòu)對每個文件塊重新計算hash 值進(jìn)行驗證,并對每個結(jié)點的hash值進(jìn)行拼接,一層層沿著路徑向上求hash 值,得到計算的RHV.使用RHDK 解密Merkle-B+樹的根哈希值,將該值與計算得到的RHV 進(jìn)行比較,如果一致就代表文件沒有被篡改,如果不一致就代表文件被篡改了.這樣就實現(xiàn)了完整性保護(hù).
而讀權(quán)限和寫權(quán)限用是否有將RHSK 分享給指定用戶來區(qū)分.因為如果用戶沒有RHSK 那么他只能通過SS 中存儲的RHDK 來解密得到RHV,即,沒有RHSK 的用戶只能進(jìn)行RHV 比較,做到完整性檢驗來保證文件內(nèi)容沒有被篡改過,卻不能對文件進(jìn)行寫操作.如果沒有RHSK 的用戶篡改Merkle-B+上的文件內(nèi)容,那么這個用戶會因為沒有RHSK 無法對RHV 進(jìn)行加密,在之后用戶進(jìn)行讀取RHV 并對RHV 使用RHDK 進(jìn)行解密后,得到的結(jié)果就和計算RHV 不同,就可以發(fā)現(xiàn)文件被篡改了.這樣就保證了只有讀權(quán)限的用戶無法對文件內(nèi)容進(jìn)行篡改.而有RHSK 的用戶,即,具有寫權(quán)限的用戶在修改文件后,會修改RHV 并用RHSK 進(jìn)行加密.這樣之后用戶進(jìn)行讀取的時候,用RHDK 對密文解密得到的值就是正確的RHV,可以通過完整性檢驗.本系統(tǒng)使用每個葉子節(jié)點的哈希值保證了每個文件塊的完整性,又用非葉子結(jié)點保證了以此結(jié)點為根的子樹的完整性,所以,Merkle-B+樹的根結(jié)點就保證了整棵樹的完整性.又因為只有具有寫權(quán)限的用戶才具有RHSK 密鑰,這樣非法用戶一旦篡改了文件內(nèi)容,就會立刻因為通不過完整性檢查而被發(fā)現(xiàn).所以,可以說RHSK 密鑰保證了Merkle-B+樹的完整性,又因為Merkle-B+樹保存了所有文件塊的明文的哈希部分,所以,保證了加密文件的完整性.
采用Merkle-B+樹來進(jìn)行完整性檢查和讀寫權(quán)限分離的好處如上面所說.當(dāng)合法地修改文件某個或某些塊的內(nèi)容時,只需要重新計算這些塊對應(yīng)的葉子節(jié)點的哈希值,并沿著這些葉子節(jié)點通往根結(jié)點的路徑上所經(jīng)過非葉子結(jié)點的哈希值.最后對更新后的根哈希用RHSK 重新加密.這樣的重加密的時間復(fù)雜度是logn級的.如果不使用Merkle-B+樹這樣的結(jié)構(gòu),就意味著當(dāng)一個文件的部分被修改時,就需要對整個文件進(jìn)行重哈希,這樣的開銷較大,特別對于大文件來說,開銷可能非常巨大.所以,使用Merkle-B+樹的方式是更好的.
文件的共享和訪問控制通過密鑰來實現(xiàn).即,是否擁有對一個文件的讀權(quán)限、寫權(quán)限的根本區(qū)別在于是否擁有某種密鑰.當(dāng)用戶A 想要分享文件的讀權(quán)限給用戶B 時,會從SS 處得到用自己UEK 加密的FSK,然后用自己的USK 解密,得到對應(yīng)FSK 的明文,然后用用戶B 的UEK 進(jìn)行加密,得到FSK 的密文上傳SS.這樣用戶B 就獲得了FSK,就可以用FSK 來解密Merkle-B+樹獲得文件內(nèi)容并進(jìn)行完整性檢驗.當(dāng)用戶A 想要分享文件的寫權(quán)限給用戶B 時,會從SS 處得到用自己UEK 加密的FSK 和RHSK,用自己的USK 解密后,然后用用戶B 的UEK 來對FSK、RHSK 密鑰進(jìn)行加密.之后將加密后的FSK、RHSK 上傳到SS 上.之后用戶B 可以從SS 得到用自己UEK 加密的FSK、RHSK,用USK 解密后得到FSK 和RHSK,就可以用FSK 來解密文件,得到文件明文.在修改文件內(nèi)容,進(jìn)行重加密和重哈希后,用RHSK 加密新的RHV,這樣就不會影響后續(xù)使用.
而使用密鑰去實現(xiàn)文件共享和訪問控制必然意味著密鑰數(shù)量的增加,這就引入了如何有效的管理密鑰的問題[15].很多系統(tǒng)都提出了自己的密鑰管理方式[10].本文采用密鑰層級管理的方式來管理密鑰.層級結(jié)構(gòu)如圖3 密鑰層級管理示意圖所示.在本系統(tǒng)中,密鑰分為2 個層級來進(jìn)行組織和管理:用戶密鑰、其他密鑰.其中,其他密鑰包括FSK、RHDK 等密鑰.這樣就將系統(tǒng)所需的密鑰按照金字塔形式進(jìn)行排列,用上層密鑰來加密、解密下層的密鑰,這樣用戶只需要管理上層密鑰,其他密鑰可以置于不可信的環(huán)境中.這樣就在保證系統(tǒng)安全性的前提下,用戶只需要保存少量密鑰就可以達(dá)到想要的效果,降低了用戶管理密鑰的成本.在本系統(tǒng)的密鑰層級中,用戶密鑰是密鑰體系的第一層,要想分發(fā)或獲取其他密鑰必須先經(jīng)過用戶密鑰.這樣用戶就只需要管理用戶密鑰即可.又因為用戶密鑰中的公鑰UEK 是可以直接存放在SS 上的.所以,用戶只需要管理用戶密鑰的私鑰UDK 就可以了.這樣大大降低了用戶的管理成本.
圖3 密鑰層級管理示意圖
本系統(tǒng)能夠在保證安全性的前提下,實現(xiàn)輕量級的重加密和重哈希不僅和之前的系統(tǒng)架構(gòu)、加密方法有關(guān),還和訪問協(xié)議有關(guān).下面介紹本系統(tǒng)的訪問協(xié)議:
(1)上傳文件.上傳文件的流程如下:
①對文件進(jìn)行初始分塊,按塊分別計算hash 值.然后生成一個對稱密鑰FSK,取當(dāng)前的CTR 算子,得到當(dāng)前的CTR 數(shù).用對稱密鑰FSK 對CTR 數(shù)進(jìn)行加密,用得到的FFK 與文件明文進(jìn)行異或來做加密.至此,得到了分塊的文件密文、分塊的明文hash 值和CTR 值.
②將分塊的明文hash 值按照Merkle-B+樹的層次關(guān)系沿著樹的路徑計算上層的非葉子結(jié)點的hash 值,并完成樹的構(gòu)建.然后生成一對非對稱密鑰RHSK 和RHDK,用RHSK 加密Merkle-B+樹的根哈希值.形成最終的Merkle-B+樹上傳到SS.
③上傳用戶用自己的UEK 去加密FSK、RHSK,然后將加密后的FSK、RHSK 的密文以及RHDK 的明文上傳到SS.
(2)讀取文件.讀取文件的流程如下:
①從SS 處獲得加密后的FSK 密文以及RHDK明文,同時獲得Merkle-B+樹.用自己的UDK 解密FSK.用FSK 解密Merkle-B+樹葉子節(jié)點上的分塊文件密文,從而獲得文件明文.
②為了驗證文件是否被篡改過.需要進(jìn)行完整性檢查.對每個文件塊明文求hash 值,然后按照樹的結(jié)點路徑層層向上計算出根hash 值.用RHDK 解密根哈希結(jié)點,比較兩者是否一致就可以判斷出是否被篡改過.
(3)寫文件.寫文件的流程如下:
①執(zhí)行讀文件的過程.并從SS 處獲取用自己的UEK 加密的RHSK 密文.
②在用戶對文件進(jìn)行修改后,將被修改的塊用FSK 密鑰加密CTR 數(shù)生成的密鑰來重新加密被修改的塊,來完成部分重加密.
③然后對這些塊的明文進(jìn)行hash 計算,得到新的hash 值,按照結(jié)點的路徑層層向上更新結(jié)點的hash 值.對根hash 用RHSK 加密后形成新的Merkle-B+樹上傳到SS.
(4)分享讀權(quán)限.為了方便敘述,將分享權(quán)限的用戶稱為A,被分享權(quán)限的用戶稱為B.分享讀權(quán)限的流程如下:
①用戶A 從SS 處獲取用A 用戶的UEK 加密過的FSK 密鑰和用戶B 的UEK.
②A 用UDK 解密FSK 密文,得到FSK 明文,用用戶B 的UEK 加密FSK 明文,得到用戶B 加密的FSK 密鑰的密文.然后上傳到SS.
(5)分享寫權(quán)限.為了方便敘述,將分享權(quán)限的用戶稱為A,被分享權(quán)限的用戶稱為B.分享寫權(quán)限的流程如下:
①用戶A 從SS 處獲取用A 的UEK 加密過的FSK、RHSK 密文以及用戶B 的UEK.
②A 用UDK 解密FSK 密文和RUSK 密文,得到FSK、RHSK 明文,用B 的UEK 加密FSK、RHSK 明文,得到用B 的UEK 加密的FSK、RHSK 密鑰的密文.然后上傳到SS.
(6)權(quán)限撤銷.權(quán)限撤銷的流程如下:
①擁有文件所有權(quán)的用戶向SS 提出撤銷某用戶的權(quán)限.SS 刪除所有對應(yīng)得FSK、RHSK、RHDK 以及Merkle-B+樹.
②重新執(zhí)行上傳操作.
③重新分享給其他用戶權(quán)限.
因為考慮到實際使用中會有很多用戶并發(fā)的訪問文件,所以,本系統(tǒng)實現(xiàn)了一套鎖機(jī)制來保證并發(fā)安全,支持多線程并發(fā)讀同一個文件[16].本系統(tǒng)使用惰性重加密、重哈希的方式來提高性能.比如,當(dāng)對Merkle-B+樹進(jìn)行修改時,不會馬上進(jìn)行重加密和重哈希,而是等到用戶確認(rèn)上傳或者確認(rèn)保存的時候才會進(jìn)行重加密和重哈希,這樣就減小了開銷.完整性檢查也是惰性的,只有當(dāng)用戶打開文件的時候才會進(jìn)行完整性檢查.檢查完畢之后會修改一個“是否完整”的標(biāo)記,從而保證完整性檢查是惰性的且只做一次.另外,還有緩存機(jī)制,會將讀取過的明文緩存起來,再次讀取的時候可以從本地的緩存中直接讀取,省去了解密的過程,降低了系統(tǒng)開銷.
本系統(tǒng)采用加密的方式來保證系統(tǒng)的安全性.可以說是將系統(tǒng)的安全性委托給加解密的體系.與Corslet對比來看,兩個系統(tǒng)都是對文件進(jìn)行切分后使用對稱密鑰來對文件進(jìn)行加密.Corslet 在分享文件權(quán)限時依賴可信第三方,本系統(tǒng)通過非對稱密鑰體系來完成相同的功能,而這樣的非對稱加密方式本身就是一種安全性很高、工業(yè)界普遍采用的加密方式.而且兩系統(tǒng)在文件服務(wù)器上存儲的都是文件密文,不易被攻擊.所以,總體來看,本系統(tǒng)的安全性至少不會比Corslet 差.
在實驗部分中,本系統(tǒng)被架設(shè)在網(wǎng)絡(luò)文件系統(tǒng)NFS 上,之所以架設(shè)在網(wǎng)絡(luò)文件系統(tǒng)NFS 上,是因為NFS 可以很好的模擬實際使用場景.在實際使用中,當(dāng)對文件執(zhí)行寫操作時需要通過網(wǎng)絡(luò)將文件發(fā)送到服務(wù)器上,而執(zhí)行讀操作時也需要通過網(wǎng)絡(luò)從服務(wù)器處獲取文件.而在NFS 客戶端上讀寫的同時,會把寫的內(nèi)容通過網(wǎng)絡(luò)發(fā)送到NFS 服務(wù)器上,把需要讀的內(nèi)容通過網(wǎng)絡(luò)從NFS 服務(wù)器上獲取過來.所以,NFS 服務(wù)器能很好的模擬實際情況.之后對架設(shè)了本系統(tǒng)、架設(shè)了Corslet 系統(tǒng)[12]、沒有架設(shè)任何系統(tǒng)的NFS 系統(tǒng)進(jìn)行讀寫實驗,比較三者的讀寫耗時差異.在結(jié)果分析部分對多種現(xiàn)有的安全存儲系統(tǒng)進(jìn)行綜合比較,并根據(jù)提出各系統(tǒng)的論文中,給出的各系統(tǒng)與未架設(shè)系統(tǒng)的NFS 文件系統(tǒng)上的讀寫耗時差異的結(jié)果,來進(jìn)行定量的分析.
文中用2 臺服務(wù)器來對本系統(tǒng)進(jìn)行性能測試.其中一臺作為NFS 服務(wù)器,另一臺作為NFS 客戶機(jī),分別作為系統(tǒng)的服務(wù)器和客戶機(jī).其中,服務(wù)器的配置為2 核CPU、2 GB 內(nèi)存,客戶機(jī)的配置為4 核CPU,4 GB內(nèi)存.兩臺機(jī)器以局域網(wǎng)連接.在加密算法的選擇上,使用AES-256 作為文件加密的加密算法,以CTR 加密模式作為本系統(tǒng)的AES 加密模式.以RSA-512 算法來生成RHSK 和RHDK 用來實現(xiàn)讀寫權(quán)限的區(qū)分.
在這部分中實現(xiàn)了本系統(tǒng)和Corslet 系統(tǒng).比較架設(shè)了本系統(tǒng)的NFS 客戶端、架設(shè)了Corslet 系統(tǒng)的NFS客戶端、沒有架設(shè)任何系統(tǒng)的NFS 客戶端三者的讀寫文件速度.
4.2.1 大文件多系統(tǒng)性能比較測試
這部分中本系統(tǒng)先創(chuàng)建一個100 MB 的文件[17],然后以讀寫模式打開此文件,將文件平均分成若干塊,來生成對應(yīng)的Merkle-B+樹.而Corslet 也按照相同的分塊粒度來對文件進(jìn)行分塊.而未架設(shè)任何系統(tǒng)的NFS 客戶端則不對文件分塊.比較多種系統(tǒng)在不同切分方法下,在實驗中表現(xiàn)出來的從磁盤上讀取全部文件內(nèi)容明文所消耗的時間、將全部文件明文轉(zhuǎn)化為密文并向磁盤寫入所消耗的時間、讀取文件后順序修改部分文件后將新文件重新寫入磁盤所消耗的時間、讀取文件后隨機(jī)修改部分文件后將新文件重新寫入磁盤所消耗的時間.實驗中計量的這4 個量分別代表了下載文件所消耗的時間、上傳新文件所消耗的時間、讀取文件并順序修改部分內(nèi)容所消耗的時間、讀取文件并隨機(jī)修改部分內(nèi)容所消耗的時間.將文件分為800 塊、160 塊的實驗結(jié)果如圖4、圖5所示.
圖4 大文件分800 塊的多系統(tǒng)各操作開銷比較圖
圖5 大文件分160 塊的多系統(tǒng)各操作開銷比較圖
可以看出與沒有架設(shè)任何系統(tǒng)的NFS 相比,無論是架設(shè)了Corslet 還是架設(shè)了本系統(tǒng),在讀取、寫入、修改文件上增加的時間開銷都不大.這證明本系統(tǒng)和Corslet 系統(tǒng)都是在大文件讀寫環(huán)境下開銷較小的系統(tǒng).而在寫入和修改操作上本系統(tǒng)相比Corslet 系統(tǒng)所消耗的時間的略少的原因是Corslet 系統(tǒng)以文件塊的hash 值作為文件塊的加密密鑰.所以,在將文本轉(zhuǎn)化為Corslet 中的鎖盒子結(jié)構(gòu)[4]時,為了能夠把密鑰安全的存儲在不可信任的環(huán)境下,需要對所有文件塊的hash 值,即密鑰都進(jìn)行加密.而本系統(tǒng)一個文件只生成一個FSK 密鑰,也只需要對FSK 進(jìn)行一次加密.而求hash 值的動作兩者都有,這部分開銷基本一致.所以,在寫入上,因為本系統(tǒng)的密鑰加密次數(shù)相對較少,所以速度略快.而在修改上,也是因為Corslet 系統(tǒng)的密鑰是由文件塊的hash 值來充當(dāng)?shù)?所以,當(dāng)一個文件塊發(fā)生修改就需要修改密鑰,而這樣的動作又需要對新hash 值,即新密鑰值,進(jìn)行加密.因為加密次數(shù)較多,所以開銷更大,所消耗時間稍多.
從產(chǎn)生的密鑰數(shù)的角度看,Corslet 系統(tǒng)每個文件塊都會求hash 值,并以這個hash 值作為密鑰,而且這個密鑰需要加密后存儲在不可信任環(huán)境下,這樣一個文件就會產(chǎn)生多個密鑰,這樣多的密鑰不僅僅會像上面說的那樣,讓讀寫變慢.而且管理它們的成本也很高.而本系統(tǒng)整個文件只會產(chǎn)生一個密鑰,用同一個密鑰來對每個文件塊來進(jìn)行加解密.這樣本系統(tǒng)在密鑰所需的空間上是占一定優(yōu)勢的,而且密鑰數(shù)量更少就意味著更小的管理開銷和使用成本.
另外,可以看到無論是本系統(tǒng)還是Corslet 系統(tǒng)隨機(jī)寫入所消耗的時間相比順序?qū)懭攵驾^多一些.這是因為隨機(jī)寫入比順序?qū)懭霑婕案嗟奈募K,兩個系統(tǒng)都需要對更多的文件塊進(jìn)行重加密、重哈希,所以所消耗的時間略長.另外,從按照800 塊進(jìn)行劃分和按照160 塊進(jìn)行劃分的實驗結(jié)果可以看出,劃分的塊數(shù)越多,在修改時表現(xiàn)的性能越好,因為每個塊更小,重加密和重哈希的開銷也更小.而且還可以看出分塊數(shù)量越少,那么在上傳和下載文件上的耗時和未架設(shè)安全存儲系統(tǒng)的NFS 文件系統(tǒng)相比差別越小.這是因為分塊數(shù)量越多,那么Merkle-B+樹的結(jié)點也越多,構(gòu)建和讀取這樣一棵樹的開銷也更多.所以,對文件的切分越細(xì),分成越多塊,文件上傳和下載所附加的額外開銷就越大,而文件在修改時所需要的額外開銷就越小.所以,用戶可以根據(jù)實際情況,調(diào)節(jié)分塊數(shù)量來滿足自己的特異性需求.
4.2.2 小文件多系統(tǒng)性能比較測試
這部分中本系統(tǒng)創(chuàng)建一個20 KB 的文件,然后以讀寫模式打開此文件,按照和大文件一樣的實驗方法進(jìn)行實驗,結(jié)果如圖6、圖7所示.
圖6 小文件分160 塊的多系統(tǒng)各操作開銷比較圖
圖7 大文件分800 塊的多系統(tǒng)各操作開銷比較圖
可以看出在小文件環(huán)境下,無論是本系統(tǒng)還是Corslet 的開銷都是較大的.這主要是因為本系統(tǒng)在構(gòu)建Merkle-B+樹時需要添加CTR 數(shù)等信息,而添加的這些信息所帶來的開銷與分塊個數(shù)有關(guān)而與文件大小無關(guān)的.所以,在大文件的情況下這些開銷相對文件讀寫而言很小.在這樣的分塊多但是文件小的場景下,這部分開銷相對來說占比較大.表現(xiàn)為圖中的讀寫所花費(fèi)時間高于沒有架設(shè)任何系統(tǒng)的NFS 系統(tǒng).另外,可以看到在修改操作下,本系統(tǒng)相對沒有架設(shè)任何系統(tǒng)的NFS 客戶端所花費(fèi)的開銷多較多.這主要是因為在修改后需要重新計算hash 值,而重新計算hash 值的開銷也是與塊數(shù)量有關(guān)的,在這樣多分塊但是文件較小的場景下,這部分開銷占比較大.再加上本身修改操作包含寫操作,所以額外花費(fèi)的開銷相對單純寫操作來說更大.
針對這種情況,可以采用添加緩存機(jī)制來進(jìn)行優(yōu)化.當(dāng)一個文件不是第一次被讀取時,可以直接從緩存中讀取該文件的內(nèi)容,而不需要再從磁盤上讀取,也不需要再進(jìn)行密文的解密.這樣可以降低開銷,提高讀寫效率.
另外,可以看出在小文件下按照800 塊進(jìn)行劃分和按照160 塊進(jìn)行劃分最終消耗的時間差別不大.這是因為小文件情況下本身構(gòu)建Merkle-B+樹和加解密的開銷的占比就較大,雖然劃分更細(xì)會給修改操作帶來了性能上的提升,會讓上傳和下載操作的性能降低,但是相對于本身占比就較大的Merkle-B+樹的構(gòu)建開銷和加解密開銷,這樣的性能變化對于整體來說并不明顯.
本系統(tǒng)和其他經(jīng)典安全存儲系統(tǒng)的比較如表2所示.同時本文還通過比較安全存儲系統(tǒng)架設(shè)在NFS 文件系統(tǒng)前后,讀寫性能下降的程度作為量化比較安全存儲系統(tǒng)加密開銷的依據(jù).
表2 安全存儲系統(tǒng)相關(guān)工作對比
SiRiUS 系統(tǒng)對文件加密使用的密鑰是非對稱密鑰,這樣就導(dǎo)致該系統(tǒng)的加解密速度較慢,而且該系統(tǒng)的加密粒度是文件級的,這樣對文件的一點局部修改就需要對整個文件全部進(jìn)行重加密,開銷較大.所以最終該系統(tǒng)整體讀寫性能表現(xiàn)得較差.由提出SiRIUS 的文獻(xiàn)[13]的實驗結(jié)果可知,SiRiUS 部署在NFS 文件系統(tǒng)上之后與未部署前相比性能下降約80%.
Plutus 系統(tǒng)采用共享密鑰的方式來進(jìn)行密鑰分發(fā).當(dāng)其他用戶想要獲得文件的訪問權(quán)限時,需要向文件擁有者申請,此時要求文件擁有者必須在線,并在線的將文件密鑰分享給其他用戶.這樣的分享機(jī)制比較低效,它要求用戶必須實時在線才能完成密鑰分發(fā).這就導(dǎo)致用戶的使用門檻和管理成本增加,不具有易用性.
Corslet 系統(tǒng)使用對稱密鑰來加解密文件.文件按照文件塊粒度進(jìn)行分割來實現(xiàn)部分重加密機(jī)制.這都使得Corslet 的讀寫速度較快.但是Corslet 也存在需要可信第三方的問題,這使得Corslet 的運(yùn)營和管理成本較高.另外,Corslet 以文件塊的hash 值作為密鑰,雖然這樣的做法可以將完整性檢查和密鑰統(tǒng)一起來,但是這就意味著一個文件會有文件塊數(shù)量個數(shù)的密鑰,密鑰數(shù)量的增大必然導(dǎo)致管理成本的增加,而且也意味著更大的空間開銷.從提出Corslet 系統(tǒng)的論文的實驗結(jié)果可知,將Corslet 部署在NFS 文件系統(tǒng)上之后大約讀寫性能下降5%.
Plutus 的創(chuàng)新在于系統(tǒng)實現(xiàn)了一些前人未曾實現(xiàn)的功能,但在性能上的表現(xiàn)不夠出色.從性能比較上看,本系統(tǒng)在性能上有明顯優(yōu)勢.因為Plutus 對文件都是全文加密的,所以重加密和重哈希的開銷很大.而且Plutus 的文件分享要求文件擁有者必須長期在線.所以,從性能的角度和易用性角度來看,本系統(tǒng)有明顯優(yōu)勢.
從實驗結(jié)果來看,本系統(tǒng)在文件的上傳、下載、修改上表現(xiàn)出來的性能與Corslet 相當(dāng),同樣是與沒有架設(shè)系統(tǒng)時相比讀寫性能下降大約5%.而且不需要像Corslet 那樣依賴可信第三方的介入,具有不依賴可信第三方的簡單性和易用性.而與SiRiUS 系統(tǒng)相比,SiRiUS 系統(tǒng)部署在NFS 文件系統(tǒng)后,NFS 文件系統(tǒng)性能下降約80%,而本系統(tǒng)僅下降約5%,所以本系統(tǒng)在讀寫性能上有較大優(yōu)勢.故本系統(tǒng)是一種既實現(xiàn)高效的加解密又不需要依賴可信第三方的安全存儲系統(tǒng).與其他的安全存儲系統(tǒng)相比,在使用成本、簡單性、文件加解密的開銷上有較大優(yōu)勢.
相對于其他的安全存儲系統(tǒng)來說,本系統(tǒng)在不需要可信第三方的情況下,使文件發(fā)生修改后不需要對全文進(jìn)行重加密和重哈希,而只需要對修改的部分文件塊進(jìn)行重加密和重哈希,將重加密的開銷大大降低,而重哈希也只需要對修改塊進(jìn)行重哈希計算,并沿著Merkle-B+樹到根節(jié)點的路徑重新計算哈希,將重哈希的復(fù)雜度從O(n)降低到O(logn).而且以一個對稱密鑰作為文件加解密密鑰,一方面相對非對稱密鑰來說這樣做文件的加解密速度更快.另一方面這樣讓一個文件只有一個密鑰,也避免了密鑰數(shù)量的膨脹.再者,也不需要像Corslet 那樣修改文件內(nèi)容后需要再修改密鑰,使得在一次文件修改后需要隨之變化的內(nèi)容盡可能少.所以本系統(tǒng)能在表現(xiàn)出速度上的高效的同時,也不會帶來太多的空間開銷.而這些設(shè)計都讓本系統(tǒng)在大文件場景下取得較好的結(jié)果.特別在大文件頻繁修改場景下,表現(xiàn)出來的性能更好.
而本系統(tǒng)也進(jìn)行了一些工程上的優(yōu)化,包括鎖機(jī)制、懶加載、緩存機(jī)制等,以此來降低在小文件場景下的開銷.綜合來看,本系統(tǒng)是可以保證用戶信息安全,而且還能夠表現(xiàn)出高性能的高效系統(tǒng).
文中提出一種新的安全云存儲系統(tǒng)架構(gòu),確保用戶可以安全的將數(shù)據(jù)存儲在不信任的環(huán)境下,而且由于額外存儲的密鑰較少,所以不會帶來太大的空間開銷.而且本系統(tǒng)具有很好的擴(kuò)展性,可以直接架設(shè)在文件系統(tǒng)之上,使用簡單,對用戶透明,用戶可以很方便的使用該系統(tǒng).此外,本系統(tǒng)不依賴可信第三方,降低了系統(tǒng)的使用和管理門檻.另外,本系統(tǒng)還提供了豐富、高效的安全機(jī)制,包括私密性保護(hù)、完整性保護(hù)、文件訪問控制等.通過非對稱密鑰的分發(fā)實現(xiàn)了讀寫權(quán)限的分離,實現(xiàn)了更加精細(xì)的訪問控制.通過Merkle-B+樹的設(shè)計實現(xiàn)了修改文件時的輕量級重哈希和重加密,讓系統(tǒng)表現(xiàn)出較好的性能.實驗結(jié)果表明,架設(shè)了本系統(tǒng)的NFS 系統(tǒng)相對于沒有架設(shè)本系統(tǒng)的NFS 系統(tǒng)讀寫性能下降約5%.總的來說,本系統(tǒng)是可以保證用戶信息安全,而且還能夠表現(xiàn)出高性能的高效系統(tǒng).
未來將進(jìn)一步擴(kuò)充高效實現(xiàn)安全存儲系統(tǒng)如文件去重、密文搜索等其他功能的方法.