梁艷麗,凌 捷
廣東工業(yè)大學 計算機學院,廣州 510006
云計算已成為當今網(wǎng)絡(luò)服務(wù)的核心業(yè)務(wù),具有良好的發(fā)展前景,為了進行數(shù)據(jù)共享和外包服務(wù),許多用戶將個人數(shù)據(jù)存儲在云服務(wù)提供商中。然而,數(shù)據(jù)所有者面臨著數(shù)據(jù)泄露、隱私保護等安全問題。
文獻[1]首次提出一種一對多的基于屬性加密方案,數(shù)據(jù)提供者可以與用戶共享數(shù)據(jù),而不需要知道雙方確切的公鑰或身份,在云存儲環(huán)境中實現(xiàn)安全靈活的細粒度訪問控制。針對ABE 方案的效率、安全性等方面,相關(guān)研究人員提出了許多方案。文獻[2]將ABE 分為基于密鑰策略屬性加密(KP-ABE)和基于密文策略屬性加密(CP-ABE),在KP-ABE方案中,密文與一組屬性相關(guān)聯(lián),用戶的私鑰與訪問結(jié)構(gòu)關(guān)聯(lián),而在CP-ABE方案中,用戶的私鑰與屬性相互關(guān)聯(lián),密文則反映訪問結(jié)構(gòu)。為了解決單屬性權(quán)威的密鑰管理和安全性能等問題,文獻[3-4]提出了具有多屬性權(quán)威的ABE 方案,允許任意多項式數(shù)量的獨立的屬性權(quán)威來監(jiān)管屬性和密鑰分發(fā),該方案需要一個完全信任的證書頒發(fā)機構(gòu)(CA),來管理多個獨立的屬性權(quán)威機構(gòu)(AA)。CP-ABE因支持靈活的訪問控制,在云存儲系統(tǒng)中被廣泛應(yīng)用。后來,文獻[5]提出了一個使用CP-ABE的多權(quán)威去中心化方案,任何一方都可以成為屬性權(quán)威,除了創(chuàng)建一組初始公共參數(shù)外,不需要任何全局協(xié)調(diào)。通過創(chuàng)建公鑰并向擁有相應(yīng)屬性的不同用戶頒發(fā)私有密鑰,一方可以簡單地充當ABE權(quán)威。文獻[6]將分層訪問結(jié)構(gòu)集成到單個訪問結(jié)構(gòu)中,然后使用集成的訪問結(jié)構(gòu)對分層文件進行加密,與屬性相關(guān)的密文組件可以通過文件共享,在云存儲系統(tǒng)中實現(xiàn)靈活的訪問控制,但如果第三方不誠實,密鑰將會被泄漏,云存儲安全將面臨威脅。文獻[7-8]通過將傳統(tǒng)多權(quán)威方案與門限秘密共享有效地結(jié)合起來,滿足不同場景的需求。然而,當密文存儲在第三方服務(wù)器,在降低本地存儲與管理的同時,卻無法保證數(shù)據(jù)的完整性與不可篡改性。文獻[9-10]提出了隱藏訪問策略CP-ABE 方案,但是這些方案都是基于“和”門接入結(jié)構(gòu)。文獻[11]提出了一種隱藏訪問策略的ABE 方案,該方案采用基于樹的訪問結(jié)構(gòu),使得訪問策略更加豐富。此外,文獻[12]提出了一種基于LSSS 矩陣訪問結(jié)構(gòu)的部分策略隱藏方案,該方案基于雙線性群,將每個屬性分成屬性名和值兩部分,如果用戶的私鑰屬性不滿足與密文關(guān)聯(lián)的訪問結(jié)構(gòu),則訪問結(jié)構(gòu)的特定屬性值是隱藏的,但是有關(guān)訪問結(jié)構(gòu)的其他信息是公開的。
區(qū)塊鏈技術(shù)[13]通常具有去中心化、不可篡改、匿名性和可審計等特性。2014 年,文獻[14]提出第二代區(qū)塊鏈——以太坊,以太坊不僅提供分布式賬本系統(tǒng),并提供了智能合約的實現(xiàn)。1996年,智能合約的概念首次提出[15],但是由于當時相關(guān)技術(shù)還不成熟,智能合約只停留在概念階段,直到區(qū)塊鏈出現(xiàn)。智能合約可以看作是用編程語言編寫的自動執(zhí)行的腳本程序,它可以在滿足一定條件的情況下,自動執(zhí)行協(xié)議條款并生成相應(yīng)的證據(jù),不需要第三方的介入,并且智能合約完成的交易是不可逆且可追溯的。本文提出了一種基于區(qū)塊鏈的云存儲加密數(shù)據(jù)共享方案,通過區(qū)塊鏈的引入,實現(xiàn)了分布式存儲,并且通過智能合約的調(diào)用,數(shù)據(jù)的所有的訪問記錄都將存儲在區(qū)塊鏈中,方便審計與追蹤。本文使用現(xiàn)有相關(guān)信息進行離線預(yù)加密,以提高系統(tǒng)加密效率。由于在CP-ABE中,訪問策略是以明文方式附加在密文上,極有可能泄露用戶的個人隱私,使用經(jīng)過改進的布隆過濾器隱藏整個屬性與訪問策略間的映射。
設(shè)U為屬性域,訪問結(jié)構(gòu)A是集合U的非空屬性集,即A?2U{?}。訪問結(jié)構(gòu)A中的集合為授權(quán)屬性集,未包含在訪問結(jié)構(gòu)A中的集合為非授權(quán)屬性集。另外,當任意的B,C∈A,如果B∈A,且B∈C,則C∈A,那么A為單調(diào)訪問結(jié)構(gòu)[16]。本文只考慮單調(diào)訪問結(jié)構(gòu)。在ABE中,各方的角色被屬性所替代。因此,授權(quán)的屬性集將包含在訪問結(jié)構(gòu)A中。
在LSSS[16]中,令U為一個屬性域,p為一個素數(shù),對于U上的每個訪問結(jié)構(gòu)M是Zp上r行n列的矩陣。將矩陣M中的每一行映射到ρ(1,2,…,i),秘密值為s,s∈Zp,隨機選擇l1,l2,…,ln∈Zp,構(gòu)成向量v=(s,l2,l3,…,ln),v'=vT,則Mv′是r個秘密共享份額形成的向量,ωi=(Mv′)i為ρ(i)所持有的秘密份額。
線性重構(gòu):令S為授權(quán)屬性集,I={i:ρ(i)∈S}?{1,2,…,r) 存在有秘密值s滿足。
一個配對是雙線性映射e:G0×G0→G1,G0與G1是階為大素數(shù)p的兩個循環(huán)群。配對具有以下性質(zhì):
(1)雙線性:e(Pa,Qb)=e(P,Q)ab,?P,Q∈G,?a,;
(2)非退化性:存在e(g,g)≠1,g是G0的生成元;
(3)可計算性:存在一個算法在多項式時間內(nèi)計算出此映射。
布隆過濾器[17]包含一個m位的比特數(shù)組和k個獨立哈希函數(shù),即hi:{0,1}*→[1,m],1 ≤i≤k。初始時,數(shù)組內(nèi)所有位置為0,每添加一個元素,通過哈希計算{hi(x)}i∈[1,k],得出數(shù)組內(nèi)對應(yīng)的位置并設(shè)為1。為檢查元素x是否在集合S內(nèi),計算出相應(yīng)位置,如果比特數(shù)組中對應(yīng)位均為0,則元素x不存在于集合S中,如果對應(yīng)位均為1,因為有假陽性的存在,則元素x可能存在于集合S中。2013年,文獻[18]提出一種改進過的布隆過濾器,可以有效降低假陽性。在布隆過濾器的基礎(chǔ)上,提出了屬性布隆過濾器(ABF)[19],隱藏整個屬性與訪問策略間的映射:
(1)訪問策略(M,ρ)作為輸入,生成布隆屬性過濾器(ABF)。為在訪問矩陣M中找到對應(yīng)行號的屬性,ABF 引入了一個特定的字符串作為元素e={i||atte},如圖1 所示。字符串Lrownum代表行號,Latt代表屬性,連接成固定長度字符串λ,訪問矩陣的第i行與屬性相映射atte=ρ(i)。若將集合S中的元素e添加到ABF,首先生成n-1 個λ位串l1,l2,…,ln-1,再使用 LSSS 共享元素e得到ln。使用n個獨立的哈希函數(shù),對元素e的屬性atte分別進行哈希計算,得到ABF 的位置索引,最后通過位置索引hi(atte)將第i個元素的共享值li存儲在ABF 的相應(yīng)位置中。當相應(yīng)位置已被占據(jù)時,當前共享值將成為新屬性共享值的一部分,而先前數(shù)據(jù)無法恢復(fù)。
圖1 ABF字符串
(2)輸入屬性集S,ABF 以及公鑰PK,生成策略函數(shù)ρ。首先對屬性使用n個哈希函數(shù)進行哈希計算,得到相應(yīng)的索引值。通過索引獲取存儲的共享值ln,并對ln進行線性重構(gòu)獲得元素e={i||atte} ,最后輸出ρ={(rownum,att)}att∈S。
智能合約是具有自行驗證、自行執(zhí)行、防篡改特性的一段計算機程序,該代碼采用以太坊特定的二進制格式,并由一個帳戶部署到區(qū)塊鏈中。智能合約通常提供許多功能或提供可用于與其進行交互的應(yīng)用程序二進制接口(ABI),這些ABI可以通過發(fā)送一個帳戶的交易或另一個合同的消息來執(zhí)行。開發(fā)人員可以根據(jù)自己的需求指定智能合約中的任何指令,開發(fā)各種類型的應(yīng)用程序,包括與其他合約交互的應(yīng)用程序,或存儲數(shù)據(jù),并轉(zhuǎn)移以太。此外,智能合約是可追蹤且不可逆的。用于編寫智能合約的高級編程語言主要是Solidity、Serpent 和LLL。目前,大多數(shù)開發(fā)人員使用Solidity 編寫智能合約并將指令編譯為字節(jié)碼以供以太坊虛擬機(EVM)執(zhí)行。圖2為智能合約運行原理。
圖2 智能合約運行原理
本文方案整體模型如圖3所示,具體描述如下:初始化:
圖3 方案模型
(1)Setup(1λ)→(PK,MSK):輸入安全參數(shù)λ,生成公鑰PK,主密鑰MSK。
(2)數(shù)據(jù)所有者(DO)與數(shù)據(jù)使用者(DU)分別注冊外部賬戶(EOA)。
加密:
(1)DO為數(shù)據(jù)data選擇唯一的標識符ID,進行哈希計算生成索引index,將ID 上傳云服務(wù)器中,并執(zhí)行智能合約將index 存儲在以太坊中,返回智能合約地址SC_addr。
(2)隨機選取密鑰DK,通過國密算法SM4加密數(shù)據(jù)得到F。將SC_addr和加密結(jié)果F上傳至云服務(wù)器中。
(3)為提高加密效率,通過離線加密對相關(guān)數(shù)據(jù)預(yù)加密生成部分密文CTpre。
(4)DO 定義F的訪問策略 (M,ρ),加密生成密文Enc(PK,DK,(M,ρ),CTpre)→CT,將密文CT存儲在以太坊中,并通過智能合約為密文和用戶設(shè)置有效訪問時間。
(5)輸入訪問策略(M,ρ) ,生成布隆屬性過濾器ABF。將ABF,訪問結(jié)構(gòu)M上傳至以太坊。
(6)移除訪問策略中的屬性映射ρ,以避免訪問策略泄露。
密鑰生成:
(1)執(zhí)行密鑰生成算法,輸入公鑰PK,主密鑰MSK及屬性集S,輸出私鑰SK。
(2)DO通過安全通道將密鑰SK發(fā)送給DU。
解密:
(1)執(zhí)行ABF的查詢算法,輸入屬性集S,ABF以及公鑰PK,重現(xiàn)策略函數(shù)ρ。
(2)DU獲取云服務(wù)器中的ID與SC_addr。
(3)DU 經(jīng)過哈希計算得到 index,若時間在DO 設(shè)置的有效訪問時間內(nèi),則可以通過index 與密文CT之間的映射獲取CT。
(4)輸入密文CT,訪問策略 (M,ρ),密鑰SK輸出數(shù)據(jù)密鑰DK。
(5)通過SM4算法解密F。
初始化:
Setup(1λ)→(PK,MSK):輸入安全參數(shù)λ,初始化算法選擇兩個階為大素數(shù)p的循環(huán)群G0與G1,g是G0的生成元,e:G0×G0→G1是一個雙線性映射。任意選取h,k,q∈G0,α,β∈Zp,計算出公鑰PK={G0,p,gα,gβ,h,k,e(g,g)α},主密鑰MSK={α}。
加密:
數(shù)據(jù)所有者DO 在以太坊上部署智能合約,隨后獲取返回的合約地址SC_addr,將合約地址上傳至云服務(wù)器。為數(shù)據(jù)選取唯一的標識ID,使用SHA256 算法對ID哈希計算生成index,并將index通過智能合約存儲在以太坊中。
DO 隨機選取數(shù)據(jù)密鑰DK,通過SM4 算法加密DK,得到加密結(jié)果F并與index 形成映射。DO 將ID以及加密結(jié)果F上傳至云服務(wù)器中。為提高加密效率,利用現(xiàn)有信息進行離線預(yù)加密:
Pre-Enc(PK,ID)→ (CTpre) :令R為 LSSS 訪問結(jié)構(gòu)中訪問矩陣M的行號,輸入公鑰PK和數(shù)據(jù)的唯一標識符ID,并任意選取w∈Zp,計算出key=e(g,g)αw。任意選取atti,si∈Zp,atti為任意屬性,θi為w的共享值,可得Yi,1=qksi,Yi,2=(hattigβ)-si,Yi,3=gαsi,i∈[1,R]。則生成的部分密文為CTpre={key,gw,w,atti,si,Yi,1,Yi,2,Yi,3}。
Enc(PK,DK,(M,ρ),CTpre)→CT:DO 使用基于屬性加密算法加密數(shù)據(jù)密鑰DK,輸入公鑰PK,數(shù)據(jù)密鑰DK,基于LSSS的訪問結(jié)構(gòu)(M,ρ),以及預(yù)加密密文CTpre,輸出密文CT。在訪問結(jié)構(gòu) (M,ρ)中,M是r行n列的矩陣,計算出K=DK?key,Yi,4=si(ρ(i)-atti),則密文:
CT=((M,ρ),gw,Y,Yi,1,Yi,2,Yi,3,Yi,4)
將密文CT與index 形成映射并上傳至以太坊,然后利用智能合約設(shè)置密文的有效訪問時間。
本文是LSSS的CP-ABE方案,則屬性布隆過濾器由以下步驟建立:
(1)擁有者從訪問結(jié)構(gòu)(M,ρ)中獲取訪問策略的屬性集S,S={att1,att2,…,attr} 。定義 ABF 中的元素e=(r||atti),r是矩陣M中的行號,構(gòu)成長度為Lrownum的位串,atti是屬性,構(gòu)成長度為Latt的位串。
(2)Lrownum位串與Latt位串組成長度為λ的位串,如圖1所示。將元素s=(i||atts)添加到ABF中,令元素s為秘密共享值,任意獲取n-1 個長度為λ的位串l1,l2,…,ln-1,通過秘密共享方案得到ln=l1⊕l2⊕…⊕ln-1⊕s。
(3)將元素s的屬性atts通過n個獨立的哈希函數(shù)進行哈希計算,獲得ABF中每個共享值的索引位置:
h1(atts),h2(atts),…,hn(atts)
(4)將每個共享值存儲在相應(yīng)的哈希索引位置上。
(5)當某些位置已經(jīng)被先前屬性占據(jù)時,即元素s1的位置hi(atts1)與元素s2的位置hj(atts2)的位置相同,則令lj,s2=li,s1。DO 將ABF 與訪問矩陣M上傳到云服務(wù)器上。
密鑰生成:
KeyGen(PK,MSK,S)→SK:數(shù)據(jù)使用者 DU 擁有屬性集S={att1,att2,…,attm},任意選取t,t1,t2,…,tn∈Zp,令i∈[1,n],j∈[1,m],DO計算出不同屬性值的私鑰D=gβqt,H=gt,Xj,1=(hattjgβ)tik-t,Xj,2=gtj,則 密 鑰SK={S,D,H,Xj,1,Xj,2}。
DO通過安全通道將密鑰SK發(fā)送給DU。
解密:
數(shù)據(jù)使用者DU 獲得DO 在云服務(wù)器上存儲的ID、智能合約地址,以及加密數(shù)據(jù)等。DU首先通過對ID進行哈希計算,執(zhí)行智能合約CheckID算法檢查該文件在以太坊中是否存在,若不存在,則算法終止。當DU 通過算法1獲取到密文ID時,首先檢查是否在有效訪問時間內(nèi),若不在,則訪問終止,若在,用戶獲取DK的密文CT。在解密密文之前,DU 需檢查所擁有屬性是否滿足訪問策略,即需還原策略函數(shù)ρ:
ABF-Check(ABF,S)→ρ:輸入屬性集S,屬性布隆過濾器ABF,輸出策略函數(shù)ρ。
(1)使用n個哈希函數(shù)對屬性進行哈希計算:
h1(atts),h2(atts),…,hn(atts)
(2)通過位置索引獲取到對應(yīng)的字符串:
(3)計算出共享值s,并輸出相應(yīng)字符串:
s=l1⊕l2⊕…⊕ln
(4)s=(r||att),對比att與atts,若相同,則表示屬性存在于ABF 中,且att即為屬性在訪問矩陣M中的位置;若不同,則表示屬性不存在于ABF 中。Dec(CT,SK,M,ρ)→DK:輸入密文CT,密鑰SK,以及重建的訪問結(jié)構(gòu)(M,ρ),輸出數(shù)據(jù)密鑰DK。令S為授權(quán)屬性集,I={i:ρ(i)∈S}?{1,2,…,r}存在 ∑i∈IqiMi=w,則key=e(g,g)αw。則可計算出DK,獲取到DK后,由于云服務(wù)器內(nèi)存儲的加密數(shù)據(jù)通過對稱加密算法加密,則可計算出數(shù)據(jù)Data。DU獲取以太坊中密文的偽代碼如下:
算法1Get_CT()
輸入:hash(ID)
輸出:輸出false,則密文獲取失敗;否則輸出密文
1.ciphertext_index=hash(ID);
2.if(ciphertext_index==null) then
3.return false;
4.else
5.confirm_CT=CheckID_function(ciphertext_index)
6.i(fconfirm_CT==null)then
7.return false;
8.else
9.mapping(ciphertext_index=>CT.period_time)
10.if(current time is expire)then
11.return false;
12.else
13.mapping(ciphertext_index=>DO.period_time)
14.i(fcurrent time is expire)then
15.return false;
16.else
17.mapping(ciphertext_index=>CT);
在本文方案中,通過Ethereum 智能合約、基于屬性的訪問控制策略和國產(chǎn)密碼SM4算法實現(xiàn)細粒度的訪問控制。首先,數(shù)據(jù)所有者完全控制個人數(shù)據(jù),沒有第三方機構(gòu)從數(shù)據(jù)所有者那里收集信息,并通過SM4 算法加密相關(guān)數(shù)據(jù),進行存儲。其次,通過區(qū)塊鏈的引入,實現(xiàn)分布式存儲與訪問控制。使用區(qū)塊鏈的Ethereum平臺在不同的參與者之間進行通信,保存所有的數(shù)據(jù)記錄和事務(wù)信息,由于區(qū)塊鏈技術(shù)的特性,保證了數(shù)據(jù)的可追溯與不可篡改。
(1)匿名性
在本文方案中,使用屬性識別用戶,而不使用用戶的真實身份,這使得系統(tǒng)具有匿名性。當用戶需使用系統(tǒng)時,將為用戶分配一系列屬性,以及自己的私鑰,當用戶訪問數(shù)據(jù)時,系統(tǒng)將驗證用戶屬性集和私鑰,只有條件全部滿足時,用戶才能成功訪問。因此,不需要知曉用戶的真實身份,即能完成數(shù)據(jù)的訪問控制,保護了用戶的身份隱私。
(2)數(shù)據(jù)完整性
內(nèi)容密鑰DK與訪問策略存儲在區(qū)塊鏈中,而區(qū)塊鏈是通過密碼學的方式將區(qū)塊有序連接起來,每個區(qū)塊頭包含前一個區(qū)塊的哈希值。當數(shù)據(jù)寫入?yún)^(qū)塊鏈后,每個節(jié)點都將進行備份存儲,也就是說區(qū)塊鏈的所有節(jié)點都存儲一份副本。當有惡意用戶想要更改記錄時,需有全網(wǎng)51%的節(jié)點達成共識,因此可保護數(shù)據(jù)完整。
(3)訪問策略安全
在本文方案中,只有擁有屬性的數(shù)據(jù)使用者才能從屬性空間中獲取屬性字符串,不知道屬性字符串的攻擊者無法在多項式時間內(nèi)暴力破解。因此,在已移除訪問策略函數(shù)ρ的情況下,無法從現(xiàn)有信息中獲得訪問策略。因此,除非攻擊者具有屬性空間中的所有屬性,否則無法獲取訪問時所需屬性。
(4)合謀攻擊
基于屬性的加密面臨的主要挑戰(zhàn)之一是如何防止不同用戶組合私鑰以獲得授權(quán)密鑰。與其他基于屬性的加密方案一樣,本文將隨機數(shù)插入到每個用戶的私鑰中,以防止串通用戶的攻擊。
攻擊者為獲取明文,必須通過e(g,g)αw計算出key,然而明顯無法通過公鑰PK獲取到e(g,g)αw。若攻擊者執(zhí)行雙線性配對e(C,D) ,計算出e(g,g)rw,但是在e(g,g)rw?e(g,g)αw的 干 擾 下 ,攻 擊 者 仍 然 無 法 獲 得e(g,g)αw。只有當攻擊者擁有授權(quán)密鑰時,才能計算出e(g,g)αw。同時由于不同用戶的私鑰中嵌入了隨機數(shù),使得不同用戶即使串謀,組合密鑰,仍無法計算出所需值,使得合謀攻擊變得毫無意義。
本文實驗硬件環(huán)境為Intel?Core? i7-6700 CPU @3.40 GHz,8 GB RAM;操作系統(tǒng)為64 位 Windows 10;編譯器為IntelliJ IDEA 和Remix-IDE;編程語言為Java和Solidity;外部資源庫為JPBC和web3.js。
在加密過程中,通過JPBC實現(xiàn)雙線性對加密,并引入相關(guān)jar 包實現(xiàn)ABE 加密及SM4 加密。SM4 為分組密碼算法,采用非線性迭代實現(xiàn)對稱加密。Ganache 搭建以太坊私有鏈,前身為testRPC,可快速創(chuàng)建瀏覽賬戶,設(shè)置相關(guān)參數(shù)等,Metamask是一款輕量級的以太坊錢包,可用來測試私有鏈。Ganache快速創(chuàng)建賬戶,使用在線版 Remix IDE(https://remix.ethereum.org/)的開發(fā)環(huán)境進行智能合約的開發(fā)和測試,把智能合約部署到以太坊中,返回合約地址。web3.js 是以太坊提供的一個JavaScript庫,實現(xiàn)以太坊的JSON RPC API封裝,可與區(qū)塊鏈進行交互。通過web3.js可以部署與調(diào)用智能合約,查看交易和區(qū)塊、發(fā)送交易、查看網(wǎng)絡(luò)狀態(tài)等。智能合約通過Remix IDE 編譯后可生成ABI 接口,則Java 可通過JavaScript與web3.js與以太坊進行交互。
在本文方案中,數(shù)據(jù)所有者需要在加密數(shù)據(jù)時構(gòu)建屬性Bloom 過濾器。因此,方案會增加ABF 創(chuàng)建過程中的通信成本。p是配對計算,E0和E 分別是群G0和G1中的指數(shù)運算,M 是乘積運算,L是訪問矩陣的行數(shù),|S|是私鑰中滿足密文訪問策略的屬性個數(shù)。表1為本文與相關(guān)方案的效率比較,可以看出本文的加密開銷略高于文獻[21],然而本文支持離線加密,加密效率并不低于傳統(tǒng)方案。因此,本文方案在保證訪問效率的同時,安全性與靈活性都有明顯提高。
表1 效率比較
本文實驗中,每個屬性都有三個值,并且將密文中屬性集的大小從5更改為50,每次測試的增量為5。圖4為本文方案加解密成本,加密時,觀察到加密的時間成本隨著屬性數(shù)量的增加而增加,但是由于離線加密的實現(xiàn),加密效率有明顯提升。解密時,由于使用了改進過的布隆過濾器隱藏訪問策略,因此,解密時間相較于加密時間有明顯增長,但解密時間仍在正常范圍內(nèi)。
圖4 方案加解密效率
本文提出了一種基于區(qū)塊鏈的云存儲加密數(shù)據(jù)共享方案,數(shù)據(jù)所有者通過智能合約將經(jīng)過加密的密鑰存儲在區(qū)塊鏈中,并為數(shù)據(jù)添加訪問時間,在進行ABE加密時,對數(shù)據(jù)預(yù)先進行部分加密,并通過使用改進過的布隆過濾器隱藏訪問策略。本文的加密開銷低于文獻[20]和文獻[22],并且可以通過離線預(yù)加密,有效提高加密效率。本文方案實現(xiàn)分布式訪問控制,并保證訪問策略安全,數(shù)據(jù)不可篡改,具有可追蹤、抗合謀攻擊等優(yōu)點。