萬文豪,王靜宇+,武彥君
(1.內蒙古科技大學 信息工程學院,內蒙古 包頭 014010;2.中國科學技術大學 科學島分院,安徽 合肥 230022)
近年來,隨著大數據和智能化時代的不斷向前發展,每天有大量的相關數據產生,數據安全存儲與共享成為一個十分重要的問題[1]。傳統第三方云存儲的方式共享數據存在數據中心化存儲等問題,數據隱私容易泄露[2]。區塊鏈是一個分布式數據庫,在所有參與方之間共享[3]。區塊鏈具有去中心化的特點,基于區塊鏈技術的分布式數據存儲與共享方案可以解決中心化存儲模式的單點故障和數據易被第三方篡改等問題,打破“數據孤島”[4]。為了保證數據的機密性,數據外包到第三方前需要進行加密,但這樣會影響數據的可用性。為了解決數據共享和搜索問題,可搜索加密技術及時產生。
針對屬性基可搜索加密搜索數據時存在的數據用戶屬性隱私泄露問題。本文提出基于區塊鏈的匿名屬性驗證可搜索加密數據共享方案,主要貢獻如下:
(1)引入非交互式Schnorr協議實現數據用戶屬性隱私保護,可以有效保護用戶隱私。
(2)使用智能合約提供搜索服務,相比于云服務器搜索,可以避免服務器作惡返回錯誤搜索結果。
可搜索加密是指數據或文件在加密狀態下實現搜索功能,相比于傳統的明文搜索具有較好的隱私保護效果。Zhang等[5]、Wang等[6]和Li等[7]分別提出了一種對稱可搜索加密算法。但是現有云服務器大多是半可信的,為了解決云服務器存在不可信的問題,Zhu等[8]提出了一種多用戶通用可驗證可搜索加密模型,利用Merkle Patricia Tree(MPT)和Incremental Hash構建具有數據更新支持的證明索引。
屬性基加密是一類具有細粒度訪問控制權限的加密算法。只有屬性滿足的用戶才具有訪問權限解密數據。傳統的CP-ABE算法密文綁定了一個顯式的訪問結構,存在隱私泄露的風險。Niu等[9]在多用戶環境下提出一種屬性基可搜索加密方法,該方法支持策略隱藏并具有較好的功能和性能。Lyu等[10]、Miao等[11]提出的屬性基加密都沒能解決數據用戶屬性隱私的問題。
區塊鏈作為一種分布式去中心化前沿技術,基于區塊鏈輔助的可搜索加密方案可以達到較好的數據共享與隱私保護效果。Huang等[12]提出了一種支持屬性撤銷的多關鍵字可搜索加密方案,在屬性撤銷過程中不需要更新密鑰。Li等[13]使用比特幣區塊鏈技術實現了一種對用戶和服務器都公平的對稱可搜索加密方案。Liu等[14]提出了一種基于區塊鏈的具有高效撤銷和解密功能的屬性基可搜索加密(BC-SABE)。針對傳統的屬性基可搜索加密開銷較大,無法在資源受限的移動設備上應用的問題,Brij B等[15]提出使用區塊鏈技術降低屬性基可搜索加密的開銷,使用區塊鏈中不同節點分擔不同的計算任務。

(2)非退化性:?m,n∈G1,使e(m,n)≠1;
(3)可計算性:?m,n∈G1,存在有效算法計算e(m,n)。
已知橢圓曲線E和點G,Q,隨機選擇一個整數d,可以得到Q=d*G,非交互式Schnorr協議流程如下:
(1)Prover隨機選擇a∈Zp作為私鑰SK,然后隨機選取橢圓曲線上的點G,計算公鑰PK=a*G隨機選擇整數r并計算R=r*G,c=Hash(R,PK),Z=r+c*sk,然后Prover生成證明 (R,Z)。
(2)驗證者Verifier計算e=H(PK,R),然后Verifier驗證Z*G=R+c*PK

本方案構造的系統模型如圖1所示,定義了5個實體,分別是:數據擁有者、數據用戶、星際文件系統、區塊鏈和密鑰生成中心。

圖1 方案模型
(1)數據擁有者(data owner,DO):數據擁有者產生數據后需要將數據存儲到云端。數據擁有者負責定義屬性訪問控制策略,并在發布到云端之前對在該策略下的數據加密。
(2)數據用戶(data user,DU):數據用戶是一個想要訪問云端數據的第三方實體。數據用戶在查詢需要的數據之前要證明自己擁有相應的屬性,只有擁有合法屬性的數據用戶才可以查詢存儲在云端的數據。
(3)星際文件系統(inter-planetary file system,IPFS):星際文件系統是一個分布式的數據存儲系統,與云服務器類似。數據擁有者將加密后的數據存儲在分布式星際文件系統中,最后將會返回一個存儲地址到數據擁有者。
(4)區塊鏈(Blockchain):區塊鏈中存儲密文的Hash值和索引信息。同時區塊鏈中的智能合約可以完成授權、審計和驗證等交易,并且可以高效、可信的完成交易。
(5)密鑰生成中心(key generation center,KGC):密鑰生成中心是一個可信的密鑰生成機構,主要負責初始化系統,生成系統參數、公鑰和私鑰等。
本文中使用的符號見表1。本文方案大致可以分為4個階段,分別是系統初始化階段、數據加密階段、關鍵字搜索階段和數據解密階段。系統初始化階段主要為系統后續階段做準備。在數據加密階段主要使用屬性基加密完成對數據的加密和上傳;關鍵字搜索階段使用非交互式零知識證明協議完成對用戶屬性的驗證以及關鍵字令牌的匹配,匹配通過則進行關鍵字搜索,否則中止算法。解密階段完成數據的解密操作。

表1 主要參數
系統初始化階段:系統初始化階段主要完成屬性基加密的相關參數生成和系統公鑰、主密鑰和數據用戶屬性私鑰生成。
數據加密階段:加密數據由DO上傳到IPFS后,IPFS返回加密數據的地址給DO,DO將提取出來的關鍵字集合和對稱加密算法AES的密鑰SKAES使用屬性可搜索加密算法加密后與IPFS返回的地址組成一個元組上傳到區塊鏈中。當DU需要訪問某個DO的數據時,DU先確定所需關鍵字信息并生成搜索令牌,在區塊鏈上搜索相關數據。若DU滿足相關條件,智能合約將保存在區塊鏈上的數據存儲地址發送給DU,DU使用解密密鑰解密該地址,DU通過這個地址去訪問IPFS并獲取數據。
關鍵字搜索階段:屬性驗證采用非交互式Schnorr協議完成,DU使用非交互式Schnorr協議生成零知識證明,并將零知識證明發送給智能合約,智能合約收到DU發送的零知識證明后驗證該零知識證明是否符合要求。使用Schnorr協議可以在不暴露DU屬性的情況下在區塊鏈上搜索加密的關鍵字。屬性驗證通過后,DU生成搜索令牌向區塊鏈上的智能合約發起搜索請求,智能合約接收DU發來的搜索令牌,然后驗證令牌是否匹配,驗證通過后才執行關鍵字匹配。搜索到相關信息后返回區塊鏈上存儲的相關信息。
數據解密階段:數據解密階段首先恢復出對稱加密密鑰,然后使用對稱加密密鑰解密數據密文得到數據明文。
本方案設計了6種算法,算法形式化定義如下:
(1)Setup(1λ)→(PK,MK):該算法由KGC執行,輸入安全參數λ,輸出系統公鑰PK和主密鑰MK。
(2)Keygen(PK,MK,S)→SKu:該算法由KGC執行,輸入系統公鑰PK,主密鑰MK和用戶屬性集輸出用戶私鑰SKu。
(3)Encrypt(PK,KW,SKAES,A):加密算法包含以下3個步驟:
1)DO輸入需要加密的數據D,以及對稱加密算法AES的密鑰SKAES,輸出數據密文CTdata。DO將密文CTdata上傳到IPFS,并記錄IPFS返回的存儲地址Daddr,將存儲地址Daddr使用相同的對稱加密算法AES加密后組成元組上傳到區塊鏈中。
2)DO執行此步操作,輸入系統公鑰,訪問結構A,數據關鍵字集KW,將關鍵字加密然后上傳到區塊鏈中。
3)DO執行此步操作,構建訪問樹,并將秘密值存儲在樹的節點中,屬性值存儲在葉節點中。
(4)TokenGen(PK,SKu,S,w′)→Tw:該算法由DU執行,輸入公鑰PK、用戶私鑰SKu、屬性集S和查詢關鍵字w′,輸出搜索令牌Tw。
1)AttBlind(G,Qd,S)→(δj,φj):屬性盲化,使用盲化后的屬性生成用戶屬性私鑰。
2)Verify(G,Qd,Pnizkp)→res:屬性驗證由智能合約執行,智能合約驗證DU是否具備訪問數據的。
(5)Search(PK,Tw′,S)→CTaddr:該算法由區塊鏈上的智能合約執行,輸入公鑰PK、搜索令牌Tw和屬性集S,輸出密文存儲地址。
(6)Decrypt(PK,SKu,S)→SKAES:該算法由DU執行,輸入系統主密鑰MK,用戶私鑰SKu和地址密文CTaddr,輸出數據屬主明文地址address。
3.3.1 系統初始化
系統初始化階段包括兩個算法,分別是setup()和keygen()。

(2)Keygen(PK,MK,S):用戶輸入屬性集S,KGC使用Schnorr協議將每個屬性盲化并生成用戶私鑰SKu。

DU使用Hash函數H1計算挑戰δj
δj=H1(G‖Qd‖P‖j)
(1)
DU計算φj對挑戰δj的響應
φj=m+δj*kd(modp)
(2)
DU將上述信息打包成Pnizkp,其中包含4條信息,分別是P,Qd,φj和δj,然后將Pnizkp發送給智能合約。

(3)
3.3.2 數據加密階段
Encrypt(PK,KW,SKAES,A):在數據加密和上傳階段DO運行該算法,首先加密數據并上傳到區塊鏈中,然后提取關鍵字集KW,將關鍵字加密后上傳到區塊鏈中。最后構造訪問樹將秘密值存儲于訪問樹中。主要步驟如下:


(3)DO輸入公鑰PK,訪問結構A,關鍵字KW。對于訪問樹T中的每一個節點(包括葉節點和非葉節點),DO選擇一個階為dx的多項式qx,其中dx=kx-1,kx表示該節點的閾值。對于訪問樹T的根節點R,DO設置根節點的多項式qR(0)=v,然后,選擇多項式qx的dx個點完成對qx的定義。對于其它非根節點x,設置多項式qx(0)=qparent(x)(index(x)),其中index(x) 的值表示x的父節點parent(x) 在第index(x) 個左孩子節點。設Υ為訪問樹T中的葉節點集合,然后,計算元組 (Dx,D′x),對于x∈Υ,有

(4)
其中,att(x) 表示與訪問樹中葉子節點相關聯的屬性。最后,DO將元組 2={σi,σ′i,Dx,D′x} 上傳到區塊鏈中。
3.3.3 關鍵字搜索階段

(5)
(2)Search(PK,Tw′,S):智能合約接收DU的搜索令牌和屬性集后。智能合約首先檢查DU的屬性集是否滿足訪問結構A,檢查屬性是否匹配的過程由非交互式Schnorr協議驗證,避免泄露用戶的屬性數據。如果屬性集滿足嵌入到索引關鍵字中的訪問策略,數據用戶具有對關鍵字w的搜索權限,然后智能合約將通過搜索令牌匹配密文關鍵字。如果關鍵字匹配成功,則通過以下步驟返回相關的元組:
(1)Verify(G,Qd,Pnizkp):
智能合約使用Qd計算點P′=φjG-δjQd,并檢查P是否等于P′。如果P=P′,那么DU屬性驗證通過進入匹配過程,否則屬性驗證失敗,算法中止。
(2)匹配過程:①若x是葉節點,并且滿足x=j∈S。那么,計算Dx,如果葉節點x?S,則Fx=⊥
(6)
②若x是非葉節點,Fx定義如下,對于x的每個孩子節點τ,智能合約計算輸出Fτ,設λx為任意閾值的孩子節點集合,因此,Fτ≠null;如果沒有此集合,那么,Fτ=null,否則通過下式計算Fτ,其中

(7)


(8)
③用戶的屬性集滿足訪問結構A,進行部分解密得到FR=e(g,g)rsv。然后,智能合約檢查索引I是否滿足令牌Tw′,如果公式成立,智能合約將返回相關的相關的密文集給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使用對稱密鑰解密從IPFS獲得的數據密文。DU從DO處獲得存儲在IPFS上的加密數據地址,DO從該地址下載數據,使用對稱加密算法密鑰解密該數據。
智能合約可以誠實的執行用戶提交的請求,并返回正確的搜索結果。以下是設計的兩個智能合約,分別是添加索引合約和搜索合約。
添加索引合約,由DO執行。當DO新上傳一些數據到IPFS時,從這些數據中選擇一個關鍵字集,并建立相應的加密關鍵字索引,存儲到智能合約。函數的第一個參數是事務id txid,第二個參數是加密的關鍵字索引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
搜索合約,這個合約由授權集合中的用戶和契約的創建者DO執行。該合約傳遞加密的關鍵字索引key,并返回與key關聯的密鑰集。
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 隱私保護 本文從隱私數據信息的全生命周期,包括隱私產生/收集保護,數據發布/存儲/流轉保護,隱私提取/使用保護3個階進行保護。隱私產生/收集階段,非交互式Schnorr協議未提交私鑰而完成身份認證的過程是身份隱私保護的一種方式使得在數據擁有者、數據查詢者身份信息的隱藏且具備不可欺騙的特性。數據用戶提交搜索請求,使用非交互式Schnorr協議將數據用戶屬性集中的每一個屬性盲化得到φj,KGC使用盲化后的屬性為數據用戶生成密鑰π′j=gφj。數據發布/存儲/流轉保護階段,數據發布/存儲過程關鍵字密文和數據密文分布式存儲,數據流轉過程采用對稱加密算法AES保證數據機密性,數據用戶屬性集對區塊鏈上的智能合約不可見,數據用戶的具體屬性信息對區塊鏈上的智能合約不可見,因此智能合約不具備通過密文存儲地址恢復密文數據能力,從而保障數據隱私性、機密性。隱私提取/使用階段,采用屬性基加密實現了用戶數據的細粒度訪問控制,及智能合約方式保障數據隱私性。從數據隱私全生命周期解決了數據保護和數據共享這兩個相互之間存在沖突的問題,同時保護了數據的所有權、數據安全和隱私、并解決了價值的合理分配。 4.1.2 選擇明文攻擊下的不可區分性 定理1 該方案在隨機預言機模型下對DBDH困難問題具有不可區分性。 證明:假設敵手A以不可忽略的優勢ε打破該方案的CPA安全,那么,我們構造一個可以區分DBDH元組和隨機元組。給定雙線性映射參數 (G,GT,e,p,g),挑戰者首先選擇 (a′,b′,c′)∈Zp,l∈{0,1}*,v∈GT,其中g是群G的生成元,然后,如果l=0,設V=e(g,g)a′b′c′;否則,V=v。最后,將元組 (g,ga′,gb′,gc′,V) 發送給模擬器B。輸入數據D和對稱加密密鑰SKEAES,數據擁有者生成密文。接下來在A,B之間進行CPA安全游戲。 初始化:A首先挑戰訪問結構A*,然后將其發送給B。 挑戰:A發送兩條消息m0,m1給B,B選擇一個隨機位l∈{0,1},并調用加密算法生成密文,并將密文發送給A。 詢問階段2:這個階段同詢問階段1。 猜測:A返回猜測位l′∈{0,1},如果l′=l,B輸出0表明V=e(g,g)a′b′c′;否則,輸出1表明V是群GT中的一個隨機元素v。 最后,B在選擇明文安全游戲中的優勢可以被下式定義 從上述分析可以得出,該方案在DBDH假設成立下是安全的。 本文方案的與其它文獻進行功能對比,見表2。其中方案[11]采用與門的訪問控制策略,支持可搜索加密,但是不支持數據用戶隱私保護。方案[12]在區塊鏈架構下實現了可搜索加密,對用戶數據隱私具有一定的隱私保護,但不能保護數據用戶的隱私。除了方案[16]和方案[17]沒有使用區塊鏈,數據存儲在中心化云服務器中,存在較大的安全風險,其它方案均使用區塊鏈實現去中心化。在訪問控制策略方面,主要包括訪問樹和與門兩種方案。本方案基于訪問樹的訪問結構,實現了細粒度的訪問控制,并且使用非交互式Schnorr協議實現了數據用戶屬性隱私保護。鏈上結合鏈下的方式實現了關鍵字密文和數據密文的分布式存儲,達到了安全高效的搜索效果。 表2 不同方案系統功能對比 4.3.1 理論分析 在算法開銷方面,為了方便統計,本文只統計了配對運算,G1群上的取冪操作和Hash到G1群的操作。在表3中Tp表示配對運算的時間,Te表示指數運算的時間,Th表示Hash運算時間。 表3 不同方案各算法效率對比 在表3中,分別用|S|、|X|表示用戶的屬性集、1個訪問樹的葉子節點集合和滿足訪問樹的最小屬性集,比較結果見表3,從表3可以看出本文提出的方案,在密鑰生成階段和令牌生成階段的開銷較大,在關鍵字加密階段的開銷優于文獻[18]和文獻[19],在關鍵字搜索階段與文獻[18]相當。 4.3.2 模擬實驗 本文實驗環境的硬件配置為Intel(R) Core(TM) i7-9700 CPU @ 3.00 GHz的CPU,16GRAM,操作系統是64位Windows 10專業版。實驗代碼實現是基于Java配對的密碼學庫(JPBC),實驗代碼采用Java語言編寫,實驗中使用JPBC中提出的TypeA型橢圓曲線y2=x3+x,其中p,q分別為160 bits和512 bits。測試結果取100次計算的平均值。 實驗主要對比了4個算法的性能,分別是密鑰生成時間,密文生成時間,搜索令牌生成時間和搜索時間,測試將屬性個數從0增加到50,可以從圖中看出隨著屬性個數增加,所消耗的時間隨屬性線性增長,結果如圖2所示。本文方案中密文生成算法較優于文獻[18]和文獻[19],搜索算法與文獻[18]持平,但優于文獻[19]。在密鑰生成階段,由于需要將訪問樹中葉子節點的屬性映射到群G1中,所以開銷高于其它兩種方案。從整體效率來看本文方案的效率具有可行性。 圖2 各算法時間消耗 在以太坊區塊鏈中部署和執行智能合約都會產生消耗,消耗用gas計算,本實驗在2022年5月23日進行,以太坊和美元的匯率為1ETH=1973USD,gas的價格為1 gas price=10-9ETH,智能合約消耗測試見表4。 表4 智能合約消耗測試 表4中展示了部署合約、添加索引和搜索合約的消耗。首先是部署合約deploy合約,gas消耗為548 902,添加索引合約的gas消耗為90 862,搜索操作的gas消耗為41 139。從表4中數據可以看出本方案實現的搜索操作消耗較低,可以較好達到隱私保護的效果。 本文提出了一種基于區塊鏈的屬性匿名驗證可搜索加密方案。使用Schnorr協議對數據用戶的屬性集隱藏,保護用戶的隱私安全。使用區塊鏈實現了數據的安全和去中心化共享,相對于傳統的中心化模型,該方案具有較高的安全性和隱私性。使用智能合約提供關鍵字搜索服務,可以避免半可信的服務器返回錯誤的搜索結果。使用屬性基加密實現了用戶數據的細粒度訪問控制。通過功能分析、性能對比等,本方案具有較高的效率和可行性。下一步工作將考慮具有屬性撤銷功能的可搜索加密方案。4 方案分析與對比
4.1 安全性分析



4.2 功能對比

4.3 性能分析



5 結束語