本發(fā)明涉及計算機技術中的信息安全領域,尤其涉及一種基于屬性加密的密文索引構造方法及其查詢方法。
背景技術:
倒排索引技術作為目前應用最為廣泛的全文索引技術,其索引結構類似于書本的目錄結構,整個索引以“單詞-指針”對的形式來進行構建,索引由“單詞”和“指針”兩部分組成,“單詞”包括了被索引文檔里的所有單詞,“指針”則包括了包含該單詞的文檔以及在單詞文檔中出現(xiàn)的位置。用戶通過單詞進行目標文檔的查找,通過單詞對應的指針獲取目標文檔。
倒排索引結構并未對索引進行任何的安全處理,信息容易被泄露,獲取索引文件或者在網(wǎng)絡上截取到了查詢信息,整個索引中的信息就會暴露。因此,普通的倒排索引無法適用于高安全應用的場景。在有安全需求的場景下,通常對索引文件加密或者對索引的內容加密來保護索引信息。
在中國發(fā)明專利說明書cn200910063738.1中公開了一種基于分塊組織的密文索引結構及其管理方法、cn200910061325.x中公開了一種基于密文的安全全文索引和檢索系統(tǒng)、cn201310616577.0公開了一種面向云存儲的密文搜索認證方法、cn201510964712.x中公開了一種面向云存儲并基于全同態(tài)密碼的密文全文檢索方法及系統(tǒng).。上述專利涉及了倒排文檔的密文索引結構,但它們的安全性有待提高。
索引信息加密后,為了能夠進行安全檢索,在用戶發(fā)起查詢請求時,需要對查詢關鍵詞進行加密后再進行搜索,上述的發(fā)明專利和現(xiàn)有的技術雖然對索引進行了加密,在進行查詢時也對查詢關鍵詞進行了加密,但由于采用了相同的密鑰,同一關鍵詞在任何時間都加密成了相同的密文,這導致無法抵抗統(tǒng)計分析。
屬性加密在加密時把與本次加密相關的加密用戶的身份或者加密內容的屬性與要加密的文本一起進行加密,這樣可以做到同一關鍵詞在不同是時間或者對不同的用戶其加密結果是不同的,從而能夠保證密文索引的安全。
技術實現(xiàn)要素:
本發(fā)明的目的旨在解決上述倒排索引結構安全性差無法適合高安全場景的問題,從而提供一種基于屬性加密的密文索引構造方法及其查詢方法。
為實現(xiàn)上述目的,在第一方面,本發(fā)提供了一種基于屬性加密的密文索引構造方法,該方法包括以下步驟:
1)將每個待歸檔文檔劃分成不同的域;
2)對每個域建立密文索引,具體包括:
2.1)將當前要建立索引的域進行token化,然后對每一個token化的token關鍵詞進行屬性加密,該步驟具體包括如下:
2.1.1)利用密鑰生成公式subkeygenerate(w,kpriv,pw_fld)生成加密密鑰ksub,其中w為被加密的token文本,kpriv為索引加密主密鑰,pw_fld為w的屬性集合,pw_fld包含多個與當前文檔相關屬性,包括文檔擁有者、文檔標題、文檔生成時間、和文檔訪問列表;
2.1.2)使用加密密鑰ksub和屬性集合pw_fld,利用可配置的加密算法把token關鍵詞加密以獲得關鍵詞密文ekey;
2.2)加密當前域的長度、域地址、文檔地址以生成密文域信息efield;
2.3)把密文域信息efield和當前域的所有關鍵詞密文ekey合并成密文e后插入密文索引文件;
3)采用可配置的加密算法對文檔內容加密;
4)把密文索引中文檔地址與密文文檔關聯(lián)以構造密文倒排文檔索引;
5)把密文索引和加密后的密文保存在云服務器上。
進一步地,所述步驟1)中的待歸檔文檔的格式為txt、doc、docx、pdf、wps、xml、html、rtf、ppt、或pptx。
第二方面,本發(fā)明還提供了一種還提供了一種基于屬性加密的密文索引查詢方法。該方法包括以下步驟:
1)對用戶輸入的查詢語句進行語法和語言處理,獲取關鍵詞列表和token流;
2)根據(jù)獲取的關鍵詞列表生成查詢樹,所述查詢樹具有key1op1key2op2…keyn形式,其中op可以是and或者or,keyi為第i個查詢關鍵詞;
3)對token流中的每一個token進行處理,其步驟如下:
3.1)構造所有關鍵詞的全集字典向量集合s,并設定初始化屬性表達式v,所述初始化屬性表達式子v為空,其維數(shù)比s維數(shù)多1;
3.2)對每一個token進行關鍵詞keyi的查詢,如果查詢keyi在集合s中,則把屬性表達式v中與集合s相對應的位置置1;
3.3)判斷關鍵詞后面的關系運算符,如果為and,則把屬性表達式v最后一維置1,如果為or,則把屬性表達式v最后一維置0;
4)利用密鑰生成公式subkeygenerate(w,kpriv,pw_fld)生成加密密鑰ksub,其中w為被加密的token文本,kpriv為索引加密主密鑰,pw_fld為w的屬性集合,pw_fld包含多個與當前文檔相關屬性,包括文檔擁有者、文檔標題、文檔生成時間、文檔訪問列表等。
5)利用ksub加密屬性表達式v,獲取當前查詢的餡門tq。
6)服務器對每一個密文索引中的數(shù)據(jù)e據(jù)公式dec(e,ksub,tq)進行計算,其中dec的加密方法為:使用加密密鑰ksub和餡門tq,利用可配置的加密算法把密文索引e進行反向加密。
7)返回計算結果為1的加密文檔集合。
進一步地,所述步驟7)中返回查詢結果為1的加密文檔集合按照打分高低進行排序,所述打分高低與查詢的相關性和域所設置的權值相關。
進一步地,所述步驟1)對用戶輸入的查詢語句進行語法和語言處理具體包括:對查詢語句進行文本分詞、合并同義詞和去除停用詞。
進一步地,所述步驟7)返回的加密文檔格式為txt、doc、docx、pdf、wps、xml、html、rtf、ppt或pptx。
本發(fā)明的有益效果:采用倒排文檔索引與屬性的加密方法進行有機結合構造了一個具有安全性的密文索引結構。對文檔提取關鍵詞后進行屬性加密,再把加密后的關鍵詞存入密文倒排文檔索引,用戶查詢文檔時,根據(jù)用戶屬性信息和用戶提供的關鍵詞信息構造陷門,服務器端根據(jù)陷門進行計算,查詢出與當前查詢屬性和關鍵詞相關的文檔。
屬性加密在加密時把與本次加密相關的加密用戶的身份或者加密內容的屬性與要加密的文本一起進行加密,這樣可以做到同一關鍵詞在不同是時間或者對不同的用戶其加密結果是不同的,從而能夠保證密文索引的安全。
附圖說明
圖1是本發(fā)明實施例的索引構造和查詢的應用系統(tǒng)的結構框圖;
圖2是本發(fā)明實施例的密文索引的構造方法;
圖3是本發(fā)明實施例的密文索引的查詢方法。
具體實施方式
為了使本技術領域的人員更好的理解本發(fā)明實施例中的技術方案,并使本發(fā)明實施例的上述目的、特征和優(yōu)點能夠更加明顯易懂,下面通過附圖和實施例,對本發(fā)明的技術方案做進一步的詳細描述?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其它實施例,都屬于本發(fā)明保護的范圍。
圖1是本發(fā)明實施例的索引構造和查詢的應用系統(tǒng)的結構框圖。
如圖1所示,本發(fā)明實施例的索引構造和查詢的應用系統(tǒng)如圖1所示,其中索引構造過程(虛線部分)由以下四個部分組成。
1)提供被索引文本文件,包括txt、doc、docx、pdf、wps、xml、html、rtf、ppt、pptx等。被索引文件中的文本被提取出來之后將交給文本分析器進行分析及預處理。
2)被索引文本經(jīng)過詞法分析和語言處理形成一系列的關鍵詞。處理過程包括文本分詞,合并同義詞,去除停用詞等。形成的詞將首先被加密,然后將密文交給索引創(chuàng)建器進行索引創(chuàng)建。
3)經(jīng)過索引創(chuàng)建形成詞典及反向索引表。所有由步驟2)處理后形成的詞都將加入到詞典中,并更新反向索引表。
4)通過索引存儲將索引寫入磁盤。為了提高檢索的效率,步驟3)所形成的詞典和反向表會先存儲在內存中,當退出索引或者調用寫入方法時才會把索引從內存中寫入磁盤。
而搜索過程(實線部分)主要由以下7個部分組成:
1)用戶輸入查詢語句。接口一般是以輸入框的形式提供給用戶,如搜索引擎網(wǎng)站。
2)對戶輸入查詢語句經(jīng)過語法和語言處理,得到一系列的關鍵詞列表。這一步與索引過程的第2)步是一樣的,都是對文本進行預處理,得到下一步需要的數(shù)據(jù)。
3)通過語法分析得到一個查詢樹。輸入查詢語句通??梢钥醋魇且粋€查詢表達式,其中包含“或”、“與”、“非”三種邏輯關系,通過對查詢表達式的解析可以得到一個用于查詢的查詢樹。由于是進行密文檢索,因此查詢的關鍵詞會通過索引建立時一樣的加密過程來進行加密,在后來的過程中都將以密文形態(tài)進行查詢。
4)通過索引存儲將索引讀入到內存。
5)利用查詢數(shù)構造餡門搜索索引,從而得到每個詞的文檔鏈表,對文檔鏈表進行交、差或并操作,得到結果文檔。對文檔鏈表進行的操作由查詢樹決定。
6)將搜索到的結果文檔解密并按照打分高低進行排序。解密需要用戶提供解密密鑰,結果文檔的得分高低由多種因素決定,比如與查詢的相關性,域所設置的權值等,具體的打分規(guī)則后面會詳細介紹。
7)返回結果給用戶。
其中密文索引的構造流程,詳細由圖2所示,具體描述如下。
對每一個要歸檔的文檔,依據(jù)自然段落把文檔劃分成多個域,針對每一域分別建立索引,每一個域建立索引的過程如下:首先對每一個域進行分詞處理,即將域內文本token化,然后對每個token化的關鍵詞進行屬性加密,生成關鍵詞密文ekey,加密密鑰ksub由主密鑰根據(jù)子密鑰生成方法subkeygenerate(w,kpriv,pw_fld)生成,其中w為被加密的token文本,kpriv為索引加密主密鑰,pw_fld為w的屬性集合,pw_fld包含多個與當前文檔相關屬性,包括文檔擁有者、文檔標題、文檔生成時間、文檔訪問控制列表。采取此策略后,對于不同的token,將會以不同的密鑰進行加密,這樣就可以做到一詞一密,有利于索引信息的保護。當加密完域內所有token化的關鍵詞后,采用可配置的加密算法對當前域的基本信息進行加密,包括域地址、域的長度、文檔的地址,加密后生成密文域信息efield。然后把密文域信息efield和當前域的所有關鍵詞密文ekey一起插入到密文索引中(最初密文索引是空的)。按照上述方法處理文檔的每一個域;所有的域處理完成后,再采用可配置的加密算法加密整個文本內容,并給加密后的文檔分配存儲地址;同時把文檔地址與每個域中的文檔地址進行關聯(lián),關聯(lián)后密文索引即構造成功。最后把加密后的文檔和密文索引分別進行保存。
當用戶發(fā)起密文搜索請求后,其搜索流程如圖3所示,具體描述如下。
查詢過程首先對查詢語句進行預處理,對于查詢語句的處理與索引過程中對文本的處理過程基本一致,主要是進行分詞、去重、去除停用詞等幾個步驟,然后根據(jù)查詢語法生成一顆查詢樹用作結果處理,支持交和并兩種處理方式。得到查詢語句的token流之后,對流中的每一個token進行處理。首先判斷token是否為空,如果為空,則根據(jù)查詢樹整理的查詢結果,得到最終結果集并返回給用戶。如果不為空,則首先判斷該查詢token所在的域是否被加密,若被加密則需要對token進行加密處理,其過程是采用屬性加密通過構造餡門的方式來進行,其方法如下:1)首先造所有關鍵詞的全集字典向量集合s,并設定初始化屬性表達式v,所述初始化屬性表達式子v為空,其維數(shù)比s維數(shù)多1;2)對每一個token進行關鍵詞keyi的查詢,如果查詢keyi在集合s中,則把屬性表達式v中與集合s相對應的位置置1;3)判斷關鍵詞后面的關系運算符,如果為and,則把屬性表達式v最后一維置1,如果為or,則把屬性表達式v最后一維置0。4)然后通過一個子密鑰生成函數(shù),生成一個token的加密子密鑰,即餡門tq,tq中包含了查詢的屬性信息。再用此子密鑰對token和餡門tq進行反向加密,即進行查詢,查詢結果為1的文檔即為符合用戶查詢要求的文檔。
本發(fā)明采用的這種安全索引方法可以很好的保持倒排文檔的特性,即便是加密后的索引信息,查詢時可以通過普通的倒排文檔查詢方式來進行查詢,即類似于查字典的過程,通過二級或者是多級索引快速地定位到密文所在位置并得到文檔鏈表。這樣的處理方式可以保證即使在數(shù)據(jù)量比較大的時候也可以有著比較高的查詢效率及準確率。
以上所述的具體實施方式,對本發(fā)明的目的、技術方案和有益效果進行了進一步詳細說明,所應理解的是,以上所述僅為本發(fā)明的具體實施方式而已,并不用于限定本發(fā)明的保護范圍,凡在本發(fā)明的精神和原則之內,所做的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內。