孫麗雪,豆建峰
(河南工學院 理學部,河南 新鄉(xiāng) 453003)
隨著云計算的發(fā)展,越來越多的用戶把數(shù)據(jù)外包到云服務(wù)器上[1],但云服務(wù)的數(shù)據(jù)安全問題成為云服務(wù)被廣泛應(yīng)用的主要障礙[2-3]。為了避免隱私泄漏的風險,數(shù)據(jù)擁有者通常在上傳數(shù)據(jù)之前加密了這些數(shù)據(jù)。數(shù)據(jù)加密使得文件對任何人都是不可讀的,用戶就不能直接輸入關(guān)鍵詞來檢索自己想要的數(shù)據(jù),因而帶來了對密文數(shù)據(jù)進行檢索這一具有挑戰(zhàn)性的難題。
為了解決上述問題,公鑰可搜索加密技術(shù)被廣泛研究。公鑰可搜索加密[4]允許數(shù)據(jù)擁有者把加密的文件上傳到云服務(wù)器上,之后數(shù)據(jù)擁有者指定的用戶可以使用關(guān)鍵詞從云服務(wù)器上檢索這些加密的文件。在公鑰可搜索加密方案中,數(shù)據(jù)擁有者使用接收者的公鑰分別加密文件中每個關(guān)鍵詞,即生成關(guān)鍵詞的索引,并把這些索引附在文件密文之后。為了搜索包含指定關(guān)鍵詞的文件,數(shù)據(jù)接收者生成關(guān)鍵詞的陷門,并發(fā)送給云服務(wù)器。云服務(wù)器檢驗索引中的關(guān)鍵詞和陷門中的關(guān)鍵詞是否匹配,并把相應(yīng)的密文文件返回給接收者。為了實現(xiàn)對加密數(shù)據(jù)細粒度的訪問控制,公鑰可搜索加密的概念可以擴展為基于屬性的關(guān)鍵詞搜索,即允許屬性滿足指定訪問策略的用戶直接搜索加密的數(shù)據(jù)[5-6]。
根據(jù)公鑰認證方法的不同,公鑰密碼體制分為基于公鑰基礎(chǔ)設(shè)施(PKI)的密碼體制[7-9]、基于身份的密碼體制[10-12]和無證書的密碼體制[13-15]。在基于PKI的密碼體制中,證書權(quán)威(CA)為每個用戶簽發(fā)一個公鑰證書,用戶使用公鑰前,需要先驗證公鑰證書的合法性,這就增加了用戶的計算量?;谏矸莸拿艽a體制取消了公鑰證書,但所有用戶的私鑰都由私鑰生成中心(PKG)生成,這就產(chǎn)生了密鑰托管問題。無證書的密碼體制解決了基于身份的密碼體制中的密鑰托管問題,更加安全。和基于PKI的密碼體制相比,無證書的密碼體制更加高效,因為不需要維護公鑰證書目錄。
Ma等[16]提出了一個無安全信道的無證書公鑰可搜索加密方案。然而,該方案容易遭受內(nèi)部關(guān)鍵詞猜測攻擊,即云服務(wù)器可以猜測出用戶發(fā)送的陷門中的關(guān)鍵詞。此外,陷門是應(yīng)用確定性的加密算法生成的,不能實現(xiàn)陷門不可鏈接性。陷門不可鏈接性要求外部敵手不能推斷出任何捕獲的陷門的關(guān)系,也就是外部敵手不能推斷出任何不同的陷門是否是同一個用戶發(fā)送的。為了解決這些問題,根據(jù)文獻[17],本文提出了一個無證書的可以抵抗內(nèi)部關(guān)鍵詞猜測攻擊的公鑰可搜索加密方案,且陷門的生成采用的是隨機性的加密算法,可以實現(xiàn)陷門不可鏈接性。
定義1 (雙線性對[11]) 假設(shè)G是一個加法循環(huán)群,GT是一個乘法循環(huán)群,階數(shù)都為某個大素數(shù)p。定義G和GT中的單位元分別為1G和1GT。令g是群G的一個隨機生成元。稱e:G×G→GT是一個雙線性對,如果它是一個滿足下列性質(zhì)的映射:
(1) 雙線性性:對于任何a,b∈RZp,有e(ag,bg)=e(g,g)ab;
(2) 非退化性:對于g1,g2∈G,存在e(g1,g2)≠1GT;
(3) 可計算性:對于所有的g1,g2∈G,可以有效地計算e(g1,g2)。
定義2 一個無證書的公鑰可搜索加密方案包含以下步驟:
(1)系統(tǒng)建立。該算法由密鑰生成中心(KGC)完成。以安全性參數(shù)λ為輸入,輸出主密鑰和系統(tǒng)參數(shù),密鑰生成中心保密主密鑰,公開系統(tǒng)參數(shù)。
(2)部分私鑰提取。該算法生成用戶的部分私鑰,由密鑰生成中心完成。輸入用戶的身份后,密鑰生成中心計算該用戶的部分私鑰,并通過安全的方式發(fā)送給這個用戶。
(3)設(shè)置秘密值。輸入用戶的身份和系統(tǒng)參數(shù),算法輸出該用戶的秘密值。
(4)設(shè)置私鑰。輸入用戶的部分私鑰和秘密值,算法輸出一個完全的私鑰。
(5)設(shè)置公鑰。輸入系統(tǒng)參數(shù)和用戶的秘密值,算法輸出用戶的公鑰。
(6)加密的索引生成。輸入系統(tǒng)參數(shù)和關(guān)鍵詞,算法輸出關(guān)鍵詞的可搜索密文。
(7)陷門生成。輸入系統(tǒng)參數(shù)和關(guān)鍵詞,算法輸出該關(guān)鍵詞的陷門,并把陷門發(fā)送給云服務(wù)器。
(8)測試。云服務(wù)器收到陷門后,檢驗密文和陷門中含有的關(guān)鍵詞是否一致。如果一致,算法輸出1;否則,輸出0。
(1) 系統(tǒng)建立。
(2) 部分私鑰提取。
給定數(shù)據(jù)發(fā)送者的身份IDS,KGC計算它的部分私鑰為DIDS=sQIDS,其中QIDS=H1(IDS);給定數(shù)據(jù)接收者的身份IDR,KGC計算它的部分私鑰為DIDR=sQIDR,其中QIDR=H1(IDR)。
(3) 設(shè)置秘密值。
(4) 設(shè)置私鑰。
給定數(shù)據(jù)發(fā)送者的部分私鑰DIDS和秘密值xIDS,算法返回數(shù)據(jù)發(fā)送者的完全私鑰為SIDS=(xIDS,DIDS);給定數(shù)據(jù)接收者的部分私鑰DIDR和秘密值xIDR,算法返回數(shù)據(jù)發(fā)送者的完全私鑰為SIDR=(xIDR,DIDR)。
(5) 設(shè)置公鑰。
給定數(shù)據(jù)發(fā)送者和接收者的秘密值xIDS和xIDR,數(shù)據(jù)發(fā)送者和接收者分別計算自己的公鑰為PKIDS=xIDSP和PKIDR=xIDRP。
(6) 加密的索引生成。
(7) 陷門生成。
(8) 測試。
收到陷門Tw′后,云服務(wù)器檢驗等式T1e(T3,C1)=e(C2,T2)是否成立。如果成立,算法輸出1,表示密文和陷門中含有的關(guān)鍵詞是一致的;否則,輸出0。
正確性驗證:
T1e(T3,C1)=e(zxIDRH1(w,K),PKIDS)
e(zP,rxIDRP)
=e(zxIDRH1(w,K),xIDSP)e(zP,rxIDRP)
=e(xIDSH1(w,K)+rP,zxIDRP)
=e(SKIDSH1(w,K)+rP,zPKIDR)
=e(C2,T2)
本文考慮建立一個無證書的可搜索加密系統(tǒng)。它包含了四個參與者:密鑰生成中心、數(shù)據(jù)發(fā)送者、數(shù)據(jù)接收者和云服務(wù)器。
數(shù)據(jù)擁有者使用數(shù)據(jù)接收者的公鑰和自己的私鑰加密自己的數(shù)據(jù)和關(guān)鍵詞,并把產(chǎn)生的密文上傳到云服務(wù)器上。云服務(wù)器為數(shù)據(jù)發(fā)送者和數(shù)據(jù)接收者分別提供數(shù)據(jù)存儲和檢索服務(wù)。數(shù)據(jù)接收者想要搜索某個關(guān)鍵詞時,他用自己的私鑰和數(shù)據(jù)發(fā)送者的公鑰生成關(guān)鍵詞的陷門,并把陷門發(fā)送給云服務(wù)器。收到陷門后,云服務(wù)器會對加密的數(shù)據(jù)進行搜索,并把搜索結(jié)果返回給數(shù)據(jù)接收者。
密鑰生成中心、數(shù)據(jù)發(fā)送者和接收者都被認為是完全誠實的。云服務(wù)器是誠實但好奇的,即它會誠實地執(zhí)行描述的協(xié)議,但會嘗試推斷出一些用戶的敏感信息。
在無證書的密碼體制中,有類型Ι敵手AⅠ和類型Ⅱ敵手AⅡ。類型I敵手AⅠ不知道主密鑰,但是該敵手可以任意替換用戶的公鑰。類型Ⅱ敵手知道主密鑰,但是該敵手不能替換用戶的公鑰。本文給出的安全性模型類似于文獻[1],現(xiàn)給出安全性定義:如果沒有任何多項式有界的敵手以一個不可忽略的優(yōu)勢贏得游戲,則稱提出的方案在選擇關(guān)鍵詞攻擊下具有不可區(qū)分性。
可以通過下述挑戰(zhàn)者C和敵手之間的游戲來定義安全性。
(1) 游戲1:假設(shè)敵手是一個不誠實的用戶。
初始階段:在這個階段,C首先運行系統(tǒng)建立算法得到公共參數(shù)和主密鑰。C把公共參數(shù)返回給AⅠ,秘密地保存主密鑰。
階段 1: AⅠ以一種適應(yīng)性的方式進行多項式有界數(shù)目的詢問。
哈希詢問:AⅠ詢問關(guān)鍵詞wi的哈希隨機預(yù)言。為了回應(yīng)AⅠ,C把相應(yīng)的結(jié)果發(fā)送給AⅠ。
部分私鑰提取詢問:如果AⅠ詢問身份ID對應(yīng)的部分私鑰,C運行部分私鑰提取算法得到部分私鑰,并把結(jié)果發(fā)送給AⅠ。
公鑰詢問:收到身份ID的公鑰詢問,C返回相應(yīng)的公鑰給AⅠ。
替換公鑰詢問:AⅠ可以選擇一個隨機的值替換用戶的公鑰。
私鑰提取詢問:除了被挑戰(zhàn)的身份,AⅠ可以進行任意身份的私鑰提取詢問,C運行相應(yīng)的私鑰提取算法,并返回相應(yīng)的結(jié)果給AⅠ。
陷門詢問:除了被挑戰(zhàn)的身份,AⅠ可以進行任意關(guān)鍵詞的陷門詢問,C運行相應(yīng)的陷門生成算法,并返回相應(yīng)的陷門給AⅠ。
挑戰(zhàn)階段: 首先,AⅠ生成兩個長度相等的不同關(guān)鍵詞w0,w1。要求在階段1中,AⅠ從來沒有作過對w0或w1的詢問。然后,AⅠ把w0和w1發(fā)送給C。C隨機地選擇一個比特b∈{0,1},并運行加密的索引生成算法,生成挑戰(zhàn)密文。最后,C把挑戰(zhàn)密文返回給AⅠ。
階段2: 和在階段 1中一樣,AⅠ可以適應(yīng)性地作出多項式有界數(shù)目的詢問,限制是AⅠ不能作出對w0或w1的詢問。
猜測階段: ?、褫敵鲆粋€比特b′。如果b′=b,那么AⅠ贏得游戲。
(2) 游戲2:假設(shè)敵手是一個惡意但被動的KGC。
初始階段:在這個階段,C首先運行系統(tǒng)建立算法得到公共參數(shù)和主密鑰。
C把公共參數(shù)和主密鑰返回給AⅡ。
階段1: AⅡ以一種適應(yīng)性的方式進行多項式有界數(shù)目的詢問,包括哈希詢問、公鑰詢問、私鑰提取詢問和陷門詢問,C運行相應(yīng)的算法,并把相應(yīng)的結(jié)果返回給AⅡ。
挑戰(zhàn)階段: 首先,AⅡ生成兩個長度相等的不同關(guān)鍵詞w0,w1。要求在階段1中,AⅡ從來沒有作過對w0或w1的詢問。然后,AⅡ把w0和w1發(fā)送給C。C隨機地選擇一個比特b∈{0,1},并運行加密的索引生成算法,生成挑戰(zhàn)密文。最后,C把挑戰(zhàn)密文返回給AⅡ。
階段2: 和在階段 1中一樣,AⅡ可以適應(yīng)性地作出多項式有界數(shù)目的詢問,限制是AⅡ不能作出對w0或w1的詢問。
猜測階段: AⅡ輸出一個比特b′。如果b′=b,那么ΑⅡ贏得游戲。
在本文提出的方案中,密文是隨機生成的,敵手能夠區(qū)分兩個隨機生成密文的概率是可以忽略的,即兩種類型的敵手在游戲 1和游戲 2中的優(yōu)勢都是可以忽略的。通過類似的安全性游戲驗證,可以說明本文提出的方案在關(guān)鍵詞猜測攻擊下具有不可區(qū)分性。
本文基于無證書的公鑰密碼體制,提出了一個高效可行的公鑰可搜索加密方案。在方案中,數(shù)據(jù)發(fā)送者使用接收者的公鑰和自己的私鑰生成陷門,避免了密文的公共生成,可以抵抗云服務(wù)器發(fā)起的內(nèi)部關(guān)鍵詞猜測攻擊。