基于短語(yǔ)的可搜索對(duì)稱加密方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明屬于數(shù)據(jù)加密技術(shù)領(lǐng)域,具體涉及到短語(yǔ)的可搜索加密方法。
【背景技術(shù)】
[0002] 近年來(lái),隨著云計(jì)算技術(shù)的迅猛發(fā)展,大量云服務(wù)產(chǎn)品應(yīng)運(yùn)而生,并獲得廣泛 應(yīng)用。例如云網(wǎng)絡(luò)存儲(chǔ)工具Dropbox、亞馬遜簡(jiǎn)易儲(chǔ)存服務(wù)(Amazonsimplestorage service)和微軟的云計(jì)算平臺(tái)WindowsAzure等。它們?cè)谠贫朔?wù)器上為用戶保存數(shù)據(jù)和 搭設(shè)虛擬系統(tǒng)環(huán)境,用戶可以隨時(shí)隨地通過(guò)網(wǎng)絡(luò)對(duì)數(shù)據(jù)進(jìn)行操作,使用硬件資源。
[0003] 由于其方便快捷的特性,越來(lái)越多的用戶選擇將本地的數(shù)據(jù)迀移到云端服務(wù)器 中,以此減少本地管理數(shù)據(jù)的開(kāi)銷。由于數(shù)據(jù)存儲(chǔ)在第三方服務(wù)器脫離了用戶控制,用戶 數(shù)據(jù)可以被第三方服務(wù)器管理員及非法用戶訪問(wèn),容易造成數(shù)據(jù)泄露,對(duì)于一些敏感數(shù)據(jù) 存在嚴(yán)重的安全隱患。為了避免信息泄漏,保證數(shù)據(jù)的機(jī)密性,用戶通常對(duì)數(shù)據(jù)進(jìn)行必要的 加密,將數(shù)據(jù)以密文的形式存儲(chǔ)在云端服務(wù)器。但當(dāng)用戶需要獲取包含特定信息的文件時(shí), 如何在密文中檢索就成為難以解決的問(wèn)題。最簡(jiǎn)單的方法是將所有的密文文件下載到本地 進(jìn)行解密,在明文中檢索,但這種操作會(huì)造成大量不必要網(wǎng)絡(luò)開(kāi)銷。另一種簡(jiǎn)單方法是密鑰 和查詢短語(yǔ)發(fā)送至云端,在云端進(jìn)行解密檢索操作,這樣雖然減少了網(wǎng)絡(luò)開(kāi)銷,但也無(wú)疑破 壞了數(shù)據(jù)的機(jī)密性。
[0004] 為了在保證數(shù)據(jù)機(jī)密性的同時(shí)減少不必要的網(wǎng)絡(luò)開(kāi)銷,可搜索加密應(yīng)運(yùn)而生,并 在近幾年中得到了研宄者的廣泛研宄和發(fā)展。
[0005] 2012 年,Y.Tang,D.Gu,N.Ding,andH.Lu在"Phrasesearchoverencrypted datawithsymmetricencryptionscheme"中提出了一種兩階段的可搜索加密方案,第一 階段獲取并返回包含查詢短語(yǔ)中關(guān)鍵詞的文件標(biāo)識(shí)集合,第二階段客戶端發(fā)送查詢請(qǐng)求和 文件標(biāo)識(shí)列表,云端服務(wù)器根據(jù)查詢請(qǐng)求在列表中包含文件的索引中進(jìn)行精確檢索,最后 返回包含查詢語(yǔ)句的文件密文。其缺點(diǎn)在于客戶機(jī)與云端服務(wù)器需要進(jìn)行兩次交互才能完 成對(duì)密文的搜索,增大了網(wǎng)絡(luò)開(kāi)銷。
【發(fā)明內(nèi)容】
[0006] 本發(fā)明所要解決的技術(shù)問(wèn)題在于克服上述數(shù)據(jù)加密的缺點(diǎn),提供一種方法簡(jiǎn)單、 易于操作、保密性好的基于短語(yǔ)的可搜索對(duì)稱加密方法。
[0007] 解決上述技術(shù)問(wèn)題所采用的技術(shù)方案它是由下述步驟組成:
[0008] 1、客戶端初始化
[0009] 生成全局密鑰X、y、Z;選擇三個(gè)偽隨機(jī)置換《、0、P;選擇兩個(gè)偽隨機(jī)函數(shù)g、
[0010] 2、生成關(guān)鍵詞索引
[0011] 從待加密文件中抽取關(guān)鍵詞及其位置關(guān)系建立關(guān)鍵詞索引,關(guān)鍵詞索引為三級(jí)鏈 表結(jié)構(gòu),依次為:頭節(jié)點(diǎn)鏈表、后繼詞鏈表及關(guān)鍵詞位置鏈表;生成關(guān)鍵詞索引的方法為: 按關(guān)鍵詞在文檔集合中出現(xiàn)的先后順序建立頭節(jié)點(diǎn)鏈表,每個(gè)關(guān)鍵詞僅出現(xiàn)一次,且指向 一個(gè)后繼詞鏈表,即該關(guān)鍵詞是其所指向后繼詞鏈表的頭節(jié)點(diǎn);頭節(jié)點(diǎn)和其指向的后繼詞 鏈表中的每一個(gè)節(jié)點(diǎn)組成具有前后繼關(guān)系的關(guān)鍵詞對(duì);將每一個(gè)關(guān)鍵詞對(duì)在文檔中出現(xiàn)的 次數(shù)及位置記錄在關(guān)鍵詞位置鏈表中生成關(guān)鍵詞索引,后繼詞鏈表中每一個(gè)節(jié)點(diǎn)是其對(duì)應(yīng) 的每一個(gè)關(guān)鍵詞位置鏈表的頭節(jié)點(diǎn)。
[0012] 3、生成安全索引并上傳云端服務(wù)器
[0013] 分別對(duì)關(guān)鍵詞索引的頭節(jié)點(diǎn)鏈表、后繼詞鏈表、關(guān)鍵詞位置鏈表進(jìn)行加密生成安 全索引,并將其和用戶以自選加密方案加密的文檔一起上傳至云端服務(wù)器。
[0014] 4、生成查詢陷門(mén)并上傳云端服務(wù)器
[0015] 客戶查詢時(shí),客戶端將用戶的查詢短語(yǔ)生成查詢陷門(mén)并發(fā)送給云端服務(wù)器;生成 查詢陷門(mén)的方法為:將查詢語(yǔ)句拆分成關(guān)鍵詞集合{ Wl,《2, . . .,wn},用密鑰x和偽隨機(jī)函數(shù) 少對(duì)關(guān)鍵詞Wi生成死〇〉),用密鑰y和偽隨機(jī)函數(shù)g對(duì)關(guān)鍵詞Wi生成gy (Wi),用密鑰z和偽 隨機(jī)置換《對(duì)關(guān)鍵詞&生成《 z(Wi) ;R(w,)、8?、和《z(Wi)組合為一個(gè)三元組,所有 三元組組成查詢陷門(mén)如下:
[0017] 其中n為用戶輸入的查詢語(yǔ)句中關(guān)鍵詞個(gè)數(shù),并上傳至云端服務(wù)器。
[0018] 5、云端服務(wù)器執(zhí)行查詢并返回結(jié)果
[0019] 云端服務(wù)器接收到查詢陷門(mén)后,用查詢陷門(mén)中的三元組集合遍歷上述安全索引, 根據(jù)查詢陷門(mén)長(zhǎng)度將檢索操作分為單關(guān)鍵詞查詢,雙關(guān)鍵詞查詢和至少3個(gè)關(guān)鍵詞查詢; 單關(guān)鍵詞查詢查詢陷門(mén)長(zhǎng)度和雙關(guān)鍵詞查詢陷門(mén)長(zhǎng)度分別為1個(gè)三元組和1對(duì)三元組,進(jìn) 行一次查詢操作;至少3個(gè)關(guān)鍵詞查詢陷門(mén)長(zhǎng)度至少為3個(gè)三元組,每相鄰的兩個(gè)三元組做 一次雙關(guān)鍵詞查詢操作,對(duì)第n次的查詢操作的結(jié)果集合中的關(guān)鍵詞位置1減去n-1,再對(duì) 所有結(jié)果集合進(jìn)行交集運(yùn)算,生成一個(gè)最終結(jié)果集合;將最終的結(jié)果集合中所有的文件標(biāo) 識(shí)id(d)返回至客戶端。
[0020] 在本發(fā)明的步驟3中,對(duì)關(guān)鍵詞索引的頭節(jié)點(diǎn)鏈表進(jìn)行加密生成安全索引的方法 為:用密鑰x和偽隨機(jī)函數(shù)識(shí)對(duì)頭節(jié)點(diǎn)鏈表中第i個(gè)節(jié)點(diǎn)的關(guān)鍵字^生成爐、(u:):由密鑰 生成算法生成密鑰ky和密鑰r;用密鑰r和偽隨機(jī)數(shù)生成器生成的s1通過(guò)偽隨機(jī)置換0 得到;用全局密鑰y和偽隨機(jī)函數(shù)g生成gy(Wi);用gy(Wi)與密鑰心。和0?進(jìn) 行異或運(yùn)算,將結(jié)果與連接組成一個(gè)節(jié)點(diǎn)的加密結(jié)果,即
[0022] 其中1彡i彡頭節(jié)點(diǎn)鏈表長(zhǎng)度。
[0023] 對(duì)關(guān)鍵詞索引的后繼詞鏈表進(jìn)行加密生成安全索引的方法為:初始化一個(gè)計(jì)數(shù)器 c從1開(kāi)始,每加密一個(gè)節(jié)點(diǎn),計(jì)數(shù)器c加1 ;從第一個(gè)節(jié)點(diǎn)開(kāi)始加密,節(jié)點(diǎn)由頭節(jié)點(diǎn)鏈表節(jié) 點(diǎn)所指向時(shí),用指向它的頭節(jié)點(diǎn)鏈表節(jié)點(diǎn)中的吣(Si)作為前綴;節(jié)點(diǎn)由后繼詞鏈表節(jié)點(diǎn)所 指向時(shí),用偽隨機(jī)置換0和密鑰r對(duì)計(jì)數(shù)器c生成0jc)作為前綴。
[0024] 用全局密鑰z和偽隨機(jī)置換《對(duì)節(jié)點(diǎn)關(guān)鍵字生成《z(Wi,j),其中表示W(wǎng)i 的第j個(gè)后繼關(guān)鍵詞;由密鑰生成算法生成密鑰Sy和密鑰X;用偽隨機(jī)數(shù)生成器生成m并 由偽隨機(jī)置換P得到Px(m);由密鑰生成算法生成密鑰ku和密鑰r;用計(jì)數(shù)器c、密鑰r 和偽隨機(jī)置換0得到t(c+l);將上述五個(gè)部分按順序連接,使用指向該節(jié)點(diǎn)的上一個(gè)節(jié) 點(diǎn)中的密鑰kuH作為加密密鑰,用AES加密算法按照密碼分組鏈接模式進(jìn)行加密,將加密 結(jié)果與前綴吣(Si)或前綴0Jc)連接組成節(jié)點(diǎn)的加密結(jié)果,即
[0025] 0 ? | |ekij-JOzOy) ||Si〇| |px(m)||ki;J|| 0r(c+l))或
[0026] 0r(c) | | e ki j_1(a>z(wi j) | |si;0| | P x (m) | |ki;J| | 0 r(c+l))
[0027] 其中1<i<頭節(jié)點(diǎn)鏈表長(zhǎng)度,1<j<頭節(jié)點(diǎn)鏈表節(jié)點(diǎn)Wi的后繼詞鏈表長(zhǎng)度;重 復(fù)執(zhí)行以上操作直至后繼詞鏈表結(jié)束,完成后繼詞鏈表加密。
[0028] 對(duì)關(guān)鍵詞索引的關(guān)鍵詞位置鏈表進(jìn)行加密生成安全索引的方法為:初始化一個(gè)計(jì) 數(shù)器t從1開(kāi)始,每加密一個(gè)節(jié)點(diǎn),計(jì)數(shù)器t加1;從第一個(gè)節(jié)點(diǎn)開(kāi)始加密,節(jié)點(diǎn)由后繼詞鏈 表所指向時(shí),用指向它的后繼詞鏈表節(jié)點(diǎn)中的Pdm)作為前綴;節(jié)點(diǎn)由關(guān)鍵詞位置鏈表節(jié) 點(diǎn)所指向時(shí),用偽隨機(jī)置換P、密鑰生成算法生成的密鑰A和計(jì)數(shù)器t生成Px (t)作為 前綴。
[0029] 用密鑰生成算法生成密鑰Su和密鑰A,用偽隨機(jī)置換p和計(jì)數(shù)器t生成 P x(t+1),將節(jié)點(diǎn)中包含的文件標(biāo)識(shí)信息id(d),關(guān)鍵詞對(duì)位置信息1與上述密鑰Si,j和 P x(t+1)按順序連接;用指向該節(jié)點(diǎn)的上一個(gè)節(jié)點(diǎn)中的密鑰Si#作為加密密鑰,用AES加 密算法按照密碼分組鏈接模式進(jìn)行加密,將加密結(jié)果與前綴Px(m)或前綴Px (t)連接組 成一個(gè)節(jié)點(diǎn)的加密結(jié)果,即
[0030]px(m)| |esinacKd) | |1||si;J||Px(t+1))或
[0031] Px(t) | |e^^(icKd) | |1| |si;J| |P,(t+l))〇
[0032] 重復(fù)以上操作直至關(guān)鍵詞位置鏈表結(jié)束,完成關(guān)鍵詞位置鏈表加密。
[0033] 在本發(fā)明的步驟5中,雙關(guān)鍵詞查詢的方法為:
[0034] 查詢陷門(mén)中1對(duì)三元組
遍歷安 全索引的操作如下:
[0035] 雙關(guān)鍵詞查詢的查詢陷門(mén)為
[0036] 用仏(>^)在安全的頭節(jié)點(diǎn)鏈表中尋找對(duì)應(yīng)的節(jié)點(diǎn),用gy(Wl)與找到的節(jié)點(diǎn)異或 運(yùn)算獲得吣(Si)和密鑰ky,獲取吣(Si)在安全的后繼詞鏈表中尋找對(duì)應(yīng)的節(jié)點(diǎn),用密 鑰 解密節(jié)點(diǎn),獲取《z(Wi,」)、密鑰Si,Q、P,⑴、密鑰ki,」、0Jc+1);再比較《>2)與 ?z(Wu)是否相同;若不相同,使用0jc+l)在安全的后繼詞鏈表中尋找對(duì)應(yīng)節(jié)點(diǎn),并用密 鑰ki:j解密獲取新的《z(Wi,j)、新的密鑰Si,Q,新的Px(t)、新的密鑰ki:j、新的吣(c+1),比 較《z(wi+1)與新的《z(WiJ是否相同,循環(huán)以上操作直至匹配成功;若相同,使用Px(t) 在安全的關(guān)鍵詞位置鏈表中尋找對(duì)應(yīng)節(jié)點(diǎn),并用密鑰Sy解密,獲得文件標(biāo)識(shí)id(d)、關(guān)鍵 詞對(duì)位置1、新的Px(t)、Su,再用新的Px(t)在安全的關(guān)鍵詞位置鏈表中尋找對(duì)應(yīng)節(jié)點(diǎn), 并用Su解密,循環(huán)此操作直至安全的關(guān)鍵詞位置鏈表結(jié)束,所有獲得的文件標(biāo)識(shí)id(d),