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