本發(fā)明涉及計(jì)算機(jī)信息安全領(lǐng)域,具體涉及一種支持可搜索加密的安全索引結(jié)構(gòu)及其構(gòu)造方法。
背景技術(shù):
信息檢索技術(shù)至今日已經(jīng)有五十年左右的發(fā)展歷史,信息檢索的方法也從最初簡(jiǎn)單的布爾查詢,發(fā)展到了現(xiàn)在的采用了向量空間、概率方法等數(shù)學(xué)模型,并且還引入了加權(quán)和相關(guān)性排序等概念,這些新技術(shù)的出現(xiàn),非常大地提高了信息檢索的質(zhì)量。信息檢索技術(shù)在互聯(lián)網(wǎng)中應(yīng)用得最為廣泛的無疑是搜索引擎,國(guó)內(nèi)外已經(jīng)產(chǎn)生了很多優(yōu)秀的搜索引擎公司,如google、百度、雅虎等,他們?yōu)槿藗冊(cè)谛畔z索方面提供了很大的便利。搜索引擎主要由五個(gè)部分組成,分別是搜索器、分析器、索引器、檢索器和用戶接口。索引器中會(huì)包含一張索引表用于文檔檢索,目前主流搜索引擎的索引表所采用的形式一般為倒排文檔,倒排文檔的索引結(jié)構(gòu)具有效率高、準(zhǔn)確率高、占用空間小等優(yōu)點(diǎn),因此這也是目前信息檢索中最為常用的一種索引結(jié)構(gòu),并在互聯(lián)網(wǎng)技術(shù)中得到了廣泛的應(yīng)用。
信息檢索技術(shù)的發(fā)展為人們提供了極大的便利,但是隨著互聯(lián)網(wǎng)技術(shù)的蓬勃發(fā)展,信息在網(wǎng)絡(luò)上受到的安全威脅也在增加,網(wǎng)絡(luò)安全問題日益突出。在某些場(chǎng)景中,我們出于安全性的考慮,可能需要對(duì)信息先進(jìn)行安全處理再進(jìn)行檢索或者在網(wǎng)絡(luò)上傳輸,以防止信息的泄露。但是普通的明文檢索的索引文件并沒有進(jìn)行任何加密處理,并且所有信息都是以明文形式處理并在網(wǎng)絡(luò)上傳輸?shù)?,攻擊者在獲取索引文件或截取查詢信息后可以很容易地進(jìn)行攻擊,顯然這樣的索引方式在有安全需求的場(chǎng)景下是無法滿足其安全性需求的。因此,在這樣的場(chǎng)景中我們需要對(duì)索引文件及索引方式進(jìn)行一系列的安全性處理,如對(duì)索引信息加密或改變索引結(jié)構(gòu)等方式,以使得其具有一定程度的安全性,達(dá)到保護(hù)信息安全的目的。
國(guó)內(nèi)外已經(jīng)有許多學(xué)者提出了許多種加密索引的方案以及較為安全的索引結(jié)構(gòu),以解決安全索引的問題,eu-jingoh在2004年提出了一種采用了陷門單向函數(shù)的安全索引機(jī)制,該機(jī)制是對(duì)適應(yīng)性選擇關(guān)鍵字攻擊安全的(ind-cka),他據(jù)此構(gòu)建出了一種稱為z-idx的安全索引。danboneh等提出了一種支持關(guān)鍵字查詢的公鑰加密模式,并且包含了基于身份加密(ibe)的算法。但上述基于陷門單向函數(shù)的安全索引的時(shí)空開銷很大,無法適用。
在中國(guó)發(fā)明專利說明書cn200910063738.1中公開了一種基于分塊組織的密文索引結(jié)構(gòu)及其管理方法以及在中國(guó)發(fā)明專利說明書200910061325.x中公開了一種基于密文的安全全文索引和檢索系統(tǒng)。上面兩個(gè)專利提到了建立密文索引結(jié)構(gòu),其索引結(jié)構(gòu)基于倒排文檔方式,無法抵抗統(tǒng)計(jì)分析,缺乏安全性。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是針對(duì)現(xiàn)有技術(shù)存在的不足,提供一種適合可搜索加密的安全索引結(jié)構(gòu)及其構(gòu)造方法。
本發(fā)明解決上述問題所采用的技術(shù)方案為:
一種支持可搜索加密的密文索引結(jié)構(gòu),包括sys文件、bf文件、doc文件和seg文件,所述sys文件、bf文件、doc文件和seg文件包含所有索引信息及文檔信息;其中:
sys文件包括生成索引時(shí)偽隨機(jī)函數(shù)要用到的大素?cái)?shù),索引中的文檔數(shù)目,bf文件的字節(jié)長(zhǎng)度,doc文件的字節(jié)長(zhǎng)度等,sys文件中還包含了一個(gè)文檔信息列表,其中的每一條文檔信息包括了該文檔id、seg文件編號(hào)、對(duì)應(yīng)的bloomfilter串在bf文件中的偏移值、文檔在doc文件中的偏移值、以及該文檔的字節(jié)長(zhǎng)度,所述bloomfilter串在bf文件中的偏移值與文檔在doc文件中的偏移值在查詢的時(shí)候起到了指針的作用,可以幫助快速的定位到對(duì)應(yīng)的索引信息位置;
doc文件保存文檔信息,每一條文檔信息包括文檔id、文檔名稱、文檔所包含的域數(shù)目、文檔的字節(jié)長(zhǎng)度以及文檔包含的域信息列表,所述域信息列表中的每一條域信息包括該域的名稱以及在seg文件中的偏移值,所述域在seg文件中的偏移值用來快速查找域內(nèi)容;
seg文件是存放被索引內(nèi)容的文件,包括了所有文檔的域的內(nèi)容,seg文件分成多個(gè)限定長(zhǎng)度的文件分開存儲(chǔ),每個(gè)文件以“seg_x”的方式命名,x為分片文件編號(hào),seg文件中的域信息包括域的名稱,權(quán)值,是否進(jìn)行索引,是否進(jìn)行存儲(chǔ),是否進(jìn)行token化,以及域的文本內(nèi)容,域被標(biāo)記為不存儲(chǔ)時(shí),則該域內(nèi)容為空;
bf文件保存了各個(gè)文檔所對(duì)應(yīng)的bloomfilter串,單個(gè)bloomfilter串是一系列的01組合,在進(jìn)行查詢的時(shí)候,索引通過sys文件找到文檔對(duì)應(yīng)的bloomfilter串在bf文件中所處的位置,將其提取出來以01檢驗(yàn)的方式完成校驗(yàn)和查詢。
一種支持可搜索加密的密文索引結(jié)構(gòu)的構(gòu)造方法,包括以下步驟:
1.對(duì)每一個(gè)文檔建立一個(gè)bloomfilter結(jié)構(gòu),將文檔中的每一個(gè)關(guān)鍵字w的n個(gè)哈希值作為陷門,分別映射到m長(zhǎng)度的點(diǎn)陣的n個(gè)點(diǎn)上,并將n個(gè)點(diǎn)的值全部置為1;將一篇文檔中的關(guān)鍵詞全部處理完畢之后,將bloomfilter存儲(chǔ)起來作為索引文件;
2.在一個(gè)文檔對(duì)象中保存一個(gè)包含所有域的列表,然后遍歷列表中的每一個(gè)域,為需要建立索引的域建立索引,具體包含如下步驟:
2.1)首先對(duì)域值進(jìn)行分析處理,得到它的token流,對(duì)于token流中的每一個(gè)token,通過一個(gè)偽隨機(jī)函數(shù)f(token)計(jì)算其函數(shù)值s;
2.2)通過一組哈希函數(shù)h1,h2,h3,…h(huán)n分別計(jì)算s的哈希值,得到n個(gè)哈希值h1(s),h2(s),h3(s),…h(huán)n(s);
2.3)通過一組哈希函數(shù)h1,h2,h3,…h(huán)n分別計(jì)算s的哈希值,得到n個(gè)哈希值h1(s),h2(s),h3(s),…h(huán)n(s);
2.4)把2.2)中的n個(gè)哈希值映射到[0,m]中的n個(gè)值,其中m是該文檔的bloomfilter串的長(zhǎng)度,這n個(gè)值就是該token所對(duì)應(yīng)的陷門;
2.5)將2.3)中的n個(gè)[0,m]范圍內(nèi)的值對(duì)應(yīng)的bloomfilter串位置置為1,若已經(jīng)為1的位則不做處理;
3.所有域都按照上述步驟索引完畢后,將文檔對(duì)應(yīng)的bloomfilter串作為索引文件保存在磁盤中,并將文檔信息及需要保存的域的內(nèi)容寫入索引文件。
有益效果:本發(fā)明基于陷門單項(xiàng)函數(shù)并與偽隨機(jī)函數(shù)相結(jié)合構(gòu)造了一個(gè)具有高安全性的密文索引結(jié)構(gòu),基于該安全索引結(jié)構(gòu)可搜索加密的文檔,本發(fā)明同時(shí)滿足安全性與搜索效率的需求,適合云計(jì)算背景下的基于關(guān)鍵詞的可搜索加密和密文檢索。
附圖說明
圖1是本發(fā)明實(shí)施例提供的支持可搜索加密的密文索引結(jié)構(gòu)的結(jié)構(gòu)示意圖;
圖2是本發(fā)明實(shí)施例提供的支持可搜索加密的密文索引結(jié)構(gòu)的構(gòu)造方法;
圖3是本發(fā)明實(shí)施例提供的支持可搜索加密的密文索引結(jié)構(gòu)的查詢方法。
具體實(shí)施方式
下面結(jié)合附圖和具體實(shí)施例,進(jìn)一步闡明本發(fā)明,本實(shí)施例在以本發(fā)明技術(shù)方案為前提下進(jìn)行實(shí)施,應(yīng)理解這些實(shí)施例僅用于說明本發(fā)明而不用于限制本發(fā)明的范圍。
如圖1所示,本發(fā)明實(shí)施例公開了一種支持可搜索加密的密文索引結(jié)構(gòu)及其構(gòu)造方法,該密文索引結(jié)構(gòu)包括四個(gè)文件結(jié)構(gòu),分別為:sys文件、bf文件、doc文件以及seg文件,這4個(gè)文件包含了所有的索引信息及文檔信息。這四個(gè)文件的具體信息如下:
sys文件包括生成索引時(shí)偽隨機(jī)函數(shù)要用到的大素?cái)?shù),索引中的文檔數(shù)目,bf文件的字節(jié)長(zhǎng)度,doc文件的字節(jié)長(zhǎng)度等。sys文件中還包含了一個(gè)文檔信息列表,其中的每一條文檔信息包括了該文檔id、seg文件編號(hào)、對(duì)應(yīng)的bloomfilter串在bf文件中的偏移值、文檔在doc文件中的偏移值、以及該文檔的字節(jié)長(zhǎng)度。兩個(gè)偏移值在查詢的時(shí)候起到了指針的作用,可以幫助快速的定位到對(duì)應(yīng)的索引信息位置。
doc文件保存文檔信息,每一條文檔信息包括文檔id、文檔名稱、文檔所包含的域數(shù)目、文檔的字節(jié)長(zhǎng)度以及文檔包含的域信息列表,域信息列表中的每一條域信息包括該域的名稱以及在seg文件中的偏移值,其中,域在seg文件中的偏移值用來快速查找域內(nèi)容;
seg文件是存放被索引內(nèi)容的文件,包括了所有文檔的域的內(nèi)容。seg文件分成多個(gè)限定長(zhǎng)度的文件分開存儲(chǔ),每個(gè)文件以“seg_x”的方式命名,x為分片文件編號(hào)。seg文件中的域信息包括域的名稱,權(quán)值,是否進(jìn)行索引,是否進(jìn)行存儲(chǔ),是否進(jìn)行token化,以及域的文本內(nèi)容,若某域被標(biāo)記為不存儲(chǔ)則該域內(nèi)容為空。
bf文件保存了各個(gè)文檔所對(duì)應(yīng)的bloomfilter串。單個(gè)bloomfilter串是一系列的01組合,在進(jìn)行查詢的時(shí)候,索引通過sys文件找到文檔對(duì)應(yīng)的bloomfilter串在bf文件中所處的位置,將其提取出來以01檢驗(yàn)的方式完成校驗(yàn)和查詢。
上述支持可搜索加密的密文索引結(jié)構(gòu)的構(gòu)造方法具體包含如下步驟:
步驟1,對(duì)每一個(gè)文檔建立一個(gè)bloomfilter結(jié)構(gòu),將文檔中的每一個(gè)關(guān)鍵字w的n個(gè)哈希值作為陷門,分別映射到m長(zhǎng)度的點(diǎn)陣的n個(gè)點(diǎn)上,并將n個(gè)點(diǎn)的值全部置為1。將一篇文檔中的關(guān)鍵詞全部處理完畢之后,將bloomfilter存儲(chǔ)起來作為索引文件。
步驟2,在一個(gè)文檔對(duì)象中保存一個(gè)包含所有域的列表,然后遍歷列表中的每一個(gè)域,為需要建立索引的域建立索引。所說的步驟2,具體包含如下步驟:
步驟2.1,首先對(duì)域值進(jìn)行分析處理,得到它的token流,對(duì)于token流中的每一個(gè)token,通過一個(gè)偽隨機(jī)函數(shù)f(token)計(jì)算其函數(shù)值s。
步驟2.2,通過一組哈希函數(shù)h1,h2,h3,…h(huán)n分別計(jì)算s的哈希值,得到n個(gè)哈希值h1(s),h2(s),h3(s),…h(huán)n(s)。
步驟2.3,通過一組哈希函數(shù)h1,h2,h3,…h(huán)n分別計(jì)算s的哈希值,得到n個(gè)哈希值h1(s),h2(s),h3(s),…h(huán)n(s)。
步驟2.4,對(duì)于步驟2.2中計(jì)算出的n個(gè)哈希值進(jìn)行處理,使之分別能映射到[0,m]中的n個(gè)值,其中m是該文檔的bloomfilter串的長(zhǎng)度,這n個(gè)值實(shí)際上就是該token所對(duì)應(yīng)的陷門。
步驟2.5,將步驟2.3中計(jì)算出的n個(gè)[0,m]范圍內(nèi)的值對(duì)應(yīng)的bloomfilter串位置置為1,若已經(jīng)為1的位則不做處理。
步驟3,所有域都按照上述步驟索引完畢后,我們將此文檔對(duì)應(yīng)的bloomfilter串作為索引文件保存在磁盤中,并將文檔信息及需要保存的域的內(nèi)容寫入索引文件。
本發(fā)明中的偽隨機(jī)函數(shù)采用fips186生成器,函數(shù)中用到的單向函數(shù)采用了基于des的fips186單向函數(shù)。系統(tǒng)中的哈希函數(shù)采用bkdrhash,aphash,djbhash,jshash,rshash等5個(gè)函數(shù),分別用來產(chǎn)生一組不同的哈希值。
具體的說,本發(fā)明首先構(gòu)造空的索引結(jié)構(gòu),該結(jié)構(gòu)包括4部分,分別為sys文件、bf文件、doc文件以及seg文件。
然后開始初始化sys文件,生成最大索引素?cái)?shù),初始化文檔數(shù)量為0,bf字節(jié)數(shù),具體如圖1所示,對(duì)于新加入索引系統(tǒng)的文檔,生成文檔id,把文檔id、文檔名稱、把這些信息插入到doc文件中,同時(shí)把文檔信息插入的sys文件,并把sys文件中的文檔與doc文件中的文檔關(guān)聯(lián)起來;隨后分析文檔的關(guān)鍵詞列表,即域信息,對(duì)每一個(gè)域建立信息插入到seg文件中;然后把doc文檔中域信息與seg文件關(guān)聯(lián)起來;最后生成bloomfilter信息插入到bf文件中,并把bf文件與doc文件進(jìn)行關(guān)聯(lián)。
上述關(guān)聯(lián)是依靠圖1中的那些偏移地址來完成的。此外在建立索引結(jié)構(gòu)的過程中,每增加一個(gè)文件都要把相應(yīng)的文檔數(shù)目、文檔字節(jié)長(zhǎng)度、doc文件字節(jié)長(zhǎng)度,bf文件字節(jié)長(zhǎng)度信息進(jìn)行更新。其中文檔的域信息建立是關(guān)鍵,其基本方法如圖2所示:
對(duì)每一個(gè)文檔獲取其關(guān)鍵詞域數(shù)量和信息,針對(duì)每一個(gè)關(guān)鍵詞域,得到其索引和得到它的token流,對(duì)于token流中的每一個(gè)token,通過一個(gè)偽隨機(jī)函數(shù)f(token)計(jì)算其函數(shù)值s。通過一組哈希函數(shù)h1,h2,h3,…h(huán)n分別計(jì)算s的哈希值,得到n個(gè)哈希值h1(s),h2(s),h3(s),…h(huán)n(s)。把這n個(gè)哈希值映射到[0,m]中的n個(gè)值,其中m是該文檔的bloomfilter串的長(zhǎng)度,這n個(gè)值實(shí)際上就是該token所對(duì)應(yīng)的陷門。然后將上述的n個(gè)[0,m]范圍內(nèi)的值對(duì)應(yīng)的bloomfilter串位置置為1,若已經(jīng)為1的位則不做處理。處理完畢后生成bloomfilter索引存入bf文件。
當(dāng)用戶發(fā)起密文搜索請(qǐng)求后,其搜索流程如圖3所示,具體描述如下:
在密文索引構(gòu)造的時(shí)候,為了使得相同關(guān)鍵詞的陷門能夠根據(jù)文檔的不同而有所區(qū)別,系統(tǒng)將關(guān)鍵詞與其所在的文檔id號(hào)進(jìn)行處理后作為新的關(guān)鍵詞再生成陷門,因此在進(jìn)行查詢時(shí),我們也需要根據(jù)每個(gè)索引中文檔id的不同來分別計(jì)算查詢關(guān)鍵詞的陷門。整個(gè)查詢流程大致上可以分為兩個(gè)階段:對(duì)查詢語句的處理階段以及陷門匹配階段。
查詢語句的處理過程與建立索引類似,首先是對(duì)查詢語句的預(yù)處理,主要是分詞、去重、過濾等,最終形成一個(gè)token化的流,并按照查詢語法生成一顆查詢樹。token化后對(duì)于token流中token的處理與建立索引時(shí)一致,首先是通過一個(gè)偽隨機(jī)函數(shù)f得到token的函數(shù)值w=f(token),然后將w用n個(gè)哈希函數(shù){h1,h2,……,hn}進(jìn)行哈希變換得到包含n個(gè)哈希值的集合h={h1(w),h2(w),……,hn(w)},h通過一個(gè)變換函數(shù)t將其中的元素映射到區(qū)間[0,m],得到一個(gè)在此區(qū)間內(nèi)的位置值集合p=t(h)={p1,p2,……,pn|對(duì)于任意0≤i≤n,有0≤pi≤m},其中m是該文檔所對(duì)應(yīng)的bloomfilter串長(zhǎng)度,然后將p按照查詢樹規(guī)則與結(jié)果位置值集合s進(jìn)行合并,得到一個(gè)新的位置值集合。把所有的token都處理完畢后即可得到進(jìn)行查詢的最終的位置值集合s。
得到位置值集合s后就進(jìn)入陷門匹配階段。此階段實(shí)際上是一個(gè)順序匹配的過程,首先從索引文件中讀出一個(gè)bloomfilter串的列表l,逐次對(duì)列表l中的每一個(gè)bloomfilter串b進(jìn)行比較,若對(duì)于任意p∈s,都有bit(b,p)=1,其中bit(b,p)表示01串b的第p個(gè)bit位的值,則b滿足查詢條件。將b所對(duì)應(yīng)的文檔作為結(jié)果文檔加入結(jié)果集合r中;反之,只要有一個(gè)p∈s,使得bit(b,p)≠1,則b所對(duì)應(yīng)的文檔就不滿足查詢條件。將所有的bloomfilter都檢查完畢之后,可以得到最終的結(jié)果集合r,并返回給查詢用戶。
本發(fā)明基于陷門單項(xiàng)函數(shù)并與偽隨機(jī)函數(shù)相結(jié)合構(gòu)造了一個(gè)具有高安全性的密文索引結(jié)構(gòu),基于該安全索引結(jié)構(gòu)可搜索加密的文檔,本發(fā)明同時(shí)滿足安全性與搜索效率的需求,適合云計(jì)算背景下的基于關(guān)鍵詞的可搜索加密和密文檢索。
以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視為本發(fā)明的保護(hù)范圍。