龔玉霞,呂家恪
(1.重慶商務(wù)職業(yè)學(xué)院 出版?zhèn)髅较?,重慶 400331;2.西南大學(xué) 計算機(jī)信息與科學(xué)學(xué)院,重慶 400715)
隨著大數(shù)據(jù)與云計算的發(fā)展,存儲服務(wù)為云提供商開展業(yè)務(wù)提供了一種新方式,將數(shù)據(jù)外包和運(yùn)營服務(wù)外包給云的行為顯著增長[1-2]。傳統(tǒng)云存儲幾乎完全依賴于作為可信第三方傳輸和存儲數(shù)據(jù)的大型存儲提供商。該系統(tǒng)存在許多缺點(diǎn),包括泄漏隱私、可用性不高、安全性不好和高運(yùn)營成本[3-5]。
分布式云存儲的引入,較基于數(shù)據(jù)中心的存儲來說具有許多優(yōu)勢[6-7],分布式云存儲網(wǎng)絡(luò)利用客戶端加密來維護(hù)數(shù)據(jù)安全性[8-9]。但是,分布式系統(tǒng)對于加密數(shù)據(jù)的管理存在一些問題,其中最重要的是數(shù)據(jù)可用性,即數(shù)據(jù)所有者應(yīng)該能夠授權(quán)其他人搜索遠(yuǎn)程加密的數(shù)據(jù)集并獲得部分有用的內(nèi)容。一個簡單的方案是數(shù)據(jù)所有者檢索整個數(shù)據(jù)集,過濾并向授權(quán)客戶端發(fā)送有用的數(shù)據(jù)部分[10],這就導(dǎo)致了較高的成本。
目前,對于云存儲系統(tǒng)的研究得到越來越多的關(guān)注。文獻(xiàn)[11]提出了一個云存儲系統(tǒng),一方面允許最終用戶以透明的方式同時依賴不同的云存儲提供商;另一方面可以實(shí)施長期可用性、模糊處理和加密,只有最終用戶可以完全控制其數(shù)據(jù)的整體安全性,并且不會向云存儲提供商披露敏感信息。文獻(xiàn)[12]針對云存儲系統(tǒng)高性能、高可靠、低成本這三大需求,提出了云存儲系統(tǒng)3項需求對應(yīng)的優(yōu)化技術(shù),分別為小文件讀寫訪問性能優(yōu)化技術(shù)、日志寫入與回放優(yōu)化技術(shù)和固態(tài)硬盤垃圾回收優(yōu)化技術(shù)。文獻(xiàn)[13]提出一種針對云存儲加密數(shù)據(jù)的隱私保護(hù)全文檢索算法,設(shè)計了基于Bloom過濾器的樹索引,通過提出索引詞的成員熵來微調(diào)查詢和加密文檔之間的相似性。不過對于全文檢索算法,客戶端成本高昂。
為了解決以上問題,本文提出了一個基于區(qū)塊鏈的數(shù)據(jù)存儲系統(tǒng)來加以解決:對分布式數(shù)據(jù)存儲進(jìn)行授權(quán)關(guān)鍵字搜索,所提出的系統(tǒng)使用區(qū)塊鏈作為離線數(shù)據(jù)存儲訪問,許可授權(quán)和搜索令牌生成的主干,保證了數(shù)據(jù)的安全,降低了客戶端成本,減少了搜索時間。
本文提出的基于區(qū)塊鏈的云存儲系統(tǒng)涉及三方:數(shù)據(jù)所有者、數(shù)據(jù)使用者(數(shù)據(jù)消費(fèi)者)和區(qū)塊鏈節(jié)點(diǎn),如圖1所示。
圖1 本文區(qū)塊鏈云存儲系統(tǒng)構(gòu)架
1)數(shù)據(jù)所有者(data owner)。數(shù)據(jù)所有者構(gòu)成文檔的數(shù)據(jù)集,每個文檔都包含一組固定的關(guān)鍵字,數(shù)據(jù)所有者希望外包數(shù)據(jù)集以節(jié)省數(shù)據(jù)存儲和維護(hù)的成本,同時能授權(quán)其他客戶搜索其外包數(shù)據(jù)集。
2)數(shù)據(jù)消費(fèi)者(data consumer)。數(shù)據(jù)使用者是數(shù)據(jù)所有者提供的數(shù)據(jù)集的訂閱者,如果數(shù)據(jù)使用者訂閱了數(shù)據(jù)集,則會授予他權(quán)限。然后,能與區(qū)塊鏈節(jié)點(diǎn)交互以證明其憑證并對外包數(shù)據(jù)執(zhí)行關(guān)鍵字搜索。
3)區(qū)塊鏈節(jié)點(diǎn)(blockchain nodes),是維護(hù)區(qū)塊鏈的實(shí)體。在本文場景中,將單獨(dú)的云服務(wù)提供商視為區(qū)塊鏈節(jié)點(diǎn),并共同形成聯(lián)合云。
圖1中區(qū)塊鏈技術(shù)來自比特幣底層技術(shù),自引入以來已經(jīng)成功應(yīng)用于各種重要應(yīng)用領(lǐng)域。區(qū)塊鏈本身由塊組成,塊通過哈希指針順序連接在一起,由于數(shù)字哈希函數(shù)的加密功能,這些塊被證明是不可變的。區(qū)塊鏈本身不依賴于中央受信任的權(quán)威機(jī)構(gòu),而是將其分發(fā)給參與網(wǎng)絡(luò)的所有節(jié)點(diǎn)。
本文系統(tǒng)考慮了許可的區(qū)塊鏈系統(tǒng)的場景,有權(quán)訪問區(qū)塊鏈的實(shí)體是具有競爭利益的不同云服務(wù)提供商,在性能、安全性和運(yùn)營成本方面,該模型相對于無權(quán)限模型提供了各種優(yōu)勢。
圖1中DHT表示分布式哈希表(distributed hash-table,DHT),區(qū)塊鏈存儲對數(shù)據(jù)的引用,但不存儲數(shù)據(jù)本身。DHT已廣泛用于協(xié)調(diào)和維護(hù)有關(guān)對等系統(tǒng)的元數(shù)據(jù)。
為了說明本文系統(tǒng)工作流程,給出一個例子:數(shù)據(jù)所有者A將其多個文檔的數(shù)據(jù)集外包給聯(lián)合云,每個文檔都包含一些特定關(guān)鍵字。為了確保數(shù)據(jù)安全,A在上傳到云之前在客戶端應(yīng)用數(shù)據(jù)加密,上載的數(shù)據(jù)包括加密文檔和便于關(guān)鍵字搜索過程的加密關(guān)鍵字標(biāo)簽。加密數(shù)據(jù)集由云聯(lián)盟分布式存儲,而加密關(guān)鍵字標(biāo)簽由區(qū)塊鏈維護(hù)。加密的關(guān)鍵字標(biāo)簽用于索引并提供訪問匹配的加密文檔的手段。
在設(shè)置階段之后,A能授予數(shù)據(jù)消費(fèi)者B在加密數(shù)據(jù)集上進(jìn)行搜索的權(quán)限,B現(xiàn)在能夠向區(qū)塊鏈節(jié)點(diǎn)證明自身具有特定的搜索權(quán)限。由于通常有多個訂閱者,憑證證明應(yīng)該是匿名的,以保留B的身份隱私。更具體地說,區(qū)塊鏈只能驗證B是其中一個訂閱者,但無法從證明中提取B的身份。區(qū)塊鏈節(jié)點(diǎn)也應(yīng)該無法確定兩個特定證據(jù)是否由同一個人創(chuàng)建。B不應(yīng)該下載整個數(shù)據(jù)集,而應(yīng)該能夠搜索關(guān)鍵字以從聯(lián)合云中檢索必要的文檔。
許可的區(qū)塊鏈模型允許本文系統(tǒng)開發(fā)訪問控制層,客戶端能夠通過與區(qū)塊鏈節(jié)點(diǎn)之一的通信來訪問區(qū)塊鏈內(nèi)容,不同的客戶端角色具有不同級別的數(shù)據(jù)訪問。首先,只允許數(shù)據(jù)使用者訪問構(gòu)建憑證證明所需的內(nèi)容,經(jīng)過身份驗證后,數(shù)據(jù)使用者被授予訪問系統(tǒng)關(guān)鍵字搜索組件的權(quán)限,該組件是存儲在區(qū)塊鏈中的數(shù)據(jù)的另一部分。本文關(guān)鍵字搜索部分被建模為智能合約,智能合約是一種在區(qū)塊鏈上運(yùn)行的程序,并且由網(wǎng)絡(luò)中的整個節(jié)點(diǎn)強(qiáng)制其正確執(zhí)行。本文區(qū)塊鏈系統(tǒng)包含3個部分:
1)分布式數(shù)據(jù)存儲。該部分提供分散的云存儲平臺,數(shù)據(jù)由聯(lián)合云分布式存儲,兩者是不同的組織,可以進(jìn)一步分發(fā)數(shù)據(jù)內(nèi)容,應(yīng)用存儲證明(使用區(qū)塊鏈)以確保完整性。
2)匿名訪問控制。匿名訪問控制組件允許數(shù)據(jù)消費(fèi)者匿名地說服區(qū)塊鏈節(jié)點(diǎn)擁有由數(shù)據(jù)所有者發(fā)布的證書。這意味著區(qū)塊鏈節(jié)點(diǎn)只知道客戶端的訪問權(quán)限是由數(shù)據(jù)所有者批準(zhǔn)的,但他們不知道誰是數(shù)據(jù)使用者(有多個數(shù)據(jù)使用者實(shí)體),及其顯示憑證證明的次數(shù)。
3)私有關(guān)鍵字搜索。該部分為數(shù)據(jù)使用者提供了一種優(yōu)越的機(jī)制,以識別特定的加密數(shù)據(jù)。數(shù)據(jù)消費(fèi)者不是下載整個數(shù)據(jù)集,而是數(shù)據(jù)消費(fèi)者與塊鏈節(jié)點(diǎn)和塊鏈內(nèi)容的交互,以基于關(guān)鍵字(或?qū)傩?獲得特定數(shù)據(jù)內(nèi)容的指紋。最后,數(shù)據(jù)使用者從分布式離線數(shù)據(jù)存儲中檢索加密文檔。
本文區(qū)塊鏈系統(tǒng)允許數(shù)據(jù)所有者將大量數(shù)據(jù)外包給系統(tǒng),在發(fā)送到系統(tǒng)之前,應(yīng)在客戶端對文件進(jìn)行加密。系統(tǒng)對數(shù)據(jù)內(nèi)容進(jìn)行分片,并在對等節(jié)點(diǎn)之間分配分片,以減少內(nèi)容傳遞對任何給定節(jié)點(diǎn)的影響。數(shù)據(jù)在節(jié)點(diǎn)之間進(jìn)行了充分分片并進(jìn)行了復(fù)制,以確保高可用性。為了保持對加密文件的訪問,本文系統(tǒng)利用可通過區(qū)塊鏈訪問的分布式哈希表(distributed hash-table,DHT)對數(shù)據(jù)進(jìn)行引用,但不存儲數(shù)據(jù)本身。DHT已廣泛用于協(xié)調(diào)和維護(hù)有關(guān)對等系統(tǒng)的元數(shù)據(jù)。
該系統(tǒng)利用分布式可檢索性證明來維護(hù)存儲的完整性,本文認(rèn)為特定的文件F由n個數(shù)據(jù)段組成:F=F1,F2,…,Fn?;镜目蓹z索性證明采取質(zhì)詢-響應(yīng)協(xié)議的形式,其中節(jié)點(diǎn)P演示其對文件F的擁有以及它能夠被正確檢索的事實(shí)。為了審計P是否擁有F,P定期收到一個隨機(jī)挑戰(zhàn)c,它產(chǎn)生一個響應(yīng)r,該響應(yīng)r可以在不擁有F的情況下公開驗證??苫厥招苑桨傅囊粋€基本證明包括3個協(xié)議:
Setup(F)→{digest},P計算Merkle樹,其葉子是文件F的段(帶有它們的索引)并且其根是摘要,P輸出摘要值。
Prove(R)→{Fri,πi|ri∈R},R=r1,r2…rk∈[n],表示由節(jié)點(diǎn)P接收的一組隨機(jī)挑戰(zhàn),P輸出證據(jù),對于R中的每個挑戰(zhàn)索引ri,F(xiàn)包含F(xiàn)ri和在Merkle樹中的伴隨路徑πri。
Verify(digest,R,Fri,πri|ri∈R)→{0,1},驗證過程針對摘要驗證每個段Fri的Merkle路徑πri。
可檢索性證明提供了強(qiáng)有力的保證,即以極大的概率,如果P提供正確的響應(yīng),則可以從P完全檢索F。本文利用隨機(jī)預(yù)言機(jī)模型(由哈希函數(shù)建模)來生成具有修正間隔調(diào)度的隨機(jī)挑戰(zhàn),負(fù)責(zé)特定挑戰(zhàn)的區(qū)塊鏈節(jié)點(diǎn)需要將證明記錄到區(qū)塊鏈。每個其他節(jié)點(diǎn)都可以驗證證明的正確性,從而保持?jǐn)?shù)據(jù)存儲的完整性。
匿名訪問控制部分允許數(shù)據(jù)使用者從數(shù)據(jù)所有者獲得憑證,以便在稍后的某個時間點(diǎn),能為其憑證構(gòu)建非交互式證據(jù),僅當(dāng)附加的證明在有效時,區(qū)塊鏈節(jié)點(diǎn)才接受請求。
采用以下示例來理解匿名訪問控制部分過程:為了為數(shù)據(jù)消費(fèi)者B產(chǎn)生新的憑證,數(shù)據(jù)擁有者首先為B生成假名S并使用安全數(shù)字承諾方案提交S。得到的承諾C可以通過B已知的隨機(jī)數(shù)r打開。數(shù)據(jù)所有者將C固定到公告板上,公告板上有一組SC=(C1,C2,…,Cn)承諾,稍后B能通過在零知識中產(chǎn)生兩個陳述來證明擁有這樣的憑證:① 知道承諾C;② 知道承諾的公開r。
在本文系統(tǒng)中,許可的區(qū)塊鏈被用作公開公告牌,數(shù)據(jù)所有者和數(shù)據(jù)消費(fèi)者都能夠訪問存儲在區(qū)塊鏈上的數(shù)據(jù)的公共部分,公共部分包含所描述的承諾。匿名訪問控制組件的描述由4種算法組成:
1)Setup(1λ)→par。在輸入?yún)?shù)λ上,運(yùn)行算法AccumSetup(λ)以獲得(N,u),生成素數(shù)p,q使得p=2wq+1,w≥1,設(shè)G為Z*的子群,并選擇兩個隨機(jī)發(fā)生器g,h使得G=[g]=[h]。其中AccumSetup(λ)函數(shù)表示:生成素數(shù)p,q,計算N=pq,u為樣本,則其輸出為(N,u)。
3)ShowCred(par,S,c,skc,Sc)→πS。給定數(shù)據(jù)消費(fèi)者假名S,憑證c及其密鑰skc,分別計算A=Accumulate(par)和w=GenWitness(par,c,Sc),其中Accumulate(C)→A,C={c1,c2,…,cn},輸出A=uc1,c2,…,cnmodN,GenWitness(v,C)→w,對于素數(shù)v∈C,輸出w=Accumulate(C-v)。然后輸出以下知識的證明:
πs=ZKSoK{(c,w,r,S):
AccVerify((N,u),A,c,w)=1∧c=gShr}
4)VerifyCred(par,π,Sc)。給定證明πS和公開證書Sc,首先計算A=Accumulate(par,Sc),然后驗證πS是上述c、Sc的知識證明。如果證明成功驗證,則輸出1,否則輸出0。
Setup算法由數(shù)據(jù)所有者執(zhí)行以生成系統(tǒng)參數(shù),當(dāng)數(shù)據(jù)消費(fèi)者希望獲得用于數(shù)據(jù)訪問的憑證時,將請求連同其假名S一起發(fā)送到數(shù)據(jù)所有者。此時,數(shù)據(jù)所有者在輸入S上運(yùn)行GenCred以生成數(shù)字承諾及其密鑰skc。
當(dāng)數(shù)據(jù)消費(fèi)者希望顯示其憑證時,首先掃描這個 區(qū)塊鏈(即公告板),以獲得由數(shù)據(jù)所有者發(fā)布的所有憑證組成的集合Sc。然后,運(yùn)行ShowCred來生成憑證證明,并將其廣播到區(qū)塊鏈節(jié)點(diǎn)進(jìn)行驗證。區(qū)塊鏈節(jié)點(diǎn)還收集塊鏈中的證書集,并使用VerifyCred算法驗證證明。如果最后一個步驟輸出1,則接受證書驗證。
該部分允許數(shù)據(jù)使用者識別其感興趣的特定加密數(shù)據(jù),而無需下載整個數(shù)據(jù)集。加密文檔的元數(shù)據(jù)存儲在區(qū)塊鏈中,只有授權(quán)客戶才能通過它進(jìn)行搜索,授權(quán)過程由本文2.2節(jié)中的匿名訪問控制層完成??紤]數(shù)據(jù)所有者外包一組加密文檔,這些文件是在鏈外存儲的,可以通過DHT訪問,使用哈希函數(shù)計算訪問密鑰。區(qū)塊鏈不存儲實(shí)際的數(shù)據(jù)內(nèi)容,但是它維護(hù)訪問密鑰數(shù)據(jù),以便數(shù)據(jù)使用者能夠使用區(qū)塊鏈鏈接到DHT。
將EKS表示為支持關(guān)鍵字搜索的加密方案,數(shù)據(jù)所有者向訪問密鑰附加每個關(guān)鍵字的EKS密文列表,并將其存儲在允許的區(qū)塊鏈中。帶有關(guān)鍵字W1,W2,…,Wn的文檔F存儲在 區(qū)塊鏈中的結(jié)構(gòu):H(F)||EKS(W1)||,…,||EKS(Wn)||。授權(quán)數(shù)據(jù)使用者能夠生成某個陷門TW,使得智能合約能夠在每個數(shù)據(jù)條目上測試與訪問密鑰相關(guān)聯(lián)的關(guān)鍵字之一是否等于單詞W。給定陷門和EKS在密文、區(qū)塊鏈節(jié)點(diǎn)只能測試W=W′。
1)KeyGen:生成密碼系統(tǒng)密鑰,k←Zp。
數(shù)據(jù)所有者為關(guān)鍵字加密EKS生成密鑰k,并導(dǎo)出數(shù)據(jù)消費(fèi)者的搜索關(guān)鍵字,每個數(shù)據(jù)消費(fèi)者構(gòu)成一個秘密s∈Zp,可以通過其假名與數(shù)據(jù)所有者的映射生成。使用k和s,數(shù)據(jù)所有者為數(shù)據(jù)使用者計算搜索關(guān)鍵字ks,以便可以將其用于陷門構(gòu)造。
將本文系統(tǒng)與現(xiàn)有云存儲系統(tǒng)性能進(jìn)行比較,兩種系統(tǒng)分別為:文獻(xiàn)[13]是一種云存儲加密數(shù)據(jù)的隱私保護(hù)全文檢索系統(tǒng);文獻(xiàn)[14]是混合策略的低成本云存儲方案。表1是本文系統(tǒng)與現(xiàn)有系統(tǒng)的性能比較結(jié)果。
可以看出,本文基于區(qū)塊鏈的私有關(guān)鍵詞搜索的云存儲系統(tǒng),在不依賴可信任第三方的情況下,提供安全、隱私、低成本和匿名的存儲和搜索服務(wù),性能優(yōu)于其他兩種云存儲系統(tǒng)。
表1 不同云存儲系統(tǒng)之間性能比較
為了證明本文系統(tǒng)的有效性,從搜索時間性能來驗證基于區(qū)塊鏈的存儲系統(tǒng),本次測試環(huán)境是具有Linux平臺,i7處理器,8G內(nèi)存的筆記本電腦,圖2給出了不同存儲系統(tǒng)在不同數(shù)據(jù)存儲量下的搜索時間。
圖2 不同存儲系統(tǒng)的搜索時間
從圖2中可以看出:隨著數(shù)據(jù)存儲量的增加,3種存儲系統(tǒng)中數(shù)據(jù)搜索時間都在增加,本文基于區(qū)塊鏈的數(shù)據(jù)存儲系統(tǒng)在不同存儲數(shù)據(jù)量的搜索時間比其他兩種系統(tǒng)都要短,這是因為基于區(qū)塊鏈的數(shù)據(jù)存儲系統(tǒng)使用區(qū)塊鏈作為離線數(shù)據(jù)存儲訪問,許可授權(quán)和搜索令牌生成的主干,在保證數(shù)據(jù)安全的同時,減少了搜索時間,說明本文存儲系統(tǒng)的有效性。
本文提出一個基于區(qū)塊鏈云存儲系統(tǒng)的設(shè)計,該系統(tǒng)利用區(qū)塊鏈技術(shù)通過可檢索性證明方案來強(qiáng)制執(zhí)行數(shù)據(jù)完整性。當(dāng)客戶端加密用于數(shù)據(jù)安全時,專用關(guān)鍵字搜索組件被設(shè)計用于在已加密數(shù)據(jù)集上進(jìn)行搜索。匿名憑證授予、證明憑證和私有關(guān)鍵字搜索的過程也借助于區(qū)塊鏈進(jìn)行。該系統(tǒng)在不依賴可信任第三方的情況下,可以將數(shù)據(jù)存儲外包給流量分布的服務(wù)提供商網(wǎng)絡(luò),并給用戶提供安全、隱私、低成本和匿名的服務(wù)。未來的工作是解決憑證撤銷等更復(fù)雜的要求。