一種支持動(dòng)態(tài)更新及多關(guān)鍵字安全排序的可搜索加密方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及網(wǎng)絡(luò)信息安全技術(shù)領(lǐng)域,特別是一種支持動(dòng)態(tài)更新及多關(guān)鍵字安全排 序的可搜索加密方法,可用于對(duì)云存儲(chǔ)數(shù)據(jù)下的加密文件進(jìn)行高效檢索和更新。
【背景技術(shù)】
[0002] 隨著云存儲(chǔ)技術(shù)的迅猛發(fā)展,許多企業(yè)和個(gè)人都會(huì)使用云存儲(chǔ)技術(shù)把自己內(nèi)部數(shù) 據(jù)進(jìn)行外包,為我們節(jié)省了一定的設(shè)備資源。運(yùn)用云服務(wù)器強(qiáng)大的數(shù)據(jù)處理能力,能夠在客 戶端節(jié)省一定的計(jì)算資源。但是,為了保障數(shù)據(jù)的機(jī)密性,在用戶將數(shù)據(jù)外包之前,都要對(duì) 數(shù)據(jù)進(jìn)行加密,從而云服務(wù)器不可能從密文中得到有效的信息。
[0003] 但是,當(dāng)大量的加密文件存儲(chǔ)在云服務(wù)器上,如果想要檢索一個(gè)包含特定關(guān)鍵字 的文件,把文件全部下載下來進(jìn)行解密是不能接受的。因此,需要對(duì)上傳到云服務(wù)器的文件 進(jìn)行提前處理。上傳到服務(wù)器之前,根據(jù)文件集合生成索引,由索引能夠快速的檢索到指定 的文件。對(duì)索引進(jìn)行可搜索加密,文件進(jìn)行對(duì)稱加密。此時(shí),加密的索引和文件上傳到云服 務(wù)器。如果要檢索特定的關(guān)鍵字,服務(wù)器會(huì)在索引上進(jìn)行計(jì)算,并且返回相應(yīng)的密文。但是, 如果要更新一個(gè)文件時(shí),需要把索引下載到本地,全部更新一遍,效率不高。而且現(xiàn)有的可 搜索加密技術(shù)大部分是針對(duì)單關(guān)鍵字設(shè)計(jì)的,不能滿足用戶的檢索需求。并且在服務(wù)器返 回檢索結(jié)果時(shí),用戶希望看到最符合檢索關(guān)鍵字的前k個(gè)文件,而大多數(shù)的可搜索加密技 術(shù)不支持對(duì)檢索結(jié)果進(jìn)行排序。因此,有必要提出一種高效率進(jìn)行更新,同時(shí)支持多關(guān)鍵字 檢索,返回top-k文件的可搜索加密方法。
【發(fā)明內(nèi)容】
[0004] 針對(duì)以上現(xiàn)有技術(shù)中的不足,本發(fā)明的目的在于提供一種支持動(dòng)態(tài)更新、多關(guān)鍵 字檢索并且實(shí)現(xiàn)安全排序的可搜索加密方法,本發(fā)明的技術(shù)方案如下:
[0005] 一種支持動(dòng)態(tài)更新及多關(guān)鍵字安全排序的可搜索加密方法,其包括以下步驟:
[0006] 101、初始化,在云存儲(chǔ)的客戶端,用戶隨機(jī)生成密鑰其中%,2為 (d+1)X(d+1)的矩陣,S為(d+1)維的二進(jìn)制向量,d為字典中關(guān)鍵字的個(gè)數(shù),K為加密文 件的對(duì)稱密鑰;
[0007] 102、當(dāng)生成步驟101的密鑰后,用戶端根據(jù)字典和紅黑樹結(jié)構(gòu)生成待上傳文件集 合的未加密索引,其中上傳文件集合由待上傳文件匕組成,其中還生成了文件的標(biāo)識(shí)符即 標(biāo)志位數(shù)字;
[0008] 103、對(duì)步驟102中未加密索引的待上傳文件集合進(jìn)行非對(duì)稱標(biāo)量積索引加密,生 成節(jié)點(diǎn)的索引加密向量I;
[0009] 104、文件加密,用戶端完成了對(duì)待上傳文件集合的索引加密后,對(duì)每個(gè)待上傳文 件進(jìn)行加密,密鑰為K,加密算法采用對(duì)稱加密算法;
[0010] 105、數(shù)據(jù)外包,將步驟103加密之后的索引和對(duì)稱加密后的待上傳文件上傳到云 服務(wù)器上,云服務(wù)器會(huì)根據(jù)用戶生成的陷門,在加密數(shù)據(jù)上進(jìn)行計(jì)算;
[0011] 106、當(dāng)用戶端用戶進(jìn)行多關(guān)鍵字檢索時(shí),用戶生成查詢向量并進(jìn)行加密后,和紅 黑樹的子節(jié)點(diǎn)進(jìn)行匹配,根據(jù)葉子節(jié)點(diǎn)存儲(chǔ)的詞頻進(jìn)行計(jì)算得分,實(shí)現(xiàn)檢索時(shí)返回t〇p-k 文件,即與要搜索的關(guān)鍵字最相近的前k個(gè)文件;
[0012] 107、當(dāng)有已經(jīng)上傳的文件需要增加和刪除時(shí),用戶向云服務(wù)器發(fā)送請(qǐng)求,包含操 作的種類和要進(jìn)行操作的文件的標(biāo)識(shí)符,增加和刪除的文件即為更新文件,云服務(wù)器根據(jù) 文件的標(biāo)識(shí)符進(jìn)行結(jié)構(gòu)更新,但不訪問節(jié)點(diǎn)的索引加密向量I,同時(shí)返回更新文件所關(guān)聯(lián)的 節(jié)點(diǎn)和對(duì)應(yīng)的索引加密向量I;根據(jù)返回的節(jié)點(diǎn)和要更新文件的文件向量,用戶端在本地 重新計(jì)算每個(gè)節(jié)點(diǎn)的向量,進(jìn)行加密和結(jié)構(gòu)更新,生成索引加密向量II;用戶端上傳加密向 量,服務(wù)器復(fù)制更新之后的索引加密向量II到加密索引中。
[0013] 進(jìn)一步的,步驟102中用戶端根據(jù)紅黑樹法生成待上傳文件集合的未加密索引的 步驟具體:
[0014] 2a)根據(jù)用戶端待上傳文件集合中的每個(gè)待上傳文件匕的關(guān)鍵字,建立一個(gè)字典, 所述字典為所有待上傳文件匕去重之后的關(guān)鍵字集合;
[0015] 2b)根據(jù)步驟2a)中字典的關(guān)鍵字和該關(guān)鍵字在待上傳文件Fi*的詞頻,對(duì)每個(gè) 待上傳文件Fi建立d+1維列向量P,d為字典中的關(guān)鍵字個(gè)數(shù),Pj為關(guān)鍵字Wj的詞頻,且 Pd+1= 1,如果,P盧0則說明文件Fi中含有關(guān)鍵字Wy如果匕=0,則說明文件文件F# 不含有關(guān)鍵字Wj;
[0016] 2c)根據(jù)步驟2b)對(duì)每個(gè)待上傳文件Fi建立的列向量P,及步驟2a)中建立的關(guān)鍵 字字典建立紅黑樹,紅黑樹的葉子節(jié)點(diǎn)存放的是文件的詞頻Pj,而內(nèi)部節(jié)點(diǎn)存放的是兩個(gè) 待上傳文件匕列向量的或運(yùn)算結(jié)果,葉子節(jié)點(diǎn)的父親節(jié)點(diǎn)的計(jì)算規(guī)則是:如果葉子節(jié)點(diǎn)向 量不為〇,則取1 ;如果為〇,則取〇,內(nèi)部節(jié)點(diǎn)為〇, 1向量,如果內(nèi)部節(jié)點(diǎn)的向量某一位為1, 表示至少有一條路線從此內(nèi)部節(jié)點(diǎn)到某個(gè)葉子節(jié)點(diǎn),這個(gè)葉子節(jié)點(diǎn)代表存儲(chǔ)有標(biāo)志位1的 關(guān)鍵字的文件,該紅黑樹就是未加密的索引。
[0017] 進(jìn)一步的,步驟103中非對(duì)稱標(biāo)量積索引加密的步驟具體為:
[0018] 3a)依據(jù)密鑰中二進(jìn)制(d+1)維向量S中不同位置的值,對(duì)紅黑樹的每個(gè)節(jié)點(diǎn)進(jìn)行 隨機(jī)拆分,拆分之后為兩個(gè)d+1維向量pi及p2,當(dāng)向量Sj= 1,即節(jié)點(diǎn)的第j位可以拆分, 拆分之后兩個(gè)隨機(jī)數(shù)之和等于拆分之前第j位的值,即pl,p2^=pj當(dāng)向量S某一位j為 〇,即節(jié)點(diǎn)的第j位不可以拆分,即plj=p2」=pj;
[0019] 3b)對(duì)每個(gè)節(jié)點(diǎn)存放的兩個(gè)向量pl,p2進(jìn)行非對(duì)稱標(biāo)量積加密:(M^ql,M2Tq2)為1 表示矩陣札的轉(zhuǎn)置,M2T表示矩陣M2的轉(zhuǎn)置;
[0020] 3c)此時(shí)加密之后的紅黑樹就是加密索引。
[0021] 進(jìn)一步的,步驟106的具體步驟為:
[0022] 6a)當(dāng)用戶端用戶進(jìn)行文件檢索時(shí),用戶根據(jù)字典和要查詢的關(guān)鍵字在本地生成 d維的本地查詢向量q,及隨機(jī)數(shù)r,t,生成d+1維本地查詢向量為(rq,t),qj= 1表示用 戶要查詢%,依據(jù)二進(jìn)制(d+1)維向量S中不同位置的值,對(duì)查詢向量進(jìn)行隨機(jī)拆分,拆分 之后為兩個(gè)d+1維向量ql,q2,當(dāng)向量S某一位j為0,即節(jié)點(diǎn)的第j位可以拆分,拆分之后 兩個(gè)隨機(jī)數(shù)之和等于拆分之前第j位的值,即qlj+q2j=q」,當(dāng)向量S某一位j為1,即節(jié) 點(diǎn)的第j不可以拆分,qlj=q2」=qj;
[0023]6b)對(duì)拆分后的兩個(gè)向量ql,q2進(jìn)行非對(duì)稱標(biāo)量積加密,此時(shí)生成陷門T的第一部 分I\=(MAl,MA2),Mr1表示矩陣Mi的逆,M,表示矩陣M2的逆;
[0024] 6c)用戶根據(jù)字典中的逆向文件頻率IDF生成d維的查詢向量Q,隨機(jī)數(shù)r,t, 查詢向量為(rQ,t),要查詢的關(guān)鍵字、的逆向文件頻率,此查詢向量用作計(jì)算葉子 節(jié)點(diǎn)所存儲(chǔ)的文件的得分,和之前向量q的拆分和加密一樣,生成陷門的第二部分1~2 = (M^QLM^Q〗);Q1和Q2為拆分之后的(d+1)維查詢向量;
[0025] 6d)加密之后的查詢向量和索引中的每個(gè)節(jié)點(diǎn)進(jìn)行相乘,如果滿足用戶端待查詢 格式,則說明該內(nèi)部節(jié)點(diǎn)中的子孫結(jié)點(diǎn)可能含有所要查詢的多關(guān)鍵字,繼續(xù)在孩子節(jié)點(diǎn)進(jìn) 行計(jì)算,直到找到葉子