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