萬(wàn)文豪,王靜宇+,武彥君
(1.內(nèi)蒙古科技大學(xué) 信息工程學(xué)院,內(nèi)蒙古 包頭 014010;2.中國(guó)科學(xué)技術(shù)大學(xué) 科學(xué)島分院,安徽 合肥 230022)
近年來(lái),隨著大數(shù)據(jù)和智能化時(shí)代的不斷向前發(fā)展,每天有大量的相關(guān)數(shù)據(jù)產(chǎn)生,數(shù)據(jù)安全存儲(chǔ)與共享成為一個(gè)十分重要的問(wèn)題[1]。傳統(tǒng)第三方云存儲(chǔ)的方式共享數(shù)據(jù)存在數(shù)據(jù)中心化存儲(chǔ)等問(wèn)題,數(shù)據(jù)隱私容易泄露[2]。區(qū)塊鏈?zhǔn)且粋€(gè)分布式數(shù)據(jù)庫(kù),在所有參與方之間共享[3]。區(qū)塊鏈具有去中心化的特點(diǎn),基于區(qū)塊鏈技術(shù)的分布式數(shù)據(jù)存儲(chǔ)與共享方案可以解決中心化存儲(chǔ)模式的單點(diǎn)故障和數(shù)據(jù)易被第三方篡改等問(wèn)題,打破“數(shù)據(jù)孤島”[4]。為了保證數(shù)據(jù)的機(jī)密性,數(shù)據(jù)外包到第三方前需要進(jìn)行加密,但這樣會(huì)影響數(shù)據(jù)的可用性。為了解決數(shù)據(jù)共享和搜索問(wèn)題,可搜索加密技術(shù)及時(shí)產(chǎn)生。
針對(duì)屬性基可搜索加密搜索數(shù)據(jù)時(shí)存在的數(shù)據(jù)用戶屬性隱私泄露問(wèn)題。本文提出基于區(qū)塊鏈的匿名屬性驗(yàn)證可搜索加密數(shù)據(jù)共享方案,主要貢獻(xiàn)如下:
(1)引入非交互式Schnorr協(xié)議實(shí)現(xiàn)數(shù)據(jù)用戶屬性隱私保護(hù),可以有效保護(hù)用戶隱私。
(2)使用智能合約提供搜索服務(wù),相比于云服務(wù)器搜索,可以避免服務(wù)器作惡返回錯(cuò)誤搜索結(jié)果。
可搜索加密是指數(shù)據(jù)或文件在加密狀態(tài)下實(shí)現(xiàn)搜索功能,相比于傳統(tǒng)的明文搜索具有較好的隱私保護(hù)效果。Zhang等[5]、Wang等[6]和Li等[7]分別提出了一種對(duì)稱可搜索加密算法。但是現(xiàn)有云服務(wù)器大多是半可信的,為了解決云服務(wù)器存在不可信的問(wèn)題,Zhu等[8]提出了一種多用戶通用可驗(yàn)證可搜索加密模型,利用Merkle Patricia Tree(MPT)和Incremental Hash構(gòu)建具有數(shù)據(jù)更新支持的證明索引。
屬性基加密是一類具有細(xì)粒度訪問(wèn)控制權(quán)限的加密算法。只有屬性滿足的用戶才具有訪問(wèn)權(quán)限解密數(shù)據(jù)。傳統(tǒng)的CP-ABE算法密文綁定了一個(gè)顯式的訪問(wèn)結(jié)構(gòu),存在隱私泄露的風(fēng)險(xiǎn)。Niu等[9]在多用戶環(huán)境下提出一種屬性基可搜索加密方法,該方法支持策略隱藏并具有較好的功能和性能。Lyu等[10]、Miao等[11]提出的屬性基加密都沒(méi)能解決數(shù)據(jù)用戶屬性隱私的問(wèn)題。
區(qū)塊鏈作為一種分布式去中心化前沿技術(shù),基于區(qū)塊鏈輔助的可搜索加密方案可以達(dá)到較好的數(shù)據(jù)共享與隱私保護(hù)效果。Huang等[12]提出了一種支持屬性撤銷的多關(guān)鍵字可搜索加密方案,在屬性撤銷過(guò)程中不需要更新密鑰。Li等[13]使用比特幣區(qū)塊鏈技術(shù)實(shí)現(xiàn)了一種對(duì)用戶和服務(wù)器都公平的對(duì)稱可搜索加密方案。Liu等[14]提出了一種基于區(qū)塊鏈的具有高效撤銷和解密功能的屬性基可搜索加密(BC-SABE)。針對(duì)傳統(tǒng)的屬性基可搜索加密開(kāi)銷較大,無(wú)法在資源受限的移動(dòng)設(shè)備上應(yīng)用的問(wèn)題,Brij B等[15]提出使用區(qū)塊鏈技術(shù)降低屬性基可搜索加密的開(kāi)銷,使用區(qū)塊鏈中不同節(jié)點(diǎn)分擔(dān)不同的計(jì)算任務(wù)。
(2)非退化性:?m,n∈G1,使e(m,n)≠1;
(3)可計(jì)算性:?m,n∈G1,存在有效算法計(jì)算e(m,n)。
已知橢圓曲線E和點(diǎn)G,Q,隨機(jī)選擇一個(gè)整數(shù)d,可以得到Q=d*G,非交互式Schnorr協(xié)議流程如下:
(1)Prover隨機(jī)選擇a∈Zp作為私鑰SK,然后隨機(jī)選取橢圓曲線上的點(diǎn)G,計(jì)算公鑰PK=a*G隨機(jī)選擇整數(shù)r并計(jì)算R=r*G,c=Hash(R,PK),Z=r+c*sk,然后Prover生成證明 (R,Z)。
(2)驗(yàn)證者Verifier計(jì)算e=H(PK,R),然后Verifier驗(yàn)證Z*G=R+c*PK
本方案構(gòu)造的系統(tǒng)模型如圖1所示,定義了5個(gè)實(shí)體,分別是:數(shù)據(jù)擁有者、數(shù)據(jù)用戶、星際文件系統(tǒng)、區(qū)塊鏈和密鑰生成中心。
圖1 方案模型
(1)數(shù)據(jù)擁有者(data owner,DO):數(shù)據(jù)擁有者產(chǎn)生數(shù)據(jù)后需要將數(shù)據(jù)存儲(chǔ)到云端。數(shù)據(jù)擁有者負(fù)責(zé)定義屬性訪問(wèn)控制策略,并在發(fā)布到云端之前對(duì)在該策略下的數(shù)據(jù)加密。
(2)數(shù)據(jù)用戶(data user,DU):數(shù)據(jù)用戶是一個(gè)想要訪問(wèn)云端數(shù)據(jù)的第三方實(shí)體。數(shù)據(jù)用戶在查詢需要的數(shù)據(jù)之前要證明自己擁有相應(yīng)的屬性,只有擁有合法屬性的數(shù)據(jù)用戶才可以查詢存儲(chǔ)在云端的數(shù)據(jù)。
(3)星際文件系統(tǒng)(inter-planetary file system,IPFS):星際文件系統(tǒng)是一個(gè)分布式的數(shù)據(jù)存儲(chǔ)系統(tǒng),與云服務(wù)器類似。數(shù)據(jù)擁有者將加密后的數(shù)據(jù)存儲(chǔ)在分布式星際文件系統(tǒng)中,最后將會(huì)返回一個(gè)存儲(chǔ)地址到數(shù)據(jù)擁有者。
(4)區(qū)塊鏈(Blockchain):區(qū)塊鏈中存儲(chǔ)密文的Hash值和索引信息。同時(shí)區(qū)塊鏈中的智能合約可以完成授權(quán)、審計(jì)和驗(yàn)證等交易,并且可以高效、可信的完成交易。
(5)密鑰生成中心(key generation center,KGC):密鑰生成中心是一個(gè)可信的密鑰生成機(jī)構(gòu),主要負(fù)責(zé)初始化系統(tǒng),生成系統(tǒng)參數(shù)、公鑰和私鑰等。
本文中使用的符號(hào)見(jiàn)表1。本文方案大致可以分為4個(gè)階段,分別是系統(tǒng)初始化階段、數(shù)據(jù)加密階段、關(guān)鍵字搜索階段和數(shù)據(jù)解密階段。系統(tǒng)初始化階段主要為系統(tǒng)后續(xù)階段做準(zhǔn)備。在數(shù)據(jù)加密階段主要使用屬性基加密完成對(duì)數(shù)據(jù)的加密和上傳;關(guān)鍵字搜索階段使用非交互式零知識(shí)證明協(xié)議完成對(duì)用戶屬性的驗(yàn)證以及關(guān)鍵字令牌的匹配,匹配通過(guò)則進(jìn)行關(guān)鍵字搜索,否則中止算法。解密階段完成數(shù)據(jù)的解密操作。
表1 主要參數(shù)
系統(tǒng)初始化階段:系統(tǒng)初始化階段主要完成屬性基加密的相關(guān)參數(shù)生成和系統(tǒng)公鑰、主密鑰和數(shù)據(jù)用戶屬性私鑰生成。
數(shù)據(jù)加密階段:加密數(shù)據(jù)由DO上傳到IPFS后,IPFS返回加密數(shù)據(jù)的地址給DO,DO將提取出來(lái)的關(guān)鍵字集合和對(duì)稱加密算法AES的密鑰SKAES使用屬性可搜索加密算法加密后與IPFS返回的地址組成一個(gè)元組上傳到區(qū)塊鏈中。當(dāng)DU需要訪問(wèn)某個(gè)DO的數(shù)據(jù)時(shí),DU先確定所需關(guān)鍵字信息并生成搜索令牌,在區(qū)塊鏈上搜索相關(guān)數(shù)據(jù)。若DU滿足相關(guān)條件,智能合約將保存在區(qū)塊鏈上的數(shù)據(jù)存儲(chǔ)地址發(fā)送給DU,DU使用解密密鑰解密該地址,DU通過(guò)這個(gè)地址去訪問(wèn)IPFS并獲取數(shù)據(jù)。
關(guān)鍵字搜索階段:屬性驗(yàn)證采用非交互式Schnorr協(xié)議完成,DU使用非交互式Schnorr協(xié)議生成零知識(shí)證明,并將零知識(shí)證明發(fā)送給智能合約,智能合約收到DU發(fā)送的零知識(shí)證明后驗(yàn)證該零知識(shí)證明是否符合要求。使用Schnorr協(xié)議可以在不暴露DU屬性的情況下在區(qū)塊鏈上搜索加密的關(guān)鍵字。屬性驗(yàn)證通過(guò)后,DU生成搜索令牌向區(qū)塊鏈上的智能合約發(fā)起搜索請(qǐng)求,智能合約接收DU發(fā)來(lái)的搜索令牌,然后驗(yàn)證令牌是否匹配,驗(yàn)證通過(guò)后才執(zhí)行關(guān)鍵字匹配。搜索到相關(guān)信息后返回區(qū)塊鏈上存儲(chǔ)的相關(guān)信息。
數(shù)據(jù)解密階段:數(shù)據(jù)解密階段首先恢復(fù)出對(duì)稱加密密鑰,然后使用對(duì)稱加密密鑰解密數(shù)據(jù)密文得到數(shù)據(jù)明文。
本方案設(shè)計(jì)了6種算法,算法形式化定義如下:
(1)Setup(1λ)→(PK,MK):該算法由KGC執(zhí)行,輸入安全參數(shù)λ,輸出系統(tǒng)公鑰PK和主密鑰MK。
(2)Keygen(PK,MK,S)→SKu:該算法由KGC執(zhí)行,輸入系統(tǒng)公鑰PK,主密鑰MK和用戶屬性集輸出用戶私鑰SKu。
(3)Encrypt(PK,KW,SKAES,A):加密算法包含以下3個(gè)步驟:
1)DO輸入需要加密的數(shù)據(jù)D,以及對(duì)稱加密算法AES的密鑰SKAES,輸出數(shù)據(jù)密文CTdata。DO將密文CTdata上傳到IPFS,并記錄IPFS返回的存儲(chǔ)地址Daddr,將存儲(chǔ)地址Daddr使用相同的對(duì)稱加密算法AES加密后組成元組上傳到區(qū)塊鏈中。
2)DO執(zhí)行此步操作,輸入系統(tǒng)公鑰,訪問(wèn)結(jié)構(gòu)A,數(shù)據(jù)關(guān)鍵字集KW,將關(guān)鍵字加密然后上傳到區(qū)塊鏈中。
3)DO執(zhí)行此步操作,構(gòu)建訪問(wèn)樹(shù),并將秘密值存儲(chǔ)在樹(shù)的節(jié)點(diǎn)中,屬性值存儲(chǔ)在葉節(jié)點(diǎn)中。
(4)TokenGen(PK,SKu,S,w′)→Tw:該算法由DU執(zhí)行,輸入公鑰PK、用戶私鑰SKu、屬性集S和查詢關(guān)鍵字w′,輸出搜索令牌Tw。
1)AttBlind(G,Qd,S)→(δj,φj):屬性盲化,使用盲化后的屬性生成用戶屬性私鑰。
2)Verify(G,Qd,Pnizkp)→res:屬性驗(yàn)證由智能合約執(zhí)行,智能合約驗(yàn)證DU是否具備訪問(wèn)數(shù)據(jù)的。
(5)Search(PK,Tw′,S)→CTaddr:該算法由區(qū)塊鏈上的智能合約執(zhí)行,輸入公鑰PK、搜索令牌Tw和屬性集S,輸出密文存儲(chǔ)地址。
(6)Decrypt(PK,SKu,S)→SKAES:該算法由DU執(zhí)行,輸入系統(tǒng)主密鑰MK,用戶私鑰SKu和地址密文CTaddr,輸出數(shù)據(jù)屬主明文地址address。
3.3.1 系統(tǒng)初始化
系統(tǒng)初始化階段包括兩個(gè)算法,分別是setup()和keygen()。
(2)Keygen(PK,MK,S):用戶輸入屬性集S,KGC使用Schnorr協(xié)議將每個(gè)屬性盲化并生成用戶私鑰SKu。
DU使用Hash函數(shù)H1計(jì)算挑戰(zhàn)δj
δj=H1(G‖Qd‖P‖j)
(1)
DU計(jì)算φj對(duì)挑戰(zhàn)δj的響應(yīng)
φj=m+δj*kd(modp)
(2)
DU將上述信息打包成Pnizkp,其中包含4條信息,分別是P,Qd,φj和δj,然后將Pnizkp發(fā)送給智能合約。
(3)
3.3.2 數(shù)據(jù)加密階段
Encrypt(PK,KW,SKAES,A):在數(shù)據(jù)加密和上傳階段DO運(yùn)行該算法,首先加密數(shù)據(jù)并上傳到區(qū)塊鏈中,然后提取關(guān)鍵字集KW,將關(guān)鍵字加密后上傳到區(qū)塊鏈中。最后構(gòu)造訪問(wèn)樹(shù)將秘密值存儲(chǔ)于訪問(wèn)樹(shù)中。主要步驟如下:
(3)DO輸入公鑰PK,訪問(wèn)結(jié)構(gòu)A,關(guān)鍵字KW。對(duì)于訪問(wèn)樹(shù)T中的每一個(gè)節(jié)點(diǎn)(包括葉節(jié)點(diǎn)和非葉節(jié)點(diǎn)),DO選擇一個(gè)階為dx的多項(xiàng)式qx,其中dx=kx-1,kx表示該節(jié)點(diǎn)的閾值。對(duì)于訪問(wèn)樹(shù)T的根節(jié)點(diǎn)R,DO設(shè)置根節(jié)點(diǎn)的多項(xiàng)式qR(0)=v,然后,選擇多項(xiàng)式qx的dx個(gè)點(diǎn)完成對(duì)qx的定義。對(duì)于其它非根節(jié)點(diǎn)x,設(shè)置多項(xiàng)式qx(0)=qparent(x)(index(x)),其中index(x) 的值表示x的父節(jié)點(diǎn)parent(x) 在第index(x) 個(gè)左孩子節(jié)點(diǎn)。設(shè)Υ為訪問(wèn)樹(shù)T中的葉節(jié)點(diǎn)集合,然后,計(jì)算元組 (Dx,D′x),對(duì)于x∈Υ,有
(4)
其中,att(x) 表示與訪問(wèn)樹(shù)中葉子節(jié)點(diǎn)相關(guān)聯(lián)的屬性。最后,DO將元組 2={σi,σ′i,Dx,D′x} 上傳到區(qū)塊鏈中。
3.3.3 關(guān)鍵字搜索階段
(5)
(2)Search(PK,Tw′,S):智能合約接收DU的搜索令牌和屬性集后。智能合約首先檢查DU的屬性集是否滿足訪問(wèn)結(jié)構(gòu)A,檢查屬性是否匹配的過(guò)程由非交互式Schnorr協(xié)議驗(yàn)證,避免泄露用戶的屬性數(shù)據(jù)。如果屬性集滿足嵌入到索引關(guān)鍵字中的訪問(wèn)策略,數(shù)據(jù)用戶具有對(duì)關(guān)鍵字w的搜索權(quán)限,然后智能合約將通過(guò)搜索令牌匹配密文關(guān)鍵字。如果關(guān)鍵字匹配成功,則通過(guò)以下步驟返回相關(guān)的元組:
(1)Verify(G,Qd,Pnizkp):
智能合約使用Qd計(jì)算點(diǎn)P′=φjG-δjQd,并檢查P是否等于P′。如果P=P′,那么DU屬性驗(yàn)證通過(guò)進(jìn)入匹配過(guò)程,否則屬性驗(yàn)證失敗,算法中止。
(2)匹配過(guò)程:①若x是葉節(jié)點(diǎn),并且滿足x=j∈S。那么,計(jì)算Dx,如果葉節(jié)點(diǎn)x?S,則Fx=⊥
(6)
②若x是非葉節(jié)點(diǎn),F(xiàn)x定義如下,對(duì)于x的每個(gè)孩子節(jié)點(diǎn)τ,智能合約計(jì)算輸出Fτ,設(shè)λx為任意閾值的孩子節(jié)點(diǎn)集合,因此,F(xiàn)τ≠null;如果沒(méi)有此集合,那么,F(xiàn)τ=null,否則通過(guò)下式計(jì)算Fτ,其中
(7)
(8)
③用戶的屬性集滿足訪問(wèn)結(jié)構(gòu)A,進(jìn)行部分解密得到FR=e(g,g)rsv。然后,智能合約檢查索引I是否滿足令牌Tw′,如果公式成立,智能合約將返回相關(guān)的相關(guān)的密文集給DU,否則返回⊥。
正確性
e(σi,t2)=e(ga(μ+v)·gbμH1(w),gcs)
e(ρ,t1)·FR·e(t3,σ′i)=
e(gcμ,gas·gbsH1(w′))·e(g,g)rsv·e(gs(ac-r)/b,gbv)=
e(gcμ,gas)·e(gcμ,gbsH1(w′))·e(g,g)rsv·e(gss(ac-r)/b,gbv)=
e(g,g)aμcs·e(g,g)bμH1(w′)cs·e(g,g)avcs=
e(ga(μ+v)·gbμH1(w′),gcs)
得證
3.3.4 解密
Ci/φi=(SKAES·e(g,g)αv)/e(g,g)αv=SKAES
(9)
最后,DU使用對(duì)稱密鑰解密從IPFS獲得的數(shù)據(jù)密文。DU從DO處獲得存儲(chǔ)在IPFS上的加密數(shù)據(jù)地址,DO從該地址下載數(shù)據(jù),使用對(duì)稱加密算法密鑰解密該數(shù)據(jù)。
智能合約可以誠(chéng)實(shí)的執(zhí)行用戶提交的請(qǐng)求,并返回正確的搜索結(jié)果。以下是設(shè)計(jì)的兩個(gè)智能合約,分別是添加索引合約和搜索合約。
添加索引合約,由DO執(zhí)行。當(dāng)DO新上傳一些數(shù)據(jù)到IPFS時(shí),從這些數(shù)據(jù)中選擇一個(gè)關(guān)鍵字集,并建立相應(yīng)的加密關(guān)鍵字索引,存儲(chǔ)到智能合約。函數(shù)的第一個(gè)參數(shù)是事務(wù)id txid,第二個(gè)參數(shù)是加密的關(guān)鍵字索引key。
Contract 1:addIndex
Input:txid,key
Output:bool
(1)if msg.sender == DO
(3) index[I].push(tmp)
(4)else
(5) throw
(6) return true
搜索合約,這個(gè)合約由授權(quán)集合中的用戶和契約的創(chuàng)建者DO執(zhí)行。該合約傳遞加密的關(guān)鍵字索引key,并返回與key關(guān)聯(lián)的密鑰集。
Contract 2:Search
Input:T
Output:searchresult
(1)if msg.sender == DU
(2) len =index[T].length;
(3) if len=0
(4) searchresult=null;
(5) else if S∈A
(6) for(i=0;i (7) Search(result:index[T][i]) (8) If search.len!=0 (9) searchresult=Pkey (10) end (11) end (12) end (13) else (14) throw (15) end (16) return searchresult 4.1.1 隱私保護(hù) 本文從隱私數(shù)據(jù)信息的全生命周期,包括隱私產(chǎn)生/收集保護(hù),數(shù)據(jù)發(fā)布/存儲(chǔ)/流轉(zhuǎn)保護(hù),隱私提取/使用保護(hù)3個(gè)階進(jìn)行保護(hù)。隱私產(chǎn)生/收集階段,非交互式Schnorr協(xié)議未提交私鑰而完成身份認(rèn)證的過(guò)程是身份隱私保護(hù)的一種方式使得在數(shù)據(jù)擁有者、數(shù)據(jù)查詢者身份信息的隱藏且具備不可欺騙的特性。數(shù)據(jù)用戶提交搜索請(qǐng)求,使用非交互式Schnorr協(xié)議將數(shù)據(jù)用戶屬性集中的每一個(gè)屬性盲化得到φj,KGC使用盲化后的屬性為數(shù)據(jù)用戶生成密鑰π′j=gφj。數(shù)據(jù)發(fā)布/存儲(chǔ)/流轉(zhuǎn)保護(hù)階段,數(shù)據(jù)發(fā)布/存儲(chǔ)過(guò)程關(guān)鍵字密文和數(shù)據(jù)密文分布式存儲(chǔ),數(shù)據(jù)流轉(zhuǎn)過(guò)程采用對(duì)稱加密算法AES保證數(shù)據(jù)機(jī)密性,數(shù)據(jù)用戶屬性集對(duì)區(qū)塊鏈上的智能合約不可見(jiàn),數(shù)據(jù)用戶的具體屬性信息對(duì)區(qū)塊鏈上的智能合約不可見(jiàn),因此智能合約不具備通過(guò)密文存儲(chǔ)地址恢復(fù)密文數(shù)據(jù)能力,從而保障數(shù)據(jù)隱私性、機(jī)密性。隱私提取/使用階段,采用屬性基加密實(shí)現(xiàn)了用戶數(shù)據(jù)的細(xì)粒度訪問(wèn)控制,及智能合約方式保障數(shù)據(jù)隱私性。從數(shù)據(jù)隱私全生命周期解決了數(shù)據(jù)保護(hù)和數(shù)據(jù)共享這兩個(gè)相互之間存在沖突的問(wèn)題,同時(shí)保護(hù)了數(shù)據(jù)的所有權(quán)、數(shù)據(jù)安全和隱私、并解決了價(jià)值的合理分配。 4.1.2 選擇明文攻擊下的不可區(qū)分性 定理1 該方案在隨機(jī)預(yù)言機(jī)模型下對(duì)DBDH困難問(wèn)題具有不可區(qū)分性。 證明:假設(shè)敵手A以不可忽略的優(yōu)勢(shì)ε打破該方案的CPA安全,那么,我們構(gòu)造一個(gè)可以區(qū)分DBDH元組和隨機(jī)元組。給定雙線性映射參數(shù) (G,GT,e,p,g),挑戰(zhàn)者首先選擇 (a′,b′,c′)∈Zp,l∈{0,1}*,v∈GT,其中g(shù)是群G的生成元,然后,如果l=0,設(shè)V=e(g,g)a′b′c′;否則,V=v。最后,將元組 (g,ga′,gb′,gc′,V) 發(fā)送給模擬器B。輸入數(shù)據(jù)D和對(duì)稱加密密鑰SKEAES,數(shù)據(jù)擁有者生成密文。接下來(lái)在A,B之間進(jìn)行CPA安全游戲。 初始化:A首先挑戰(zhàn)訪問(wèn)結(jié)構(gòu)A*,然后將其發(fā)送給B。 挑戰(zhàn):A發(fā)送兩條消息m0,m1給B,B選擇一個(gè)隨機(jī)位l∈{0,1},并調(diào)用加密算法生成密文,并將密文發(fā)送給A。 詢問(wèn)階段2:這個(gè)階段同詢問(wèn)階段1。 猜測(cè):A返回猜測(cè)位l′∈{0,1},如果l′=l,B輸出0表明V=e(g,g)a′b′c′;否則,輸出1表明V是群GT中的一個(gè)隨機(jī)元素v。 最后,B在選擇明文安全游戲中的優(yōu)勢(shì)可以被下式定義 從上述分析可以得出,該方案在DBDH假設(shè)成立下是安全的。 本文方案的與其它文獻(xiàn)進(jìn)行功能對(duì)比,見(jiàn)表2。其中方案[11]采用與門(mén)的訪問(wèn)控制策略,支持可搜索加密,但是不支持?jǐn)?shù)據(jù)用戶隱私保護(hù)。方案[12]在區(qū)塊鏈架構(gòu)下實(shí)現(xiàn)了可搜索加密,對(duì)用戶數(shù)據(jù)隱私具有一定的隱私保護(hù),但不能保護(hù)數(shù)據(jù)用戶的隱私。除了方案[16]和方案[17]沒(méi)有使用區(qū)塊鏈,數(shù)據(jù)存儲(chǔ)在中心化云服務(wù)器中,存在較大的安全風(fēng)險(xiǎn),其它方案均使用區(qū)塊鏈實(shí)現(xiàn)去中心化。在訪問(wèn)控制策略方面,主要包括訪問(wèn)樹(shù)和與門(mén)兩種方案。本方案基于訪問(wèn)樹(shù)的訪問(wèn)結(jié)構(gòu),實(shí)現(xiàn)了細(xì)粒度的訪問(wèn)控制,并且使用非交互式Schnorr協(xié)議實(shí)現(xiàn)了數(shù)據(jù)用戶屬性隱私保護(hù)。鏈上結(jié)合鏈下的方式實(shí)現(xiàn)了關(guān)鍵字密文和數(shù)據(jù)密文的分布式存儲(chǔ),達(dá)到了安全高效的搜索效果。 表2 不同方案系統(tǒng)功能對(duì)比 4.3.1 理論分析 在算法開(kāi)銷方面,為了方便統(tǒng)計(jì),本文只統(tǒng)計(jì)了配對(duì)運(yùn)算,G1群上的取冪操作和Hash到G1群的操作。在表3中Tp表示配對(duì)運(yùn)算的時(shí)間,Te表示指數(shù)運(yùn)算的時(shí)間,Th表示Hash運(yùn)算時(shí)間。 表3 不同方案各算法效率對(duì)比 在表3中,分別用|S|、|X|表示用戶的屬性集、1個(gè)訪問(wèn)樹(shù)的葉子節(jié)點(diǎn)集合和滿足訪問(wèn)樹(shù)的最小屬性集,比較結(jié)果見(jiàn)表3,從表3可以看出本文提出的方案,在密鑰生成階段和令牌生成階段的開(kāi)銷較大,在關(guān)鍵字加密階段的開(kāi)銷優(yōu)于文獻(xiàn)[18]和文獻(xiàn)[19],在關(guān)鍵字搜索階段與文獻(xiàn)[18]相當(dāng)。 4.3.2 模擬實(shí)驗(yàn) 本文實(shí)驗(yàn)環(huán)境的硬件配置為Intel(R) Core(TM) i7-9700 CPU @ 3.00 GHz的CPU,16GRAM,操作系統(tǒng)是64位Windows 10專業(yè)版。實(shí)驗(yàn)代碼實(shí)現(xiàn)是基于Java配對(duì)的密碼學(xué)庫(kù)(JPBC),實(shí)驗(yàn)代碼采用Java語(yǔ)言編寫(xiě),實(shí)驗(yàn)中使用JPBC中提出的TypeA型橢圓曲線y2=x3+x,其中p,q分別為160 bits和512 bits。測(cè)試結(jié)果取100次計(jì)算的平均值。 實(shí)驗(yàn)主要對(duì)比了4個(gè)算法的性能,分別是密鑰生成時(shí)間,密文生成時(shí)間,搜索令牌生成時(shí)間和搜索時(shí)間,測(cè)試將屬性個(gè)數(shù)從0增加到50,可以從圖中看出隨著屬性個(gè)數(shù)增加,所消耗的時(shí)間隨屬性線性增長(zhǎng),結(jié)果如圖2所示。本文方案中密文生成算法較優(yōu)于文獻(xiàn)[18]和文獻(xiàn)[19],搜索算法與文獻(xiàn)[18]持平,但優(yōu)于文獻(xiàn)[19]。在密鑰生成階段,由于需要將訪問(wèn)樹(shù)中葉子節(jié)點(diǎn)的屬性映射到群G1中,所以開(kāi)銷高于其它兩種方案。從整體效率來(lái)看本文方案的效率具有可行性。 圖2 各算法時(shí)間消耗 在以太坊區(qū)塊鏈中部署和執(zhí)行智能合約都會(huì)產(chǎn)生消耗,消耗用gas計(jì)算,本實(shí)驗(yàn)在2022年5月23日進(jìn)行,以太坊和美元的匯率為1ETH=1973USD,gas的價(jià)格為1 gas price=10-9ETH,智能合約消耗測(cè)試見(jiàn)表4。 表4 智能合約消耗測(cè)試 表4中展示了部署合約、添加索引和搜索合約的消耗。首先是部署合約deploy合約,gas消耗為548 902,添加索引合約的gas消耗為90 862,搜索操作的gas消耗為41 139。從表4中數(shù)據(jù)可以看出本方案實(shí)現(xiàn)的搜索操作消耗較低,可以較好達(dá)到隱私保護(hù)的效果。 本文提出了一種基于區(qū)塊鏈的屬性匿名驗(yàn)證可搜索加密方案。使用Schnorr協(xié)議對(duì)數(shù)據(jù)用戶的屬性集隱藏,保護(hù)用戶的隱私安全。使用區(qū)塊鏈實(shí)現(xiàn)了數(shù)據(jù)的安全和去中心化共享,相對(duì)于傳統(tǒng)的中心化模型,該方案具有較高的安全性和隱私性。使用智能合約提供關(guān)鍵字搜索服務(wù),可以避免半可信的服務(wù)器返回錯(cuò)誤的搜索結(jié)果。使用屬性基加密實(shí)現(xiàn)了用戶數(shù)據(jù)的細(xì)粒度訪問(wèn)控制。通過(guò)功能分析、性能對(duì)比等,本方案具有較高的效率和可行性。下一步工作將考慮具有屬性撤銷功能的可搜索加密方案。4 方案分析與對(duì)比
4.1 安全性分析
4.2 功能對(duì)比
4.3 性能分析
5 結(jié)束語(yǔ)