鄭東,朱天澤,郭瑞
(西安郵電大學網絡空間安全學院,陜西 西安 710121)
在云計算時代,人們可以借助云存儲服務外包存儲數據以降低本地信息管理開銷。然而,云存儲技術在為人們帶來便利的數據服務的同時,也存在一定的安全隱患。云服務器中存儲的數據包含大量的用戶敏感信息,如私密電子郵件、個人健康記錄以及財務信息等。這些敏感數據一經上傳至云端,便完全脫離了用戶的控制,其安全性受到了極大威脅。如何為用戶敏感信息提供安全保護,已成為云計算亟須解決的關鍵問題之一??紤]到作為存儲載體的半可信云服務器可以輕松繞過訪問控制策略查看用戶的數據,因此必須將數據加密后再存儲到云服務器上才能真正實現安全存儲。對于明文信息,可以使用傳統的關鍵詞搜索技術來找到所需的數據。然而,這種方式并不適用于對密態數據的檢索。如何實現對密態數據的快速搜索便于用戶對所需數據進行準確定位,是云存儲技術中的研究熱點。
可搜索加密技術可以通過使用特定的關鍵詞來檢索加密后的文件,實現密態數據的檢索功能,為云平臺中存儲的敏感數據提供安全性保護。Song等[1]給出了第一個對稱可搜索加密算法。Boneh 等[2]構造了第一個公鑰可搜索加密(PEKS,public key encryption with keyword search)方案。如圖1 所示,PEKS 包含以下3 個步驟:1) 數據擁有者利用自己的明文數據提取明文關鍵詞集,使用數據接收者的公鑰生成密文關鍵詞集和密文數據,將密文關鍵詞與密文數據建立索引后,連同密文數據外包存儲在服務器上;2) 當數據接收者想對存儲在云服務器上的數據進行搜索時,利用自己的私鑰生成陷門信息,并將陷門信息發送給云服務器;3) 云服務器接收到陷門信息后進行相關搜索工作,在此過程中不進行數據解密。將搜索到的相關密文數據發送給數據接收者后,數據接收者利用自己的私鑰對文檔進行解密。然而,在傳統公鑰可搜索加密體系中服務器是半可信且好奇的。為了節約計算資源,即使服務器通過檢測算法檢索到了用戶所需的文件,也可能會返回錯誤的或部分檢索結果。
圖1 公鑰可搜索加密
目前,解決可搜索加密中第三方的半可信問題,多采用可搜索加密與區塊鏈技術結合的方式。區塊鏈本質上是一種去中心化、分布式存儲的數據庫,鏈上存儲的數據公開透明,并依托密碼技術確保存儲在鏈上的數據不可篡改、可追溯。智能合約是一套以數字形式定義的承諾,合約參與方可以在上面執行所承諾的協議,并且,智能合約允許在沒有第三方的情況下進行可信操作,執行的操作可追蹤且不可逆轉。結合區塊鏈上數據的不可篡改性,利用智能合約將存儲在鏈上的密文關鍵詞與接收到的陷門信息進行匹配,可以保證文件檢索結果的正確性且可以幫助用戶驗證服務器返回的文件是否被篡改。
為了在云服務器上對密文數據進行檢索,Song等[1]給出了第一個可搜索加密方案。該方案基于對稱密碼體制,將明文數據中每個單詞進行加密后上傳,用戶想要搜索時,利用關鍵詞生成密文發送給服務器,服務器通過掃描密文數據并與關鍵詞密文進行對比來返回檢索結果。然而,這種搜索方式需要遍歷全部密文,計算代價大且效率較低。Boneh等[2]首次將公鑰密碼體制引入可搜索加密領域,構造了第一個PEKS。該方案使用索引的結構來訪問隱私數據,服務器將數據接收者發送的陷門與密文關鍵詞進行匹配,匹配成功后利用索引返回對應的密文。同時,密文關鍵詞中包含數據接收者的公鑰使整個檢索過程中用戶之間不需要交互,公鑰可搜索加密的應用場景也因此更廣闊。然而,該方案需在安全信道中進行陷門傳遞,限制了其應用范圍。針對此問題,Baek 等[3]首次提出了可以在公開信道下傳輸數據的公鑰可搜索加密方案(SCF-PEKS)。通過在密文關鍵詞中加入指定服務器的公鑰來確??梢栽诠_信道中傳輸數據。Fang 等[4]提出了在無隨機諭言機模型下證明PEKS 和SCF-PEKS 的關鍵詞安全性。此外,Fang 等[5]還設計了一種效率高于SCF-PEKS 的公鑰可搜索加密方案。
然而,上述PEKS 和SCF-PEKS 都存在關鍵詞隱私性不足的問題,無法抵抗關鍵詞猜測攻擊[6-8]。為了應對此種攻擊,Tang 等[9]設計了可以抵抗離線關鍵詞猜測攻擊的方案。Rhee 等[10]首次提出了“陷門不可區分性”的概念,并指出公鑰可搜索加密滿足陷門不可區分性是對抗離線關鍵詞猜測攻擊的充分條件。Qin 等[11]將Boneh 等提出的密文不可區分性擴展成為了多密文不可區分性。在實際應用中,一份文件通常不僅僅包含一個關鍵詞,而且同一個關鍵詞也可能出現多次。給定一組關鍵詞加密,數據擁有者不希望其他人知道2 個文件是否包含相同的關鍵詞,或者同一個文件包含多少個相同的關鍵詞。因此,公鑰可搜索加密方案需要考慮多密文不可區分性。
將基于身份的加密(IBE,identity-based encryption)算法與可搜索加密算法相結合,可以大大降低PEKS 方案中的證書管理開銷。Abdalla 等[12]完善了PEKS 的定義,給出了其與基于身份的匿名加密方案之間的轉化關系,并提出了一種新的基于臨時關鍵詞搜索的公鑰可搜索加密方案。Rhee 等[13]構造了指定測試者的基于身份的公鑰可搜索加密(dIBEKS,IBEKS with designated tester)的2 種通用結構。Emura 等[14]給出了自適應安全的公開信道下公鑰可搜索加密的通用構造方法,并構造了基于標簽和一次性簽名的IBEKS 通用結構[15]。王少輝等[16]首次提出了基于身份密碼系統下的指定測試者可搜索加密方案的定義和安全需求,特別證明了dIBEKS 密文不可區分性是抵御離線關鍵詞猜測攻擊的充分條件并設計了一個高效的dIBEKS 新方案可以有效抵御離線關鍵詞猜測攻擊。Ma 等[17]在物聯網(IoT,Internet of things)環境中設計了一種新的基于身份的無證書可搜索加密方案,用于IoT 數據在云存儲服務器中安全外包存儲與共享。方案證明了可以針對選擇一個公鑰替換用戶公鑰和可以被給予系統主密鑰這兩類敵手做到抵抗選擇關鍵詞攻擊。牛淑芬等[18]將PEKS 與IBE 相結合,在有效解決了郵件通信系統中對加密郵件檢索問題的同時,也降低了公鑰可搜索加密方案中復雜的密鑰管理開銷。此外,通過郵件發送方和接收方之間的相互認證并指定服務器執行檢測算法以抵御離線關鍵詞猜測攻擊。為了優化傳統公鑰可搜索加密方案中大量運用雙線性映射導致的低效率問題,楊寧濱等[19]構建了無雙線性映射運算的公鑰認證可搜索加密方案來提升運算的效率。
一對一模式的可搜索加密無法滿足同時向多位用戶進行密文數據安全共享的需求。為了解決此類問題,Curtmola 等[20]結合廣播加密技術首次提出了一對多模式的公鑰可搜索加密方案但其密鑰撤銷代價較大。杜瑞忠等[21]提出了一種基于區塊鏈的公鑰可搜索加密方案實現了一對多模式的數據共享,結合智能合約來解決傳統方案中服務器不完全可信的問題,而且因為陷門信息無需上傳至服務器也防止了半可信的服務器進行內部關鍵詞猜測攻擊。然而,其陷門信息在公開信道下傳輸時無法抵御離線關鍵詞猜測攻擊;此外,方案中智能合約在完成檢索后將加密數據文件的對稱密鑰直接發送給用戶也存在安全隱患。張玉磊等[22]利用代理重加密構造了一對多模式的PEKS 方案以適應多用戶環境下的需求,其方案中需要數據擁有者持續在線以處理來自數據接收者發起的請求,在實際應用中存在較大限制。
在云計算環境下,為了節省計算資源,服務器可能會返回錯誤的檢索結果或部分檢索結果,嚴重影響用戶的使用。智能合約與區塊鏈技術的快速發展可以為用戶提供可信云服務[23-24],在公鑰可搜索加密中能夠幫助用戶驗證云服務器提供的密態數據檢索結果是否準確。Zhang 等[25]提出了一種基于區塊鏈的個人健康數據安全共享方案,為了保證數據安全性和可用性,對加密后的個人體征數據使用公鑰可搜索加密技術實現檢索。高夢婕等[26]提出了一種基于區塊鏈的可搜索醫療數據共享方案,方案使用對稱可搜索加密并結合區塊鏈與秘密共享技術,在確保參與者能安全獲取共享密鑰的同時也保證了共享數據的一致性。Li 等[27]提出了一種基于區塊鏈的可搜索加密方案,方案使用對稱加密算法實現對密文的檢索。在該方案中,Li 等不僅給出了基于區塊鏈的對稱可搜索加密方案模型,還提出了2 種不同方案以處理不同規模的數據。之后,Li 等[28]還對文獻[25]所提方案進行了改進以提高其可靠性。Chen 等[29]也使用對稱可搜索加密并結合區塊鏈技術提出了一種電子醫療記錄共享方案,其使用智能合約作為可信第三方用以確保云平臺提供的服務可信。牛淑芬等[30]基于聯盟鏈提出了一種可搜索電子病歷共享方案。該方案將代理重加密的思想引入可搜索加密中,并與區塊鏈技術相結合,通過使用服務器存儲電子病歷密文、私有鏈存儲密文哈希值、聯盟鏈存儲關鍵詞索引的方式,實現了電子病歷的安全存儲與共享。
為了實現在半可信云存儲環境下的多用戶密文數據安全共享,本文提出了一種基于區塊鏈的公鑰可搜索加密方案,主要貢獻如下。
1) 將PEKS 與IBE 相結合,實現了一對多模式的公鑰可搜索加密方案,并設計了文件加密密鑰的傳遞算法,保證用戶在檢索到密文后能夠正確解密并獲取明文。在該模型中,數據共享者只需一次加密上傳就可以向多位指定的用戶共享數據,能夠靈活運用于實際場景中。利用IBE 的優勢也降低了證書管理開銷。此外,引入區塊鏈與智能合約,將索引存儲在區塊鏈上并利用智能合約進行檢索操作,在保證返回正確文件檢索結果的同時幫助用戶進行數據驗證,解決了傳統第三方存儲中存在的半可信問題,保障了數據的可靠性。
2) 在隨機諭言機模型下,基于判定性雙線性Diffie-Hellman 假設(DBDH,decisional bilinear Diffie-Hellman )和修改的判定性雙線性Diffie-Hellman 假設(MBDH,modified bilinear Diffie-Hellman),證明了本文方案的密文關鍵詞和陷門信息滿足選擇關鍵詞攻擊下的不可區分性,并可以抵抗內部關鍵詞猜測攻擊。同時,分析了區塊鏈對保護數據完整性的作用。
3) 利用jPBC 密碼庫,對本文方案和其他相關方案進行模擬實驗。其仿真結果表明,本文方案具有較高的運行效率和較強的實用價值。
設G1、G2均是階數為素數p的群,其中G1是加法群,G2是乘法群,P為群G1的生成元。滿足如下 3 個性質的映射稱為一個雙線性映射:G1×G1→G2。
1) 雙線性:對于?P,Q∈G1,?a,b∈
2) 非退化性:?P,Q∈G1,使
3) 可計算性:對所有的P,Q∈G1,存在有效的算法。
設G1、G2均是階數為素數p的群,其中G1是加法群,G2是乘法群,P為群G1的生成元,雙線性映射:G1×G1→G2。DBDH 問題可表述為給定(P,aP,bP,cP)∈G1,E∈G2,判斷E=還是,其中a,b,c,z←。
設G1、G2均是階數為素數p的群,其中G1是加法群,G2是乘法群,P為群G1的生成元,雙線性映射:G1×G1→G2。MBDH 問題可表述為給定(P,aP,bP,cP)∈G1,E∈G2,判斷還是E=,其中。
如圖2 所示,本文方案主要包括密鑰生成中心(PKG,private key generator)、用戶(user)、聯盟鏈與智能合約、云服務器(CS,cloud sever)4 個實體。
圖2 基于區塊鏈的多用戶環境中公鑰可搜索加密方案系統框架
1) 密鑰生成中心。PKG 為每個用戶和管理聯盟鏈的權威中心(以下簡稱權威中心)生成私鑰并公布系統公共參數。
2) 用戶。根據系統內用戶的不同行為,每個用戶既可以是數據擁有者也可以是數據接收者。
①數據擁有者是系統中向其他用戶進行數據共享的用戶。數據擁有者將要分享的數據密文編號并建立索引,然后將密文數據與索引一起上傳至CS。同時,生成密文關鍵詞存儲在聯盟鏈上供智能合約執行檢測算法時調用,密文關鍵詞中包含文件編號與文件哈希值。
② 數據接收者是有檢索需求的用戶。數據接收者利用自己私鑰和想要搜索的關鍵詞生成陷門信息發送給智能合約,利用返回值進行文件正確性與完整性驗證并解密密文數據。
3) 聯盟鏈與智能合約。本文方案采用區塊鏈應用模式中的聯盟鏈進行構造。聯盟鏈在保有區塊鏈基本特性的基礎上增加了認證機制,只有經過授權的用戶才能參與其中,符合基于身份的加密系統。系統內權威中心對聯盟鏈進行管理并部署智能合約。聯盟鏈存儲數據擁有者上傳的密文關鍵詞,智能合約收到陷門信息時調用數據擁有者存儲在聯盟鏈上的密文關鍵詞并執行檢測算法,將數據接收者的身份和檢索到的文件編號發送給CS 并為用戶返回哈希值,用來進行文件正確性與完整性驗證。
4) 云服務器。外包存儲數據擁有者上傳的數據密文與索引。
本文方案主要包括以下步驟。
步驟1系統初始化算法SetUp(λ)。該算法以安全參數λ為輸入。PKG 生成公開參數params,保留系統私鑰msk。權威中心將智能合約部署在聯盟鏈上。
步驟2密鑰生成算法 KeyGen (params,IDU,IDA,msk)。該算法以系統公共參數params、用戶身份IDU、權威中心標識IDA、系統私鑰msk 為輸入。PKG 為用戶計算生成skU,用戶自己計算生成DU,將skU、DU作為自己的私鑰;PKG 為權威中心生成skA,權威中心將skA作為私鑰。PKG 計算生成用戶身份公鑰TIDU。
步驟3密文關鍵詞生成算法KeywordGen(params,w,M)。該算法以系統公共參數params、一個明文關鍵詞w、明文數據M為輸入。用戶生成一個密文關鍵詞Ckw、一個索引I和一個數據密文Cm。
步驟4陷門信息生成算法 TrapdoorGen(params,w′,Ti,DU,IDA)。該算法以系統公共參數params、用戶想要搜索的關鍵詞w′、Ti、用戶私鑰DU以及權威中心身份標識IDA為輸入,用戶生成陷門信息Tw。
步驟5檢測算法Test(params,Ckw,Tw,skA)。該算法以系統公共參數params、密文關鍵詞Ckw、陷門信息Tw和權威中心私鑰skA為輸入,返回檢索結果。
步驟6數據密文解密算法Dec(N,n′,)。該算法以密文關鍵詞Ckw中的N以及服務器返回的密文關鍵詞n′和數據密文為輸入,用戶驗證數據完整性。若驗證通過則解密,此時Cm=。
定義1如果對任何多項式時間敵手A,存在一個可忽略的函數?(K),K為安全參數,使≤?(K),那么就稱這個加密算法Π 是語義安全的,或稱為在選擇關鍵詞攻擊下具有不可區分性,簡稱為IND-CKA(indistinguishabilitychosen keyword attack)安全。
定義2如果對任何多項式時間敵手A,存在一個可忽略的函數?(K),使≤?(K),那么就稱這個加密算法Π 是語義安全的,或稱為在選擇明文攻擊下具有不可區分性,簡稱為IND-CPA(indistinguishability-chosen plaintext attack)安全。
定義3設G1、G2是階為大素數p的群,g為G1的生成元,映射:G1×G1→G2,a,b,c,z←,則隨機五元組與DBDH五元組D=(g,g a,g b,g c,e? (g,g)abc)是計算上不可區分的,稱為DBDH 假設。
具體地,對任一敵手B,B 區分R和D的優勢=|Pr[B(R)=1]-Pr[B(D)=1]|是可忽略的,即≤?(K)。
定義4設G1、G2是階為大素數p的群,g為G1的生成元,映射:G1×G1→G2,a,b,c,z←則隨機五元組R=與MBDH五元組M=是計算上不可區分的,稱為MBDH 假設。
具體地,對任一敵手B,B 區分R和M的優勢=|Pr[B(R)=1]-Pr[B(M)=1]|是可忽略的,即≤?(K)。
3.3.1密文關鍵詞的不可區分性
下面,通過敵手A 與挑戰者之間的安全游戲來定義本文方案的密文關鍵詞不可區分性。密文關鍵詞Ckw的IND-CKA 游戲定義如下。
初始化挑戰者輸入安全參數K,產生公開的系統參數params 和保密的主密鑰。
階段1(訓練)敵手A 發出對ID 的密鑰產生詢問并聲明意欲挑戰的身份ID*,否則記為IDU。挑戰者運行密鑰生成算法,根據是否為要挑戰的ID返回不同的身份公鑰T與私鑰給敵手A,這一過程可重復多項式有界次。
挑戰敵手A 輸出2 個長度相等的關鍵詞w0、w1和一個意欲挑戰的公開鑰ID*。唯一的限制是ID*在階段1 中的任何密鑰詢問中出現時挑戰者報錯并退出。挑戰者隨機選擇一個比特值β←R{0,1},用ID*加密wβ得到,并將發送給敵手A。
階段2(訓練)敵手A 發出對另外ID 的密鑰產生詢問,唯一的限制是ID ≠ID*,挑戰者以階段1 中的方式進行回應,這一過程可重復多項式有界次。
猜測敵手A 輸出猜測β′∈{0,1},如果β′=β,則敵手A 攻擊成功。
敵手A 的優勢定義為安全參數K的函數
3.3.2陷門信息的不可區分性
下面,通過敵手A 與挑戰者之間的安全游戲來定義本文方案的陷門信息不可區分性。陷門信息Tw的IND-CKA 游戲定義如下。
初始化挑戰者輸入安全參數K,產生公開的系統參數params 和保密的主密鑰。
階段1(訓練)敵手A 發出對ID 的密鑰產生詢問并聲明意欲挑戰的身份ID*,否則記為IDi。挑戰者運行密鑰生成算法,根據是否為要挑戰的ID 用不同的方式返回H1(ID)與私鑰給敵手A,這一過程可重復多項式有界次。
挑戰敵手A 輸出2 個長度相等的明文w0、w1和一個意欲挑戰的公開鑰ID*。唯一的限制是ID*在階段1 中的任何密鑰詢問中出現時挑戰者報錯并退出。挑戰者隨機選擇一個比特值β←R{0,1},用ID*加密wβ得到,并將發送給敵手A。
階段2(訓練)敵手A 發出對另外ID 的密鑰產生詢問,唯一的限制是ID ≠ID*,挑戰者以階段1 中的方式進行回應,這一過程可重復多項式有界次。
猜測敵手A 輸出猜測β′∈{0,1},如果β′=β,則敵手A 攻擊成功。
敵手A 的優勢定義為安全參數K的函數
3.3.3密鑰保護信息的不可區分性
下面,通過敵手A 與挑戰者之間的安全游戲來定義本文方案的密鑰保護信息不可區分性。密鑰保護信息K的IND-CPA 游戲定義如下。
初始化挑戰者輸入安全參數K,產生公開的系統參數params 和保密的主密鑰。
階段1(訓練)敵手A 發出對ID 的密鑰產生詢問并聲明意欲挑戰的身份ID*,否則記為IDi。挑戰者運行密鑰生成算法,根據是否為要挑戰的ID 用不同的方式返回H1(ID)與私鑰給敵手A,這一過程可重復多項式有界次。
挑戰敵手A 輸出兩個長度相等的明文M0、M1和一個意欲挑戰的公開鑰ID*。唯一的限制是ID*在階段1 中的任何密鑰詢問中出現時挑戰者報錯并退出。挑戰者隨機選擇一個比特值β←R{0,1},用ID*加密Mβ得到K*,并將K*發送給敵手A。
階段2(訓練)敵手A 發出對另外ID 的密鑰產生詢問,唯一的限制是ID ≠ID*,挑戰者以階段1 中的方式進行回應,這一過程可重復多項式有界
猜測敵手A 輸出猜測β′∈{0,1},如果β′=β,則敵手A 攻擊成功。
敵手A 的優勢定義為安全參數K的函數
基于區塊鏈的多用戶環境中公鑰可搜索加密方案的運行過程如圖3 所示,本文方案具體執行細節如下。
圖3 基于區塊鏈的多用戶環境中公鑰可搜索加密方案運行過程
1) 系統初始化算法SetUp(λ)。該算法以安全參數λ為輸入。
①PKG 生成階數為大素數p(p>2λ)的乘法群G1、G2,g為G1的生成元。生成一個雙線性映射:G1×G1→G2。選擇 5 個抗碰撞哈希函數H1:{0,1}*→G1、H2:G1→、H3:{0,1}*→G2、H4:G2→{0,1}k和H5:{0,1}*→{0,1}k。隨機選取y←作為系統私鑰,計算系統公鑰為Y=和Y′=gy。
② PKG 公布系統公共參數params=(p,G1,G2,g,,H1,H2,H3,H4,H5,Y,Y′),權威中心將智能合約部署在聯盟鏈上。
2) 密鑰生成算法KeyGen (params,IDU,IDA,y)。該算法以系統公共參數params、用戶身份IDU、權威中心標識IDA、系統私鑰y為輸入。設群組內共有m個用戶(m可動態增加),則有1 ≤U≤m,m∈N+。
② 權威中心將自己的標識IDA發送給PKG,PKG 計算發送給權威中心,權威中心收到后將skA作為自己的私鑰并保存。
3) 密文關鍵詞生成算法 KeywordGen(params,w,M)。該算法以系統公共參數params、一個明文關鍵詞w、明文數據M為輸入。
①數據擁有者首先指定可以檢索密文的i(i≤m,i∈N+)個用戶的集合θ={1 ≤U≤i|IDU,然后隨機選取r1←,并使用θ對應的i個用戶的身份公鑰計算集合T=。最i后,生成密文C=[C1,C2,C3]=
② 數據擁有者采用對稱加密算法加密明文數據M。隨機選擇η←并計算對稱加密密鑰k=H4(η),將k作為對稱加密密鑰加密M得到M′。然后,共享者計算密鑰保護信息K=并將K拼接在M′頭部形成一個大文件作為數據密文Cm(Cm=K||M′),如圖4 所示。
圖4 數據密文 Cm 結構
③數據擁有者從正整數集上選擇一個數n作為要上傳的密文關鍵詞的編號,使用編號n與密文Cm生成N=[N1,N2]=[n,H5(n||Cm)]。
④ 數據擁有者將密文關鍵詞Ckw=[C,N]上傳至聯盟鏈,將n與數據密文Cm建立索引關系I={n,Cm}(能夠通過n查詢到Cm)后將I和Cm上傳至CS。
4) 陷門信息生成算法TrapdoorGen (params,w′,Ti,DU,IDA)。該算法以系統公共參數params、用戶想要搜索的關鍵詞w′、Ti、用戶私鑰IDU以及權威中心身份標識IDA為輸入。
數據接收者首先查看密文關鍵詞Ckw中設置的集合θ中是否有自己的身份。若有,則使用想要搜索的關鍵詞w'和Ti中對應的計算陷門信息
5) 檢測算法Test(params,Ckw,Tw,skA)。該算法以系統公共參數params、密文關鍵詞Ckw、陷門信息Tw和權威中心私鑰skA為輸入,返回檢索結果0 或1。
①數據接收者有檢索需求時,將生成的陷門信息Tw發送給智能合約。智能合約從Tw中解析出T1、T2,從Ckw中解析出C1,利用權威中心提供的私鑰skA驗證等式是否成立。若不成立輸出0,若成立輸出1。
② 當輸出1 時,智能合約將Ckw中的N返回給數據接收者,同時將其身份T2=IDU與密文關鍵詞編號N1=n發送給CS。
③CS 收到N1后,通過N1=n查詢對應的Cm,隨后將n′與返回給T2所示用戶。其中,n′為CS 返回的密文關鍵詞編號,為CS 返回的數據密文。
①用戶收到N、n′ 、后,首先驗證等式N1=n′是否成立,若成立表明CS 返回了用戶所要搜索的文件。然后,驗證等式是否成立,若成立表明密文數據沒有被篡改。
圖5 數據恢復過程
檢測算法正確性
顯然,當陷門Tw中包含的關鍵詞w′與密文關鍵詞Ckw中包含的關鍵詞w相同時等式成立。
數據密文解密算法正確性
因此,用戶可以計算出k正確解密密文數據。
定理1在隨機諭言機模型下,若MBDH 假設成立,則本方案的密文關鍵詞Ckw是IND-CKA 安全的,即滿足選擇關鍵詞攻擊下的不可區分性。
證明要證明Ckw的IND-CKA 安全性只需證明Ckw中的C滿足IND-CKA 安全性即可。
挑戰者先建立MBDH 問題,設B 是一個攻擊MBDH問題的多項式時間敵手,A 是一個攻擊C的多項式時間敵手,敵手B 以敵手A 為子程序,具體挑戰過程如下。
階段1在此階段,敵手B 承擔敵手A 的挑戰者。敵手B 首先獲得A 意欲挑戰的身份ID*,否則記為IDU,然后敵手B 模擬一個隨機諭言機對敵手A 發出的詢問進行應答。
挑戰敵手A 輸出2 個長度相等的明文關鍵詞w0、w1發送給敵手B。B 隨機選擇β←R{0,1},計算wβ的密文C*=[H3(wβ)E,T*,=gbr]返回給敵手A。
階段2與階段1 一樣。
猜測敵手A 輸出猜測β′∈{0,1}。若β′=β,B 輸出μ′=0,表示實例T是MBDH 五元組M;如果β′≠β,B 輸出μ′=1,表示實例T是隨機五元組R。
當μ=1時,E=,有H3(wβ)E=。由于z是隨機的,因此在A看來C*也是G2中隨機的元素。因為C*是隨機的,敵手A 沒有獲得有關β的任何信息,所以Pr[β′≠β|μ=1]=。而當β′≠β時,B 猜測μ′=1,所以Pr[μ′=μ|μ=1]=。
所以,有
等式左邊與定義3 中敵手B 解決MBDH 問題的優勢定義一致,等式右邊為敵手A 區分C的優勢。因此
證畢。
定理2在隨機諭言機模型下,若DBDH 假設成立,則本文方案的陷門信息Tw是IND-CKA 安全的,即滿足選擇關鍵詞攻擊下的不可區分性。
證明挑戰者先建立DBDH 問題,設B 是一個攻擊DBDH 問題的多項式時間敵手,A 是一個攻擊陷門信息Tw的多項式時間敵手,敵手B 以敵手A 為子程序,具體挑戰過程如下。
初始化挑戰者建立DBDH 問題,B 獲得一個五元組實例T=(g,g a,g b,g c,E),其中E=或。B 以實例T中的ga作為系統公鑰Y′,其余公共參數用與挑戰者方案相同的方式產生,公開系統公共參數params=
階段1 在此階段,敵手B 承擔敵手A 的挑戰者。敵手B 模擬一個隨機諭言機對敵手A 發出的詢問進行應答。
階段2與階段1 一樣。
猜測敵手A 輸出猜測β′∈{0,1}。若β′=β,則A挑戰成功并輸出1(用Succ 表示該事件),否則輸出0。同時,B 也把A的輸出作為自己的輸出。
所以,有
所以,有
等式左邊與定義2中敵手B 解決DBDH問題的優勢定義一致,等式右邊為敵手A 區分Tw的優勢。因此
此外,陷門信息中Tw中包含的對于權威中心來說也是不可區分的,這一點在5.1 節中已進行了詳細的證明,因此陷門信息Tw可以抵御內部關鍵詞猜測攻擊。同時,由于陷門信息中包含了權威中心公鑰H1(IDA),只有利用智能合約才可以執行檢測算法,因此本文方案也滿足指定可搜索性可以在公開信道下進行數據傳輸。
定理3在隨機諭言機模型下,若MBDH 假設成立,則本文方案的密鑰保護信息K是IND-CPA安全的,即滿足選擇明文攻擊下的不可區分性。
證明K的IND-CPA 安全性證明與C的相同,具體證明過程省略。
證畢。
實驗設備的處理器使用 Intel(R) Core(TM)i5-10210U CPU@1.60 GHz 2.11 GHz,內存為16 GB。為了讓效率分析的結果更加準確,在Windows10系統環境下使用IDEA 編程軟件利用jPBC 密碼庫對參與比較的文獻進行了仿真實現,其中采用了庫中的Type A 類曲線構造對稱質數階雙線性群,群的階數為512 bit,域的階數為160 bit。
本文方案主要與文獻[16-18,21]方案進行對比。實驗分別記錄各方案生成100 次密文關鍵詞、生成100次陷門信息與執行100次檢測算法的累計耗時,然后計算其單次運行平均耗時使數據更加可靠,最后進行總結分析。
各方案密文關鍵詞生成時間如圖6 所示,與文獻[16-18]方案相比,本文方案在同樣滿足密文關鍵詞不可區分性的情況下還可以適用于一對多通信模式的多用戶環境中且生成密文關鍵詞時的效率更高。隨著分享用戶數量的增加,本文方案的優勢將會更加明顯。與文獻[21]方案相比,在二者都適用于多用戶環境中的情況下,本文方案不僅在效率上具有一定優勢且文件加密密鑰的傳輸過程更加安全。圖7 展示了各方案生成一個密文關鍵詞的平均耗時。
圖6 各方案密文關鍵詞生成時間
圖7 各方案密文關鍵詞平均生成時間
記生成一次陷門信息與執行一次檢測算法時間的總和為一次交互時間。各方案陷門生成與執行檢測算法的時間如圖8 所示。分析結果表明,與文獻[16-18]方案的效率相比,本文方案具有較大優勢,可以更快地為用戶反饋檢索結果,改善用戶體驗。在與文獻[21]方案比較時,雖然運行效率相近,但文獻[21]方案的陷門信息無法抵抗關鍵詞猜測攻擊,在安全性方面不及本文方案。圖9 展示了各方案單次交互平均耗時即運行一次陷門信息生成算法與執行一次檢測算法時間總和的平均值。
圖8 各方案陷門生成與執行檢測算法的時間
圖9 各方案陷門生成與執行檢測算法的平均時間
使用不同字符長度的關鍵詞運行本文方案的密文關鍵詞生成算法(取i=3)與陷門信息生成算法100 次計算平均值如圖10 所示。結果表明,本文方案在使用不同長度關鍵詞時的運行效率相近,具有很高的靈活性。
圖10 不同關鍵詞長度下的運行效率
本文將PEKS 與IBE 相結合,在多用戶環境中實現了一對多模式的公鑰可搜索加密方案并設計了文件加密密鑰的詳細傳遞算法。數據共享者只需一次加密上傳就可以向多位指定的用戶進行數據共享,能夠靈活運用于實際場景中。利用IBE 的優勢也降低了證書管理開銷。此外,引入區塊鏈與智能合約,將索引存儲在區塊鏈上并利用智能合約進行檢索操作,在保證返回正確檢索結果的同時解決了傳統第三方存儲的半可信問題,保障了數據的可用性。在隨機諭言機模型下,基于判定性雙線性 Diffie-Hellman 假設和修改的判定性雙線性Diffie-Hellman 假設證明了本文方案的密文關鍵詞和陷門信息滿足選擇關鍵詞攻擊下的不可區分性且可以抵抗內部關鍵詞猜測攻擊。同時,分析了引入區塊鏈對保證數據可用性的作用。利用jPBC 密碼庫對本文方案和參與效率分析的其他方案進行了仿真實現。結果表明,本文方案在具備安全性與實用性的基礎上也具有較高的運行效率。