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