李 健,戚 湧
(南京理工大學(xué) 計(jì)算機(jī)科學(xué)與工程學(xué)院,江蘇 南京 210094)
區(qū)塊鏈技術(shù)[1,2]所具有的去中心化、開放性、自治性、鏈上數(shù)據(jù)不可篡改等特點(diǎn)使其在數(shù)據(jù)共享[3-5]方面具備得天獨(dú)厚的優(yōu)勢。但是區(qū)塊鏈技術(shù)本身的P2P、節(jié)點(diǎn)間數(shù)據(jù)訪問權(quán)限相同的特性,致使基于區(qū)塊鏈的數(shù)據(jù)共享存在粗粒度訪問控制問題。密文策略屬性加密(attribute based encryption,CP-ABE)技術(shù),通過將密文與屬性集合進(jìn)行綁定,實(shí)現(xiàn)由數(shù)據(jù)用戶主導(dǎo)的訪問控制,與區(qū)塊鏈去中心化的特點(diǎn)契合,能夠?qū)崿F(xiàn)區(qū)塊鏈數(shù)據(jù)共享機(jī)制中的細(xì)粒度訪問控制。在CP-ABE現(xiàn)有的諸多研究方向當(dāng)中,屬性撤銷CP-ABE方案對于數(shù)據(jù)安全尤為重要,當(dāng)系統(tǒng)中某些用戶因?yàn)樯矸輰傩园l(fā)生變化時(shí),需要在CP-ABE方案中及時(shí)地撤銷用戶屬性。Li等[6,7]利用KEK樹和屬性組管理授權(quán)用戶,將用戶密鑰與屬性組密鑰進(jìn)行綁定實(shí)現(xiàn)屬性撤銷。SHIRAISHI等[8]提出了一種面向共享數(shù)據(jù)細(xì)粒度訪問控制的屬性基加密方案,授權(quán)機(jī)構(gòu)可以撤銷唯一指定用戶的屬性。LIU等[9]提出的CP-ABE方案通過在密文中嵌入撤銷列表來實(shí)現(xiàn)屬性撤銷。Qin等[10]通過將密鑰更新材料發(fā)送給用戶來實(shí)現(xiàn)抵抗解密密鑰暴露攻擊的屬性撤銷CP-ABE。上述方案均需更新密文實(shí)現(xiàn)屬性撤銷,對于區(qū)塊鏈系統(tǒng)來說,更新密文需要重復(fù)上鏈,所以上述方案均不適用于區(qū)塊鏈系統(tǒng)。汪玉江等[11]提出了一種適用于區(qū)塊鏈系統(tǒng)的屬性可撤銷RCP-ABE方案,該方案采用兩次解密的思想,由區(qū)塊鏈維護(hù)撤銷列表,屬性撤銷后,無需更新密鑰密文重新上鏈,但是該方案僅適用于小規(guī)模屬性集,且系統(tǒng)建立前需要指定屬性集大小。陽真等[12]通過引入第三方來實(shí)現(xiàn)屬性的動態(tài)撤銷,并將區(qū)塊鏈和IPFS結(jié)合實(shí)現(xiàn)鏈上鏈下存儲,但是該方案通過智能合約實(shí)現(xiàn)的加解密效率有待提升。
Shashank等[13]基于素?cái)?shù)階群下的非對稱雙線性映射[14]和線性秘密共享技術(shù)[15]構(gòu)建了一種高效的CP-ABE方案,稱為FAME,方案包括以下步驟:
(1)系統(tǒng)初始化Setup(1λ)→(pk,msk), 輸入安全參數(shù)λ,輸出公鑰pk、主私鑰msk。
(2)生成屬性私鑰KeyGen(msk,S)→sk, 輸入主私鑰msk,屬性集合S,輸出屬性私鑰sk。
(3)加密:Encrypt(pk,(M,π),msg)→Ct, 輸入公鑰pk,訪問策略(M,π),明文msg,輸出密文Ct。
(4)解密:Decrypt(pk,Ct,sk)→msg, 輸入公鑰pk,密文Ct,屬性私鑰sk,輸出明文msg。
具體來說,F(xiàn)AME方案基于Ⅲ型映射群構(gòu)造使其效率提高,且設(shè)計(jì)的解密過程僅需要少量Paring操作進(jìn)行解密,即使是在大規(guī)模屬性集下,解密時(shí)間代價(jià)也保持在常量級上。但是,F(xiàn)AME方案僅支持屬性加密的基本功能,而不具備實(shí)時(shí)撤銷屬性的功能。
基于上述工作,本文開展如下工作:首先,基于區(qū)塊鏈技術(shù)的特性和應(yīng)用背景,在FAME方案基礎(chǔ)上進(jìn)行改進(jìn),提出一種支持屬性實(shí)時(shí)撤銷的CP-ABE算法,改進(jìn)如下:在屬性私鑰生成階段生成兩把屬性私鑰,同時(shí)引入預(yù)解密過程,與之相應(yīng)的加密、解密過程也需要進(jìn)行改進(jìn),改進(jìn)后的算法包括系統(tǒng)初始化、生成屬性私鑰、加密、預(yù)解密、解密5個(gè)組成部分,算法流程如圖1所示,其中虛線框內(nèi)是本文改進(jìn)的部分。
圖1 改進(jìn)的 CP-ABE 屬性加密流程
改進(jìn)后的算法適用于區(qū)塊鏈系統(tǒng),適用性主要表現(xiàn)在兩方面:①通過引入預(yù)解密過程,并由區(qū)塊鏈系統(tǒng)結(jié)合屬性撤銷列表判斷是否進(jìn)行預(yù)解密,以實(shí)現(xiàn)用戶的實(shí)時(shí)屬性撤銷,無需更新密鑰密文重復(fù)上鏈;②鑒于區(qū)塊鏈的效率問題,智能合約完成的預(yù)解密過程僅需要少量的Pairing操作、速度快,且在大規(guī)模屬性集下,時(shí)間代價(jià)不隨屬性個(gè)數(shù)的增加而增加。然后,基于非對稱群下的DBDH困難問題假設(shè)對方案進(jìn)行安全性證明。最后,結(jié)合超級賬本Fabric進(jìn)行系統(tǒng)設(shè)計(jì),采用鏈上鏈下存儲,原始數(shù)據(jù)對稱加密后存儲在IPFS中,對稱密鑰進(jìn)行屬性加密上鏈,解決區(qū)塊鏈容量不足以及系統(tǒng)效率問題,實(shí)現(xiàn)屬性可撤銷地、高效地、細(xì)粒度地區(qū)塊鏈數(shù)據(jù)訪問控制。
算法包括系統(tǒng)初始化、生成屬性私鑰、加密、預(yù)解密、解密5個(gè)組成部分,具體如下。
(1)系統(tǒng)初始化算法:Setup(1λ)→(pk,msk)。
(2)生成屬性私鑰算法:KeyGen(msk,S)→(sk1,sk2)。
S表示用戶需要申請密鑰的屬性集合。隨機(jī)選擇r1,r2∈ZP, 計(jì)算sk0=(hb1r1,hb2r2,hr1+r2)。 利用msk中的h,b1,b2對所有的屬性y∈S和t=1,2,隨機(jī)選擇σy,uy∈ZP, 分別計(jì)算:(sky,t)1=V(y1t)b1r1/at·V(y2t)b2r2/at·V(y3t)(r1+r2)/at·gσy/at,(sky,t)2=V(y1t)b1r1/at·V(y2t)b2r2/at·V(y3t)(r1+r2)/at·guy/at。 其中V() 表示將屬性映射到群G中元素的映射函數(shù),其輸入有兩種字符串組成格式:yLt和0jLt,其中y表示屬性,L=1,2,3,t=1,2,j表示正整數(shù),后者以0開頭,以區(qū)分前者;輸出群G中元素。
設(shè)置私鑰組件:(sky)1=((sky,1)1,(sky,2)1,g-uy),(sky)2=((sky,1)2,sky,2)2,g-σy)。
隨機(jī)選擇σ′∈ZP, 計(jì)算:sk′t=gdt·V(011t)b1r1/at·V(012t)b2r2/at·V(013t)(r1+r2)/at·gσ′/at。
設(shè)置私鑰組件:sk′=(sk′1,sk′2,gd3·g-σ′)。
輸出兩把屬性私鑰:sk1=(sk0,(sky)1,sk′),sk2=(sk0,(sky)2,sk′)。
(3)加密算法:Encrypt(pk,(M,π),msg)→Ct。
(M,π) 表示訪問結(jié)構(gòu),其中M為n1×n2的矩陣,π為矩陣行到屬性的映射,msg表示明文。
設(shè)置密文組件:Cti=(Cti,1,Cti,2,Cti,3)。
輸出密文Ct=(Ct0,Ct1,…,Ctn1,Ct′)。
(4)預(yù)解密算法:FirstDecrypt(Ct,sk1)→firstm。
輸出預(yù)解密中間明文firstm。
(5)解密算法:SecDecrypt(Ct,sk2)→secm。
計(jì)算解密中間明文:secm=e(sk′1·∏i∈I(skπ(i),1)2wi,Ct0,1)·e(sk′2·∏i∈I(skπ(i),2)2wi,Ct0,2)·e(sk′3·∏i∈I(skπ(i),3)2wi,Ct0,3)。
計(jì)算中間參數(shù):num=e(∏i∈ICti,1wi,sk0,1)·e(∏i∈ICti,2wi,sk0,2)·e(∏i∈ICti,3wi,sk0,3)。
本文方案的安全性定義為選擇明文攻擊下的不可區(qū)分性(IND-CPA),由挑戰(zhàn)者Chal和敵手Adver間的安全游戲進(jìn)行證明,具體描述如下:
(1)系統(tǒng)建立:挑戰(zhàn)者Chal運(yùn)行系統(tǒng)初始化算法Setup(1λ)→(pk,msk), 將pk發(fā)生給敵手Adver,自己保留msk。
(2)私鑰查詢:敵手Adver向挑戰(zhàn)者Chal發(fā)送一系列的屬性集合S1,S2…, 挑戰(zhàn)者Chal運(yùn)行私鑰生成算法KeyGen(msk,S)→(sk1,sk2), 并將生成的屬性密鑰sk1,sk2發(fā)送給敵手Adver。
(3)挑戰(zhàn):敵手Adver發(fā)送兩個(gè)長度相等的消息msg0,msg1和訪問結(jié)構(gòu) (M,π) 給挑戰(zhàn)者Chal,并且加以限制:私鑰查詢階段生成的密鑰都不能滿足訪問結(jié)構(gòu) (M,π)。 挑戰(zhàn)者Chal隨機(jī)選擇b∈{0,1}, 執(zhí)行加密算法Encrypt(pk,(M,π),msgb)→Ctb, 并將生成的密文Ctb發(fā)送給敵手Adver。
(4)私鑰查詢,重復(fù)步驟(2):敵手Adver再次向挑戰(zhàn)者Chal發(fā)送屬性集合查詢私鑰,但同樣限定屬性集合不能滿足訪問結(jié)構(gòu) (M,π)。
(5)猜測:敵手Adver輸出值b的猜測結(jié)果b′∈{0,1}。
本節(jié)基于非對稱情況下DBDH的困難問題假設(shè)進(jìn)行安全性證明,具體分析過程如下:
AdvDBDH=
定義2 如果在多項(xiàng)式時(shí)間內(nèi),算法不能以不可忽略的優(yōu)勢解決非對稱情況下DBDH問題,則認(rèn)為非對稱情況下DBDH假設(shè)成立。
證明:參考文獻(xiàn)[13]模擬相關(guān)隨機(jī)預(yù)言機(jī)。首先進(jìn)行相關(guān)參數(shù)定義:
當(dāng)v表示列向量 (v1,v2,…,vn)T時(shí),其相關(guān)參數(shù)定義見表1。
表1 列向量的相關(guān)參數(shù)定義
表2 矩陣的相關(guān)參數(shù)定義
Samp()算法定義見表3。
(1)初始化階段Setup。運(yùn)行初始化算法獲得 (p,G,H,GT,e,g,h)。
運(yùn)行算法Samp(p),獲得 (A,a⊥),(B,b⊥)。
d表示列向量 (d1,d2,d3)T,d1,d2,d3∈ZP, 設(shè)置pk=([A]2,[dTA]T),msk=(g,h,A,B,[d]1)。
為了模擬隨機(jī)預(yù)言機(jī):Chal維護(hù)兩個(gè)列表:P和Q。
P有形式為 (x,Wx) 和 (j,Uj) 的元組,其中x是任意的二進(jìn)制字符串,j是正整數(shù),Wx、Uj是ZP上的3×3矩陣。
Q有形式為(q,r)的元組,其中q可以是xLt或0jLt(L∈{1,2,3},t∈{1,2}), 也可以是其它任意元素,r是G中的元素。
敵手Adver可以進(jìn)行以下3種類型的預(yù)言機(jī)查詢:
3)q:Chal查詢是否有 (q,r)∈Q, 如果有則返回r,否則從G中隨機(jī)選擇一個(gè)元素r′,將 (q,r′) 添加到Q,返回r′。
(4)私鑰查詢階段KeyGen。重復(fù)過程(2)。
本文系統(tǒng)包括屬性授權(quán)、數(shù)據(jù)擁有者(DO)、數(shù)據(jù)使用者(DU)、區(qū)塊鏈、IPFS這5個(gè)組成部分,系統(tǒng)模型如圖2所示。
圖2 系統(tǒng)模型
(1)屬性授權(quán):負(fù)責(zé)系統(tǒng)的參數(shù)設(shè)置,生成系統(tǒng)的公鑰和主私鑰;同時(shí),當(dāng)用戶注冊進(jìn)入系統(tǒng)時(shí),根據(jù)用戶的屬性集合生成屬性私鑰。同時(shí),根據(jù)實(shí)際情況維護(hù)一張用戶訪問控制的屬性撤銷列表,當(dāng)發(fā)現(xiàn)系統(tǒng)中用戶屬性發(fā)生變化時(shí),負(fù)責(zé)實(shí)時(shí)撤銷用戶屬性。
(2)數(shù)據(jù)擁有者(DO):負(fù)責(zé)數(shù)據(jù)的加密工作,首先對明文進(jìn)行對稱加密,將對稱加密后的密文存放在IPFS中,對返回的索引以及對稱密鑰指定訪問策略,進(jìn)行屬性加密,將屬性加密密文發(fā)送給區(qū)塊鏈。
(3)數(shù)據(jù)使用者(DU):數(shù)據(jù)的訪問者,向區(qū)塊鏈發(fā)送訪問請求,如果屬性滿足訪問策略且未被撤銷,則由區(qū)塊鏈智能合約進(jìn)行預(yù)解密操作,并將預(yù)解密的結(jié)果發(fā)送給數(shù)據(jù)使用者,數(shù)據(jù)使用者進(jìn)行屬性解密操作,得到IPFS存儲索引以及對稱密鑰,再從IPFS中獲取對稱加密的密文,進(jìn)行對稱解密,獲取明文。
(4)區(qū)塊鏈:負(fù)責(zé)存儲屬性加密后的密文以及用戶的預(yù)解密屬性私鑰、存儲一張用戶屬性撤銷列表,通過智能合約提供屬性撤銷和屬性預(yù)解密相關(guān)功能。
(5)IPFS:負(fù)責(zé)原始數(shù)據(jù)對稱加密后的密文數(shù)據(jù)的分布式存儲工作,保證區(qū)塊鏈只存儲少量關(guān)鍵信息,減輕區(qū)塊鏈的存儲壓力。
本文方法主要完成數(shù)據(jù)擁有者與數(shù)據(jù)使用者之間的數(shù)據(jù)共享和細(xì)粒度訪問控制的工作,本節(jié)對此過程進(jìn)行流程設(shè)計(jì),具體如下:
3.2.1 數(shù)據(jù)擁有者加密數(shù)據(jù)流程
如圖3所示,數(shù)據(jù)擁有者加密數(shù)據(jù)流程主要分為身份注冊和數(shù)據(jù)加密兩個(gè)階段。
圖3 數(shù)據(jù)擁有者加密數(shù)據(jù)流程
首先是身份注冊階段,數(shù)據(jù)擁有者初次登錄系統(tǒng)時(shí),進(jìn)行身份的注冊登錄的操作:屬性授權(quán)根據(jù)數(shù)據(jù)擁有者的身份信息運(yùn)行屬性私鑰生成算法KeyGen(msk,S) 為數(shù)據(jù)擁有者生成兩把屬性私鑰sk1和sk2,分別稱為區(qū)塊鏈屬性私鑰和用戶屬性私鑰,屬性授權(quán)將區(qū)塊鏈屬性私鑰發(fā)送給區(qū)塊鏈,區(qū)塊鏈進(jìn)行存儲。將用戶屬性私鑰發(fā)送給數(shù)據(jù)擁有者。
接下來進(jìn)入數(shù)據(jù)加密階段,數(shù)據(jù)擁有者在用戶端對原始數(shù)據(jù)進(jìn)行對稱加密,接著將對稱密文發(fā)送給IPFS進(jìn)行分布式存儲,IPFS返回對應(yīng)索引信息。數(shù)據(jù)擁有者指定訪問策略調(diào)用屬性加密算法Encrypt(pk,(M,π),msg) 對返回的索引信息以及對稱密鑰進(jìn)行屬性加密,將生成的屬性加密密文發(fā)送給區(qū)塊鏈,區(qū)塊鏈進(jìn)行上鏈存儲。
3.2.2 數(shù)據(jù)使用者解密數(shù)據(jù)流程
如圖4所示,數(shù)據(jù)使用者解密數(shù)據(jù)流程主要分為身份注冊和數(shù)據(jù)解密兩個(gè)階段。
圖4 數(shù)據(jù)使用者解密數(shù)據(jù)流程
首先是身份注冊階段,與數(shù)據(jù)擁有者類似。
接下來進(jìn)入數(shù)據(jù)解密階段,數(shù)據(jù)使用者發(fā)送數(shù)據(jù)解密的請求給區(qū)塊鏈,區(qū)塊鏈?zhǔn)紫炔樵儗傩猿蜂N列表是否有該數(shù)據(jù)使用者的屬性元組,如果沒有則說明未被撤銷屬性,利用其區(qū)塊鏈屬性私鑰調(diào)用預(yù)解密算法FirstDecrypt(Ct,sk1), 返回預(yù)解密結(jié)果firstm;如果有則說明屬性被撤銷更改,此時(shí),判斷新屬性集合是否滿足訪問策略,如果滿足,則進(jìn)行預(yù)解密,否則拒絕預(yù)解密,返回一個(gè)非零隨機(jī)值。數(shù)據(jù)使用者在用戶端利用用戶屬性私鑰對區(qū)塊鏈返回的值進(jìn)行屬性解密SecDecrypt(Ct,sk2,firstm), 在其滿足訪問策略且未被撤銷屬性的情況下,得到對稱密鑰和IPFS索引信息,利用索引從IPFS中取得對稱密文,利用對稱密鑰進(jìn)行對稱解密獲得原始數(shù)據(jù)。
3.2.3 屬性授權(quán)撤銷屬性流程
如圖5所示,屬性授權(quán)撤銷屬性流程如下:當(dāng)系統(tǒng)中的數(shù)據(jù)使用者身份屬性發(fā)生變化時(shí),屬性授權(quán)向區(qū)塊鏈發(fā)送該數(shù)據(jù)使用者新的屬性集合,以維護(hù)屬性撤銷列表,實(shí)現(xiàn)數(shù)據(jù)使用者身份屬性實(shí)時(shí)更新。
圖5 屬性授權(quán)撤銷屬性流程
本節(jié)將所提屬性撤銷CP-ABE算法應(yīng)用于區(qū)塊鏈系統(tǒng),進(jìn)行了詳細(xì)的系統(tǒng)流程設(shè)計(jì),相比于基礎(chǔ)區(qū)塊鏈系統(tǒng)中用戶數(shù)據(jù)訪問權(quán)限相同的特點(diǎn),本文系統(tǒng)中,由數(shù)據(jù)擁有者根據(jù)實(shí)際需求制定訪問策略,以限定數(shù)據(jù)使用者。同時(shí),當(dāng)系統(tǒng)中數(shù)據(jù)使用者的身份發(fā)生變化時(shí),屬性授權(quán)只需調(diào)用屬性撤銷的智能合約來更新屬性撤銷列表,就可完成屬性級的屬性撤銷,實(shí)現(xiàn)了區(qū)塊鏈數(shù)據(jù)的細(xì)粒度訪問控制。
本節(jié)對系統(tǒng)進(jìn)行仿真與分析,仿真的實(shí)驗(yàn)環(huán)境如下:操作系統(tǒng)為64位的Ubuntu16.04,內(nèi)存8 GB;CPU為Intel Core i7 8700;用戶端代碼和智能合約使用Java開發(fā)語言編寫,屬性加密方案使用jpbc2.0.0庫,根據(jù)提供的TypeD曲線構(gòu)造雙線性映射,實(shí)驗(yàn)數(shù)據(jù)取運(yùn)行20次的所得的平均值;區(qū)塊鏈?zhǔn)褂肏yperledger-fabric1.4.3版本,采用solo類型的排序服務(wù);使用docker部署IPFS集群。
3.3.1 功能性分析
方案功能性對比分析見表4:文獻(xiàn)[6]支持屬性撤銷,但不支持大規(guī)模屬性集;文獻(xiàn)[11]支持通過引入預(yù)解密過程實(shí)現(xiàn)屬性撤銷,但不支持大規(guī)模屬性集;文獻(xiàn)[12]實(shí)現(xiàn)了屬性撤銷,但不支持預(yù)解密和大規(guī)模屬性集;文獻(xiàn)[13]支持大規(guī)模屬性集,但不支持預(yù)解密和屬性撤銷;文獻(xiàn)[16]引入了預(yù)解密過程,但不支持屬性撤銷和大規(guī)模屬性集;本文方案通過引入預(yù)解密的過程實(shí)現(xiàn)了無需更新密鑰密文的屬性撤銷,并且支持大規(guī)模屬性集。
表4 本文方案與其它方案功能性比較
3.3.2 性能分析
如圖6所示:與對比方案相比,在密鑰生成階段,本文方案與對比方案的時(shí)間代價(jià)隨屬性個(gè)數(shù)的增加而增加,但是本文方案增加相對緩慢。
圖6 密鑰生成算法對比
如圖7所示:與對比方案相比,在加密階段,本文方案具備顯著優(yōu)勢,并且隨著屬性個(gè)數(shù)的增加,時(shí)間代價(jià)呈現(xiàn)為緩慢增加趨勢。
圖7 加密算法對比
如圖8所示:在解密階段,本文方案因在預(yù)解密和解密各自只需要6次Pairing操作,所以預(yù)解密和解密時(shí)間代價(jià)各自保持在75 ms和150 ms常量級上,且綜合來看,本文方案總解密時(shí)間顯著優(yōu)于對比方案。
圖8 解密算法對比
如圖9所示:本文方案在大規(guī)模屬性集下解密效率高,且解密時(shí)間不隨屬性數(shù)量增加而增加。由用戶端完成的解密過程,只需要150 ms左右的常量級時(shí)間代價(jià),而對于在系統(tǒng)中由區(qū)塊鏈智能合約完成的預(yù)解密過程,只需要75 ms左右的常量級時(shí)間代價(jià)。
圖9 大規(guī)模屬性集合解密時(shí)間
綜上,本文設(shè)計(jì)的屬性撤銷CP-ABE方法通過引入預(yù)解密過程而使屬性撤銷無需更新密鑰密文重復(fù)上鏈;并且屬性加密各個(gè)階段的時(shí)間代價(jià)均低于對比方案,尤其是由智能合約完成的預(yù)解密過程在大規(guī)模屬性集下時(shí)間代價(jià)保持在75 ms的常量級上,應(yīng)用于區(qū)塊鏈上對系統(tǒng)的效率性能影響很小。
本文針對區(qū)塊鏈數(shù)據(jù)共享中存在的粗粒度訪問控制問題,首先提出了一種可撤銷屬性加密的區(qū)塊鏈數(shù)據(jù)訪問控制方法,通過引入預(yù)解密過程,構(gòu)建了一種屬性可撤銷的CP-ABE方法,僅需要少量的Pairing操作進(jìn)行解密,大規(guī)模屬性集下由智能合約完成的預(yù)解密過程僅需75 ms左右;可根據(jù)需求及時(shí)撤銷屬性,無需更新密鑰密文重復(fù)上鏈,適用于區(qū)塊鏈系統(tǒng)。最后進(jìn)行系統(tǒng)設(shè)計(jì),結(jié)合IPFS實(shí)現(xiàn)鏈上鏈下存儲,解決區(qū)塊鏈容量不足和系統(tǒng)效率問題,實(shí)現(xiàn)高效的、細(xì)粒度的區(qū)塊鏈數(shù)據(jù)訪問控制。