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