左 毅 陳 勇 姚 雪
(1. 重慶科技學院 信息化辦公室, 重慶 401331; 2. 重慶師范大學 計算機與信息科學學院, 重慶 401331; 3.重慶科技學院 數(shù)理與大數(shù)據(jù)學院, 重慶 401331)
安全高效的云存儲服務始終是云計算研究的核心問題之一[1]。目前,在云服務器不可信的情況下,支持關鍵詞搜索的公鑰加密方案研究已成為熱點。通常,可搜索加密方案的基本策略是:發(fā)送者將加密數(shù)據(jù)和關鍵詞上傳至云服務器,數(shù)據(jù)用戶發(fā)送一個由數(shù)據(jù)擁有者授權的關鍵詞陷門給云服務器,云服務器執(zhí)行關鍵詞密文和搜索陷門的匹配算法。若云服務器判斷密文和陷門相互匹配,則將密文數(shù)據(jù)發(fā)送給數(shù)據(jù)用戶,其間需確保云服務器無法獲得關鍵詞和明文數(shù)據(jù)的任何信息。
Song等人首次提出了一個具體的可搜索加密方案(BOOP-PEKS)[2]。其中,云服務器利用陷門信息與數(shù)據(jù)庫中所有密文關鍵詞逐一進行匹配比對:若匹配成功,則表明檢索到關鍵詞,隨即將目標文件返回給數(shù)據(jù)使用者;若匹配不成功,則表明服務器上未存儲相關文件。Golle等人討論了如何將關鍵詞連接后進行搜索,并提出支持多關鍵詞連接的可搜索加密方案[3]。Ballard提出利用雙線性映射、支持關鍵詞連接的可搜索加密方案,其中關鍵詞長度是固定的[4]。Boneh考慮了郵件加密環(huán)境,提出單關鍵詞加密搜索方案[5]。李真等人在半誠實的云服務器環(huán)境下弱化第三方的功能,利用雙線性對的性質,在不增加額外交互的前提下解決了加密文檔的密鑰分發(fā)問題[8]。Miao等人提出了一種多關鍵詞搜索加密方案,該方案支持多關鍵詞搜索,同時具有密文的完整性驗證能力[9]。郭麗峰等人引入了發(fā)送者和服務器的身份驗證環(huán)節(jié),用于抵制離線關鍵詞的猜測攻擊[10]。張鍵紅等人提出可驗證的多關鍵詞搜索加密方案,在支持多關鍵詞搜索的同時,保證了文件的前向安全性[11]。
在現(xiàn)有各方案的基礎上,我們設計了一種面向云存儲的多關鍵詞可驗證搜索加密方案。本方案效率較高,且支持對關鍵詞和文檔的增減。
在云環(huán)境下,系統(tǒng)模型中主要包含以下4個實體部分:參數(shù)生成和審計中心;云服務器;數(shù)據(jù)擁有者;數(shù)據(jù)用戶。系統(tǒng)模型結構如圖1所示。參數(shù)生成和審計中心是誠實的,其功能是初始化系統(tǒng)參數(shù)以及對返回的搜索文檔進行驗證。云服務器可以存儲加密文檔和加密索引,同時對數(shù)據(jù)用戶提交的查詢請求予以響應,通過安全的匹配查詢驗證后返回查詢結果,并提交給審計中心,再經(jīng)驗證后返回給數(shù)據(jù)用戶。數(shù)據(jù)擁有者負責為將要上傳的文檔選取對應的關鍵詞,生成加密文檔和文檔關鍵詞索引并將其打包后發(fā)送到云服務器,同時為數(shù)據(jù)用戶提供查詢授權令牌的功能。數(shù)據(jù)用戶,可以向數(shù)據(jù)擁有者索要關鍵詞,生成搜索令牌,并將令牌提交給云服務器,最終得到驗證后的搜索結果。
圖1 系統(tǒng)模型結構
模型中基本符號的定義如表1所示。
表1 模型基本符號
設G1、G2是階為素數(shù)P的乘法循環(huán)群,g是G1的生成元,則雙線性映射e:G1×G2→G2具有以下3個條性質:
(1) 雙線性。對于任意元素,u,v∈G1,且a,b∈Zp,有e(ua,vb)=e(u,v)ab。
(2) 非退化性。e(g,g)≠1 。
(3) 可計算性。對于任意元素,u、v∈G1,e(u,v)的計算很簡單。
輸入一個安全參數(shù)k,調用初始化函數(shù)setup(k)算法,生成雙線性對加密系統(tǒng)中的參數(shù),如P、G1、g1、G2、g2、e等。P是一個大系數(shù),e為雙線性映射(e:G1×G2→G2),g1,g2為循環(huán)群G1、G2的生成元。在方案的后續(xù)設計中,需要用到2個哈希函數(shù)(H1、H2):
H1:{0,1}*→G1
H2:{0,1}*→Zp
系統(tǒng)的公開參數(shù)有:Pa={P,G1,g1,G2,g2,e,H1,H2}。
(1) 數(shù)據(jù)擁有者的密鑰對。隨機選擇d∈Zp為私鑰,對應的公鑰為:
(1)
(2) 驗證用的密鑰對。隨機選擇s∈Zp為私鑰,對應的公鑰為:
(2)
(3) 云服務器方的密鑰對。隨機選擇c∈Zp為私鑰,對應的公鑰為:
(3)
這里,PKd、PKc、PKs是需要公開的公鑰,私鑰d、c、s歸各方私密保存。
數(shù)據(jù)擁有者利用一個可靠的常用對稱加密算法E(ek,F(xiàn)i),i∈{1,…,n},計算每個文件Fi的密文Ci:
Ci=E(ek,F(xiàn)i)
(4)
同時,利用文件標簽和哈希函數(shù)指針計算每個文件驗證所所需的簽名:
(5)
這里FIDi為Fi的文件標簽,H1(FIDi)表示針對文件標簽的H1哈希函數(shù),H2(Ci)表示針對密文的H2哈希函數(shù)。
每個文件都有m個關鍵詞,即W={w1,…,wm};因此,以數(shù)據(jù)擁有者的私鑰d為種子,利用哈希函數(shù)H1生成關鍵詞搜索索引:
(6)
(7)
式中:i=1,2,…,n;j=1,2,…,m。
文件Fj的總體索引為:
(8)
全部文件的索引集合則為:
I={I1,…,Ij,…,In}
(9)
數(shù)據(jù)擁有者將生成的全部文檔搜索信息包(C,SIG,I)上傳到云服務器端,存儲加密的文件,并支持多關鍵詞的搜索和密文驗證。
針對當前搜索產(chǎn)生一個隨機數(shù)α,α∈Zp,生成令牌:
(10)
(11)
得到令牌T,T=(t0,t1,…,ti,…,tm);最后,由數(shù)據(jù)擁有者將令牌T發(fā)送給用戶。
用戶得到搜索令牌T后即可上傳給云服務器,然后運行文檔進行搜索,進而獲得關鍵的文檔密文。云服務器對令牌進行搜索運算:
輸入令牌(T,L),搜索信息包(C,Sig,I),公開參數(shù)為Pa;
輸出搜索到的密文集合C′和文件標準參數(shù)PID′,算法如下:
C′=Φ;PID′=Φ
forj=1 tondo
then
C′=C′∪{Cj}
FID′=FID′∪{FIDj}
end if
end for
return C′ and FID′
審計方對云服務器準備返回給用戶的密文進行審核,驗證其是否被篡改,以保證搜索結果的可靠性[11]。其驗證過程如下:
(1) 審計方選擇一組隨機數(shù){y1,…,yr}發(fā)給云服務器,其中r為C′集合中元素的個數(shù) 。
(2) 云服務器將計算的φ值返回給審計者,其算式如式(12):
(12)
(3) 審計者對返回的φ值進行驗證,其算式如式(13):
(13)
若式(13)成立,則表明文檔是可靠的。最后,將沒有被篡改的加密文檔返回給數(shù)據(jù)用戶。
若模型的各參與方遵循方案設計的所有環(huán)節(jié),那么搜索算法就可以充分保證已獲正確授權用戶的權益,為其提供相應關鍵詞的正確密文。這是因為,用令牌T對加密文件Fi進行搜索,進行了以下匹配對比:
(14)
(15)
該方案的安全性依賴于離散對數(shù)的安全性,在文件索引中借助數(shù)據(jù)擁有者的私鑰構建索引,以保證索引不可偽造。同時,在搜索令牌的生成當中,即使檢測的關鍵詞相同,若隨機參數(shù)不同其每次搜索的令牌也會不同,因此云服務器方不能猜測出關鍵詞的內容。此完整性驗證方案的算法基于Shacham 和 Waters 的遠程數(shù)據(jù)完整驗證方案[6],在安全模型下被證明可以抵制云服務器的篡改和刪除攻擊。
在生成加密文件、關鍵詞搜索索引以及搜索關鍵詞的索引令牌時,文件和關鍵詞的編號均可以方便地加以擴展。其中,只是增加了檢索結果的數(shù)量,而不會影響已有的檢索結果。
經(jīng)過本次研究,構造了一個支持加密文檔驗證的多關鍵詞搜索公鑰加密方案。本方案具有較高的安全性,能夠抵制離線狀態(tài)下對關鍵詞的猜測和攻擊,且對文檔和關鍵詞的修改具有良好的適應性。不足之處是,在搜索中需要提供關鍵詞的位置信息,這給系統(tǒng)的安全性帶來隱患。如果能夠構造一個無需關鍵詞位置信息的方案,則更符合實際應用。一種可行的方案是,利用布隆過濾器[12]來實現(xiàn)位置信息的傳遞。這一點將在后期研究中予以實現(xiàn)。