專利名稱:一種基于分塊組織的密文索引結(jié)構(gòu)及其管理方法
技術(shù)領(lǐng)域:
本發(fā)明涉及信息檢索和信息安全技術(shù)領(lǐng)域,具體涉及一種基于分塊組織的密文索引結(jié)構(gòu)及其管理方法。
背景技術(shù):
在全球信息化大潮的推動下,信息無節(jié)制地膨脹。針對于大規(guī)模的數(shù)字信息的管理提供高效的檢索能力已經(jīng)變得必不可少,同時,大量的數(shù)據(jù)集合在諸如企業(yè)數(shù)據(jù)信息中心進(jìn)行維護(hù),它們以密態(tài)形式存儲以限制非授權(quán)用戶的非法訪問,例如,敏感的政府機(jī)要文檔、公司商業(yè)機(jī)密等。
關(guān)鍵的問題是如何保護(hù)這些加密的數(shù)據(jù)文檔集,并且能夠建立密態(tài)的索引以用來給被授權(quán)的用戶進(jìn)行檢索。加密可以用來保護(hù)數(shù)據(jù)被盜竊或者遭受攻擊,但是僅僅是加密還是不夠的。對于一個企業(yè)或者政府部門,除了外部的攻擊之外,也有可能存在潛在的內(nèi)部攻擊。例如,當(dāng)信息存儲在第三方的數(shù)據(jù)中心時,則此時數(shù)據(jù)中心的系統(tǒng)管理員可能沒有解密密文數(shù)據(jù)的密鑰以及訪問數(shù)據(jù)集的權(quán)限。當(dāng)一個被授權(quán)的用戶通過遠(yuǎn)程訪問的方式來檢索所需要的文檔集時,若將大規(guī)模的數(shù)據(jù)集進(jìn)行解密然后從中査找滿足用戶檢索條件的文檔集則將需要花費(fèi)巨大的時間和空間開銷。因此,在能夠保證密文安全的條件下,有必要引入一種基于密文文檔快速索引和檢索的方法。
如何在效率和安全性二者之間找到一個合適的平衡點(diǎn)是當(dāng)前面臨的一個挑戰(zhàn),國內(nèi)外也有部分學(xué)者進(jìn)行了這方面的研究,在索引加密方面,中
國發(fā)明專利申請200410070113.5提出了一種基于IDEA的密文檢索方法。此項(xiàng)發(fā)明是對全文檢索技術(shù)的改造,它幾乎保留了全文檢索的大部分技術(shù),這樣在檢索效率上比較理想,且便于實(shí)現(xiàn),由于只對索引文件的索引詞進(jìn)行了加密處理,雖然能夠在一定程度上保護(hù)數(shù)據(jù)的安全性,但難以抵抗諸
如統(tǒng)計攻擊等常用的攻擊手段。中國發(fā)明專利申請200610124691.1提出了一種"基于密文的全文檢索系統(tǒng)",該發(fā)明在安全性可用性方面有所提高,但仍然難以防止統(tǒng)計攻擊等攻擊手段。國外這方面的研究主要集中在文件系統(tǒng)的加密,通過對文件加密,然后設(shè)計高效的文件檢索機(jī)制。
發(fā)明內(nèi)容
本發(fā)明的目的在于提出了一種基于分塊組織的密文索引結(jié)構(gòu),該索引結(jié)構(gòu)不僅能夠提供高效的信息檢索能力,同時能夠保證索引具有較強(qiáng)的抗攻擊能力,基于索引的訪問控制能夠?qū)ξ臋n集合的訪問控制精確到文檔級別;本發(fā)明還提供了上述密文索引結(jié)構(gòu)的管理方法。
本發(fā)明提供的基于分塊組織的密文索引結(jié)構(gòu),包括詞條表、詞條索引表和倒排表;
詞條表是文檔集經(jīng)過分詞后的詞條集合;在詞條表中,首先通過哈希變換的方法將分詞出來的原始詞條映射到另外一個集合中,然后對新集合按照字典序排序,再按照分塊進(jìn)行存儲,每個分塊由時間戳、密鑰參數(shù)和
密文塊三部分組成,時間戳用來對密文塊的密鑰參數(shù)更新進(jìn)控行制,密鑰參數(shù)用來和存儲在加密卡中的主密鑰一起生成工作密鑰;每個密文塊中含有固定數(shù)量的詞條元組,每個詞條元組包括一個詞條,對于該分塊的第一個詞條元組,其后面的地址是該詞條所對應(yīng)文檔頻率和位置信息在倒排表中的塊的首地址,而對于其他的詞條元組,則其后面的地址是該詞條所對應(yīng)的文檔頻率和位置信息在倒排表中對應(yīng)的塊偏移地址;
詞條索引表是由詞條表中每隔固定大小間隔取出的詞條組成,對于詞條索引表的組織方式,設(shè)置一個閾值N,記詞條索引表中詞條的個數(shù)為P,當(dāng)P〈二N時,將詞條索引表進(jìn)行整體加密,而當(dāng)P〉N時,對詞條索引表按照詞條表一樣的方式進(jìn)行分塊加密;
倒排表由詞條在文檔中頻率信息和位置信息組成,其中頻率信息包括文檔詞條在文檔集中的出現(xiàn)頻率以及出現(xiàn)詞條的文檔id,位置信息則是每個詞條在每個文檔中出現(xiàn)的位置的集合。
上述基于分塊組織的密文索引結(jié)構(gòu)的管理方法,它包括索引創(chuàng)建,索引維護(hù)和密鑰管理三個部分;
索引創(chuàng)建的流程為將輸入的文檔集進(jìn)行分詞,并且記錄詞條在文檔中出現(xiàn)的頻率和位置信息,分詞得到的詞條存儲在內(nèi)存的臨時詞條表中,頻率和位置信息存儲在臨時的倒排表中,臨時詞條表和倒排表大小超過內(nèi)存緩沖區(qū)時,使用Hash函數(shù)將詞條表變換到另外一個集合中;然后對變換后的詞條表進(jìn)行排序;當(dāng)排序結(jié)束后,對于詞條表,每隔固定大小間隔取出一個詞條并組成詞條索引表,然后對詞條索引表,詞條表,以及倒排表進(jìn)行預(yù)加密,即預(yù)留加密后所需要的空間大小,經(jīng)過預(yù)加密后,將詞條索引表,詞條表,倒排表寫入磁盤,構(gòu)成臨時索引;若此時還有文檔沒有進(jìn)行分詞處理,則按照上述的方法繼續(xù)生成臨時索引,當(dāng)所有文檔都解析完后,將臨時索引的合并,并對文件進(jìn)行就地加密,得到加密后的索引;
索引維護(hù)分為如下幾種情況(1)批量添加文檔
首先對文檔集進(jìn)行解析,然后對處理結(jié)果進(jìn)行倒排處理,在處理過程中,按照設(shè)置好的分塊參數(shù)對處理結(jié)果進(jìn)行分塊,對數(shù)據(jù)分塊進(jìn)行預(yù)加密,當(dāng)所有的文檔都被處理后并建立完明文索引后,然后與原始磁盤上已有的索引進(jìn)行合并,合并完成后啟動加密機(jī)制來對剛建立的索引塊進(jìn)行就地加密,加密完后即形成了新的密文索引;(2) 增量添加少量文檔將新加入的文檔的詞條進(jìn)行建立一個內(nèi)存索引,該內(nèi)存索引并不加密,
當(dāng)內(nèi)存索引達(dá)到給定的閾值時,按照批量建立索引的方法,就將其寫入到磁盤,并進(jìn)行加密;寫入磁盤后,并不立即和原始索引合并,而是建立一個單獨(dú)的小索引,當(dāng)這樣的小索引累積到給定的數(shù)量后,對這些小索引進(jìn)行合并,將小索引集并形成了一個大索引;
(3) 刪除文檔
首先是創(chuàng)建一個待刪除文檔列表,同時在索引中作標(biāo)記,表示該文檔已經(jīng)刪除,不再供檢索使用,但并不立即從索引中真正刪除文檔,當(dāng)刪除的文檔達(dá)到給定的數(shù)量時,再真正執(zhí)行刪除已經(jīng)有刪除標(biāo)記的文檔;
(4) 更新文檔
首先刪除需要更新的文檔,然后再添加更新后的文檔,完成文檔的更
新;
密鑰管理的過程密文索引的密鑰管理利用硬件加密卡來實(shí)現(xiàn),密鑰分為主密鑰和工作密鑰,主密鑰存儲在硬件加密卡中,用來作為生成工作密鑰的一部分;而工作密鑰不在硬件加密卡中存儲,通過主密鑰和密鑰參數(shù)共同作用臨時生成的,生成的過程也在硬件加密卡中進(jìn)行;生成密鑰的同時,調(diào)用硬件加密卡中的加解密算法對需要加密的數(shù)據(jù)塊進(jìn)行加解密;密鑰參數(shù)通過一個隨機(jī)函數(shù)生成,在該實(shí)施中,是采用當(dāng)前系統(tǒng)時間值作為密鑰參數(shù),并且存儲在預(yù)加密的數(shù)據(jù)塊的前面。
本發(fā)明為需要對文檔集進(jìn)行安全管理和快速檢索提供了高效安全的索引結(jié)構(gòu)以及維護(hù)機(jī)制,同時將訪問控制信息融入到索引中,使用戶在權(quán)限范圍內(nèi)得到很好的全文檢索體驗(yàn)。與現(xiàn)有技術(shù)相比,本發(fā)明具有以下特點(diǎn)(1)本發(fā)明提出的基于分塊組織的索引結(jié)構(gòu)能夠滿足高安全性需求,通過Hash映射改變了原始的詞條順序,防止了猜詞等攻擊手段。同時基于分塊加密機(jī)制更進(jìn)一步阻止了統(tǒng)計攻擊等攻擊手段。
8(2) 本發(fā)明提出的基于索引的訪問控制能夠滿足精確的訪問控制需 求在構(gòu)建索引時,同時構(gòu)建用戶和文檔之間的授權(quán)關(guān)系,這樣能夠方便 控制特定的用戶(組)擁有特定的文檔集合的訪問權(quán)限,對于特定的應(yīng)用 環(huán)境,只需將上層的組織結(jié)構(gòu)映射到索引結(jié)構(gòu)中,而不需要改變底層的索 引存儲結(jié)構(gòu)。
(3) 本發(fā)明提出的基于分塊的索引構(gòu)建方法能夠滿足高效構(gòu)建索引要 求通過對文檔進(jìn)行解析后,按照基于合并的索引創(chuàng)建方法在內(nèi)存中創(chuàng)建 固定大小的臨時索引塊,同時對索引進(jìn)行分塊加密預(yù)留空間,然后一次性 地對索引進(jìn)行就地加密,而不需要創(chuàng)建新的索引文件,大大提高了密文的 索引的創(chuàng)建效率。
(4) 本發(fā)明提出的密鑰管理策略能夠滿足高安全性的要求對密鑰進(jìn) 行分層管理然后將主密鑰存儲在加密卡中,工作密鑰臨時生成,防止了密 鑰被竊取可能性,同時充分利用了加密卡的快速的加解密的特性。在密文 塊中設(shè)置時間戳為密鑰參數(shù)定時更換提供了方便,提高了安全性。同時可 以分批地更換密鑰而不是一次性全部更換, 一定程度上提高了更換密鑰的 效率。
圖1為本發(fā)明的索引結(jié)構(gòu)圖。
圖2為本發(fā)明所述用戶和文檔權(quán)限關(guān)聯(lián)結(jié)構(gòu)圖。
圖3為本發(fā)明所述用戶層次結(jié)構(gòu)圖。
圖4為本發(fā)明所述索引創(chuàng)建過程流程圖。
圖5是本發(fā)明所述添加文檔過程圖流程圖。
圖6為本發(fā)明的一次加密過程流程圖。
圖7為本發(fā)明所述一次檢索流程圖。
具體實(shí)施例方式
索引的結(jié)構(gòu)是所有基于索引操作的基礎(chǔ)。對于基于密文的索引結(jié) 構(gòu),結(jié)合倒排索引模型,以固定大小分塊為基本加密單位。對于詞條 集合部分采用分塊機(jī)制,每隔一定大小的詞條間隔子集合作為一個塊, 檢索時不再以詞條為單位,而是以塊為單位進(jìn)行檢索。同時,塊也是 加密的基本單位。對于倒排表部分,同樣也采用分塊機(jī)制,倒排表分 為頻率信息表和位置信息表,頻率信息表中包含著詞條在文檔集中頻 率信息,位置信息表則包含著詞條在文檔集中出現(xiàn)的位置信息。通過 對頻率信息表和位置信息表進(jìn)行分塊,消除了詞條和它們的直接的對 應(yīng)關(guān)系,詞條和頻率信息以及位置信息則是通過一個塊的起始地址和 偏移地址建立起映射關(guān)系的。
基于索引的訪問控制主要包含用戶和文檔的對應(yīng)關(guān)系以及用戶的 層次管理。把用戶(組)作為詞條表中的一部分,用戶擁有權(quán)限訪問 的文檔集作為倒排表的一部分,建立起用戶(組)和文檔集合之間的 "倒排"關(guān)系,在檢索時,將原始檢索結(jié)果在用戶權(quán)限范圍內(nèi)的文檔 集合上進(jìn)行投影,得到結(jié)果集。用戶的層次管理,則是建立用戶(組) 之間的偏序關(guān)系,通過該偏序關(guān)系建立起權(quán)限的繼承,同時設(shè)置私有 文檔集和公有文檔集,使得用戶(組)擁有自己的私有文檔集的權(quán)限 不允許被繼承,而公有文檔的權(quán)限則允許繼承。
本發(fā)明所提供的索引管理方法包括索引創(chuàng)建,索引維護(hù)和密鑰管理三 個部分。
索引創(chuàng)建分為創(chuàng)建臨時索引和生成加密索引,臨時索引主要是在 磁盤上創(chuàng)建一系列的小的臨時索引集合,在創(chuàng)建臨時索引時,預(yù)留一 部分用于加密后密文存儲所需的空間,然后通過基于合并的索引構(gòu)建 策略將小的臨時索引合并成大的臨時索引。所謂合并就是將小索引中 的相同詞條的倒排表合并成一個大的倒排表。生成加密索引則是在臨時索引的基礎(chǔ)上進(jìn)行加密,而不是重新創(chuàng)建加密索引文件。
索引維護(hù)主要包括索引的添加、刪除和更新,而添加則分為批量 添加和少量添加,對于批量更新則是像索引創(chuàng)建一樣的方法進(jìn)行索引 的創(chuàng)建,對于少量更新,則是在內(nèi)存中創(chuàng)建一個臨時的內(nèi)存索引,當(dāng) 內(nèi)存索引達(dá)到一定的大小時,將其寫入磁盤,當(dāng)內(nèi)存索引達(dá)到一定大 小時,和原始索引用多路歸并算法進(jìn)行合并。對于索引的刪除,并不 是當(dāng)提出刪除請求時就真正刪除,而是對需要刪除的文檔作一個標(biāo)記, 在檢索時過濾掉刪除文檔列表中的文檔。當(dāng)對索引進(jìn)行優(yōu)化時,再統(tǒng) 一將已刪除文檔列表中的文檔刪除。文檔更新則是先刪除文檔,然后 再添加新文檔的方式來實(shí)現(xiàn)的。
密鑰管理包括密鑰的存儲和生成策略,密鑰采用分層的方式進(jìn)行 管理,分為主密鑰和工作密鑰,主密鑰存儲在加密卡設(shè)備中,工作密 鑰通過主密鑰和密鑰參數(shù)在加密中臨時生成,密鑰參數(shù)保存在加密的 密文塊首部,密鑰參數(shù)是通過一個密鑰參數(shù)生成器生成的,同時在加 密密文塊的首部存儲一個密鑰時間戳,標(biāo)示該密鑰參數(shù)的超期期限。
下面結(jié)合附圖和實(shí)例對本發(fā)明作進(jìn)一步詳細(xì)的說明。實(shí)施例只是更加 詳細(xì)地說明本發(fā)明,僅是說明性的,本發(fā)明的保護(hù)范圍并不受這些實(shí)施例 的限制。
如圖1所示,本發(fā)明的索引結(jié)構(gòu)包括詞條表100、詞條索引表110和倒 排表120。
詞條表1 OO是文檔集經(jīng)過分詞后的詞條集合。本發(fā)明可以采用各種分詞 方法,在該實(shí)例中,分詞采用的中科院的ICTCLAS分詞工具。在詞條表中, 首先通過Hash變換的方法將分詞出來的原始詞條映射到另外一個集合中, 然后對新集合按照字典序排序,這樣就破壞了原始詞條的字典順序,防止 了順序猜詞攻擊。詞條表按照分塊進(jìn)行存儲,每個分塊由時間戳、密鑰參 數(shù)和密文塊三部分組成,時間戳用來對密文塊的密鑰參數(shù)更新進(jìn)控行制;
ii密鑰參數(shù)用來和存儲在加密卡中的主密鑰一起生成工作密鑰;每個密文塊 中含有固定數(shù)量(一般取32到256較為合適)的詞條元組,每個詞條元組包 括一個詞條,對于該分塊的第一個詞條元組,其后面的地址是該詞條所對 應(yīng)文檔頻率和位置信息在倒排表120中的塊的首地址,而對于其他的詞條 元組,則其后面的地址是該詞條所對應(yīng)的文檔頻率和位置信息在倒排表120 中對應(yīng)的塊偏移地址。
詞條索引表110是由詞條表中每隔固定大小間隔(一般取32到256較 為合適)取出的詞條組成,對于詞條索引表的組織方式,設(shè)置一個閾值N( — 般取1MB到4MB之間的值),當(dāng)詞條索引表的大小P〈-N時,將詞條索引 表進(jìn)行整體加密,而當(dāng)P〉N時,對詞條索引表按照詞條表一樣的方式進(jìn)行 分塊加密,分塊的大小在具體環(huán)境中設(shè)定, 一般大小在1K到8K之間,詞 條索引表的功能是用于提高檢索性能,它的大小遠(yuǎn)遠(yuǎn)小于詞條表,這樣, 將對詞條表的檢索轉(zhuǎn)換為對詞條索引表的檢索,得到關(guān)鍵字在詞條表中塊 的首地址。進(jìn)而在詞條表上進(jìn)行一個塊的范圍內(nèi)進(jìn)行順序査找。這樣能夠 很快定位到所要的關(guān)鍵字。
倒排表120由詞條在文檔中頻率信息和位置信息組成,其中頻率信息 包括文檔詞條在文檔集中的出現(xiàn)頻率以及出現(xiàn)詞條的文檔id,位置信息則 是每個詞條在每個文檔中出現(xiàn)的位置的集合。每個詞條的頻率信息和位置 信息默認(rèn)按照詞條順序存儲的,同時,這二者也是按照分塊進(jìn)行組織的, 同樣每個分塊包括時間戳、密鑰參數(shù)以及密文塊,每個密文塊包括固定數(shù) 量(一般取32到128之間的數(shù)值比較合適)詞條的頻率信息和位置信息。 每個分塊的字節(jié)數(shù)與詞條表中的分塊一樣大,由于詞條信息表的大小一般 比它的頻率信息和位置信息小些,因此,密文塊中邏輯上的基本單位比詞 條表中的基本單位少些。
如圖2所示,基于索引的訪問控帝性要是將訪問控制信息加入到索引 當(dāng)中去,建立一個"用戶(組) 一文檔"關(guān)系表。圖2中"用戶(組)"對應(yīng)圖1中的詞條表中的一個詞條,該詞條中,"公有文檔集IDs"和"私有 文檔集IDs"分別指訪問權(quán)限能夠被繼承的文檔ID集合和訪問權(quán)限不能被 繼承的文檔ID集合。這樣,在檢索時,只需要將用戶的信息作為一個詞條 按照普通的方法進(jìn)行檢索,取得用戶能夠訪問的文檔ID集合,然后將前面 普通詞條得到的文檔ID集合信息在在該文檔ID集合上進(jìn)行投影,投影得 到的結(jié)果即為所需要的文檔ID集合。通過這個關(guān)系,就可以將用戶和文檔 直接關(guān)聯(lián)起來,實(shí)現(xiàn)文檔級粒度的訪問控制。該方案只是底層的一個抽象 的訪問控制,在針對具體應(yīng)用時,可以將該方案映射到具體的組織結(jié)構(gòu)中。 一般的組織結(jié)構(gòu)都是分層的,為此,擬設(shè)計一個分層的結(jié)構(gòu)來控制不同的 用戶訪問不同級別的文檔,用戶組也可以映射到圖3中用戶,在索引中唯 一存儲的是用戶與文檔之間訪問與被訪問關(guān)系,上層組織結(jié)構(gòu),可以用一 個如下所示的關(guān)系來描述
設(shè)^是給定集合c—c;,C2,…,cj上的一個二元偏序關(guān)系,在該偏序關(guān)系 中,。sc,表示類別c,中的用戶有權(quán)限訪問類別q中的資源,對于一個偏序
集合C-fC,,q,…,Cj,滿足如下幾條性質(zhì)
(1) C,C,;(自反性)
(2) C,。且C,C,則C,-C,;(反對稱性)
(3) C,SC,且C^C;則C^G;(傳遞性)
如圖3所示為一個用戶層次結(jié)構(gòu),其中高級別的用戶(組)能夠訪問 低級別的用戶(組)的公有文檔集,而低級別的用戶(組)則不能訪問高 級別的用戶(組)的任何文檔集。c,中的用戶能夠訪問q所擁有的公有文 檔,但是。.中用戶不能訪問C,.所擁有的公有文檔。對于q的私有文檔集, 則只有擁有該文檔集的用戶(組)能夠訪問,其他任何用戶(組)都不能 訪問。
下面分別說明上述索引結(jié)構(gòu)的管理方法 (一)索引創(chuàng)建如圖4所示,索引創(chuàng)建流程為首先輸入一個文檔集后,調(diào)用中科院
的ICTCLAS分詞工具對文檔進(jìn)行分詞,并且記錄詞條在文檔中出現(xiàn)的頻率 和位置信息,分詞得到的詞條存儲在內(nèi)存的臨時詞條表中,頻率和位置信 息存儲在臨時的倒排表中,臨時詞條表和倒排表大小超過內(nèi)存緩沖區(qū)時, 使用Hash函數(shù)(例如MD5變換)將詞條表變換到另外一個集合中。然后 對變換后的詞條表進(jìn)行排序。當(dāng)排序結(jié)束后,對于詞條表,每隔固定大小 間隔(取32到256之間比較合適,本實(shí)施中取128)取出一個詞條并組成 詞條索引表,然后對詞條索引表,詞條表,以及倒排表進(jìn)行預(yù)加密,即預(yù) 留加密后所需要的空間大小,而并不真正進(jìn)行加密。經(jīng)過預(yù)加密后,將詞 條索引表,詞條表,倒排表寫入磁盤,構(gòu)成臨時索引。若此時還有文檔沒 有進(jìn)行分詞處理,則按照上述的方法繼續(xù)生成臨時索引,當(dāng)所有文檔都解 析完后,采用傳統(tǒng)的基于合并的索引合并策略完成臨時索引的合并,合并 成大索引后,由于之前預(yù)留了用于密文存儲的空間,因此調(diào)用對文件進(jìn)行 就地加密,而不需要重新創(chuàng)建密文索引,大大提高了效率。
(二)索引維護(hù)
對于索引的維護(hù),分為如下幾種情況 (1)批量添加大量文檔
對于批量建立索引,如圖5所示,首先對文檔集進(jìn)行解析,解析包括 文檔讀取,分詞等處理,然后對處理結(jié)果按照圖4所示方法進(jìn)行倒排處理, 在處理之前,需要設(shè)置好分塊大小的參數(shù),分塊參數(shù)取32到256之間的值 作為一個分塊加密單位比較合適。在處理過程中,取128作為本實(shí)施的參 數(shù),對處理結(jié)果進(jìn)行分塊,對數(shù)據(jù)分塊進(jìn)行預(yù)加密,當(dāng)所有的文檔都被處 理后并建立完明文索引后,然后與原始磁盤上已有的索引進(jìn)行合并,合并 完成后啟動加密機(jī)制來對剛建立的索引塊進(jìn)行就地加密,加密完后即形成 了新的密文索引。(2) 增量添加少量文檔
對于增量索引少量文檔,分兩種情況,第一種方式是將新加入的文檔 的詞條進(jìn)行建立一個內(nèi)存索引(假設(shè)索引在內(nèi)存中是安全的),該內(nèi)存索引 并不加密,這樣,在內(nèi)存索引所占的空間小于給定的閾值(該閾值根據(jù)實(shí) 際需要設(shè)置大小即可,取16MB到64MB左右比較合適)的條件下,不需 要對其進(jìn)行加解密操作,當(dāng)內(nèi)存索引達(dá)到給定的閾值(在本實(shí)施中取值為 32MB)時,按照批量建立索引的方法,將其寫入到磁盤,并進(jìn)行加密。寫 入磁盤后,并不立即和原始索引合并,而是建立一個單獨(dú)的小索引,當(dāng)這 樣的小索引累積到指定的數(shù)量(取10到100較合適,本實(shí)例中取50)后, 對這些小索引進(jìn)行合并,這樣,小索引集并形成了一個大索引。這樣在不 影響檢索的條件下,不需要頻繁地加解密原始的索引,提高了索引的效率。
(3) 刪除文檔
針對圖1所示的密文索引結(jié)構(gòu)的文檔刪除,首先是創(chuàng)建一個待刪除文 檔列表,同時在索引中作標(biāo)記,表示該文檔已經(jīng)刪除,不再供檢索使用, 但并不立即從索引中真正刪除文檔,當(dāng)刪除的文檔達(dá)到系統(tǒng)指定的文檔數(shù) 量時(該數(shù)量可以任意指定,該實(shí)施中取1000),或者由于合并等需要重寫 索引操作時才真正執(zhí)行刪除已經(jīng)有刪除標(biāo)記的文檔。
(4) 更新文檔
更新文檔則是首先刪除需要更新的文檔,然后再添加更新后的文檔, 完成文檔的更新。
(三)密鑰管理
密文索引的密鑰管理利用硬件加密卡來實(shí)現(xiàn)。硬件加密卡是指一種能 夠用來加解密數(shù)據(jù)的智能卡裝置, 一般都將加密算法固化在硬件加密卡當(dāng) 中。以便直接進(jìn)行加解密運(yùn)算。硬件加密卡有一定大小的存儲空間。
在上述提到的密鑰管理中,密鑰分為主密鑰和工作密鑰,主密鑰存儲
15在硬件加密卡中,用來作為生成工作密鑰的一部分。而工作密鑰不在硬件 加密卡中存儲,是通過主密鑰和密鑰參數(shù)共同作用臨時生成的,生成的過 程也在硬件加密卡中進(jìn)行。生成密鑰的同時,調(diào)用硬件加密卡中的加解密 算法對需要加密的數(shù)據(jù)塊進(jìn)行加解密。密鑰參數(shù)通過一個隨機(jī)函數(shù)生成, 在該實(shí)施中,是采用當(dāng)前系統(tǒng)時間值作為密鑰參數(shù),并且存儲在預(yù)加密的 數(shù)據(jù)塊的前面,如圖1中所示的結(jié)構(gòu)。
如圖6為一次加密流程。在建立索引的生成密文索引過程中,讀取密 鑰參數(shù)傳入加密卡,當(dāng)要進(jìn)行加密時,將密鑰參數(shù)和主密鑰通過一個密鑰 生成函數(shù)生成一個工作密鑰,然后使用該工作密鑰和指定的加密算法對數(shù) 據(jù)塊進(jìn)行加密,加密完后返回密文塊,最終寫入磁盤。系統(tǒng)每隔一段時間(該 時間段的長短由維護(hù)索引的用戶確定)檢測是否有密文塊時間戳過期,當(dāng)系 統(tǒng)檢測到當(dāng)前處理的密文塊時間戳值已經(jīng)過期后,則用原始的密鑰參數(shù)和 主密鑰生成工作密鑰來解密密文塊,同時生成新的密鑰參數(shù),與主密鑰一 起生成新的工作密鑰來加密解密后的明文塊,并且把新的密文塊和密鑰參 數(shù)以及新的時間戳寫入索引。
如圖7所示為本發(fā)明的索引結(jié)構(gòu)一次檢索過程,首先用戶通過登錄系 統(tǒng)后,系統(tǒng)獲取用戶所對應(yīng)的授權(quán)信息,然后用戶輸入檢索關(guān)鍵詞,系統(tǒng) 將用戶的授權(quán)信息和關(guān)鍵字進(jìn)行組合,得到一個攜帶有權(quán)限信息的查詢條 件,然后在緩存中查找,若關(guān)鍵字在緩存中,則直接從緩存中取出關(guān)鍵字 所對應(yīng)的內(nèi)容,否則到圖1所示的索引邏輯結(jié)構(gòu)中進(jìn)行檢索,其檢索過程 如下
(1) 首先判斷詞條索引表是否在內(nèi)存,若在內(nèi)存,則轉(zhuǎn)向步驟(3);
(2) 讀入詞條索引表到內(nèi)存,并且解密;
(3) 在詞條索引表上進(jìn)行二分査找,找到關(guān)鍵字可能在的詞條表中塊 的首地址,判斷該首地址所對應(yīng)的分塊是否在緩存中,若不在緩存中,則 讀入詞條表中分塊到內(nèi)存,對分塊解密,否則直接從緩存中取出分塊,在分塊中順序査找關(guān)鍵字,若沒找到關(guān)鍵字,則轉(zhuǎn)向步驟(5);
(4) 按照關(guān)鍵詞詞條所對應(yīng)的頻率和位置信息指針從頻率信息文件和 位置信息文件中讀取相應(yīng)的分塊,對分塊進(jìn)行解密。然后根據(jù)首地址和偏 移地址得到對應(yīng)頻率信息和位置信息,經(jīng)過計算獲取相應(yīng)文檔id集合,返 回該結(jié)果集;
(5) 返回空的結(jié)果集。 上述幾個步驟只是針對一個關(guān)鍵詞的檢索,當(dāng)有多個關(guān)鍵詞時,需要
對關(guān)鍵詞按照上述步驟進(jìn)行檢索,然后按照指定的規(guī)則將結(jié)果進(jìn)行組合, 最后將結(jié)果集在用戶權(quán)限范圍內(nèi)的文檔(用戶權(quán)限范圍的文檔集也是按照 上述步驟經(jīng)過檢索得到的)上進(jìn)行投影,投影后的結(jié)果即為最終檢索結(jié)果。
如本領(lǐng)域的技術(shù)人員所了解,以上所述為本發(fā)明的較佳實(shí)施例而已, 但本發(fā)明不應(yīng)該局限于該實(shí)施例和附圖所公開的內(nèi)容。所以凡是不脫離本 發(fā)明所公開的精神下完成的等效或修改,都落入本發(fā)明保護(hù)的范圍。
權(quán)利要求
1、一種基于分塊組織的密文索引結(jié)構(gòu),包括詞條表(100)、詞條索引表(110)和倒排表(120);詞條表(100)是文檔集經(jīng)過分詞后的詞條集合;在詞條表中,首先通過哈希變換的方法將分詞出來的原始詞條映射到另外一個集合中,然后對新集合按照字典序排序,再按照分塊進(jìn)行存儲,每個分塊由時間戳、密鑰參數(shù)和密文塊三部分組成,時間戳用來對密文塊的密鑰參數(shù)更新進(jìn)控行制,密鑰參數(shù)用來和存儲在加密卡中的主密鑰一起生成工作密鑰;每個密文塊中含有固定數(shù)量的詞條元組,每個詞條元組包括一個詞條,對于該分塊的第一個詞條元組,其后面的地址是該詞條所對應(yīng)文檔頻率和位置信息在倒排表(120)中的塊的首地址,而對于其他的詞條元組,則其后面的地址是該詞條所對應(yīng)的文檔頻率和位置信息在倒排表(120)中對應(yīng)的塊偏移地址;詞條索引表(110)是由詞條表中每隔固定大小間隔取出的詞條組成,對于詞條索引表的組織方式,設(shè)置一個閾值N,記詞條索引表中詞條的個數(shù)為P,當(dāng)P<=N時,將詞條索引表進(jìn)行整體加密,而當(dāng)P>N時,對詞條索引表按照詞條表一樣的方式進(jìn)行分塊加密;倒排表(120)由詞條在文檔中頻率信息和位置信息組成,其中頻率信息包括文檔詞條在文檔集中的出現(xiàn)頻率以及出現(xiàn)詞條的文檔id,位置信息則是每個詞條在每個文檔中出現(xiàn)的位置的集合。
2、 一種權(quán)利要求1所述基于分塊組織的密文索引結(jié)構(gòu)的管理方法,它包括索引創(chuàng)建,索引維護(hù)和密鑰管理三個部分;索引創(chuàng)建的流程為將輸入的文檔集進(jìn)行分詞,并且記錄詞條在文檔中出現(xiàn)的頻率和位置信息,分詞得到的詞條存儲在內(nèi)存的臨時詞條表中,頻率和位置信息存儲在臨時的倒排表中,臨時詞條表和倒排表大小超過內(nèi)存緩沖區(qū)時,使用Hash函數(shù)將詞條表變換到另外一個集合中;然后對變換后的詞條表進(jìn)行排序;當(dāng)排序結(jié)束后,對于詞條表,每隔固定大小間隔取出一個詞條并組成詞條索引表,然后對詞條索引表,詞條表,以及倒排表進(jìn)行預(yù)加密,即預(yù)留加密后所需要的空間大小,經(jīng)過預(yù)加密后,將詞條索引表,詞條表,倒排表寫入磁盤,構(gòu)成臨時索引;若此時還有文檔沒有進(jìn)行分詞處理,則按照上述的方法繼續(xù)生成臨時索引,當(dāng)所有文檔都解析完后,將臨時索引的合并,并對文件進(jìn)行就地加密,得到加密后的索引;索引維護(hù)分為如下幾種情況(1) 批量添加文檔首先對文檔集進(jìn)行解析,然后對處理結(jié)果進(jìn)行倒排處理,在處理過程中,按照設(shè)置好的分塊參數(shù)對處理結(jié)果進(jìn)行分塊,對數(shù)據(jù)分塊進(jìn)行預(yù)加密,當(dāng)所有的文檔都被處理后并建立完明文索引后,然后與原始磁盤上已有的索引進(jìn)行合并,合并完成后啟動加密機(jī)制來對剛建立的索引塊進(jìn)行就地加密,加密完后即形成了新的密文索引;(2) 增量添加少量文檔將新加入的文檔的詞條進(jìn)行建立一個內(nèi)存索引,該內(nèi)存索引并不加密,當(dāng)內(nèi)存索引達(dá)到給定的閾值時,按照批量建立索引的方法,就將其寫入到磁盤,并進(jìn)行加密;寫入磁盤后,并不立即和原始索引合并,而是建立一個單獨(dú)的小索引,當(dāng)這樣的小索引累積到給定的數(shù)量后,對這些小索引進(jìn)行合并,將小索引集并形成了一個大索引;(3) 刪除文檔首先是創(chuàng)建一個待刪除文檔列表,同時在索引中作標(biāo)記,表示該文檔已經(jīng)刪除,不再供檢索使用,但并不立即從索引中真正刪除文檔,當(dāng)刪除的文檔達(dá)到給定的數(shù)量時,再真正執(zhí)行刪除已經(jīng)有刪除標(biāo)記的文檔;(4) 更新文檔首先刪除需要更新的文檔,然后再添加更新后的文檔,完成文檔的更新;密鑰管理的過程密文索引的密鑰管理利用硬件加密卡來實(shí)現(xiàn),密鑰分為主密鑰和工作密鑰,主密鑰存儲在硬件加密卡中,用來作為生成工作密鑰的一部分;而工作密鑰不在硬件加密卡中存儲,通過主密鑰和密鑰參數(shù)共同作用臨時生成的,生成的過程也在硬件加密卡中進(jìn)行;生成密鑰的同時,調(diào)用硬件加密卡中的加解密算法對需要加密的數(shù)據(jù)塊進(jìn)行加解密;密鑰參數(shù)通過一個隨機(jī)函數(shù)生成,在該實(shí)施中,是采用當(dāng)前系統(tǒng)時間值作為密鑰參數(shù),并且存儲在預(yù)加密的數(shù)據(jù)塊的前面。
全文摘要
本發(fā)明公開了一種基于分塊組織的密文索引結(jié)構(gòu)及其管理方法。針對分塊的密文索引結(jié)構(gòu),在創(chuàng)建索引時,首先是采用基于合并的索引創(chuàng)建方式創(chuàng)建明文索引,然后統(tǒng)一對明文索引進(jìn)行分塊加密?;诿芪乃饕木S護(hù)機(jī)制則是分為索引中文檔的添加、刪除、修改。文檔的添加主要分為二種情況,批量添加和少量添加,批量添加通過在磁盤上創(chuàng)建臨時索引,少量添加則是通過創(chuàng)建內(nèi)存索引。文檔的刪除首先為刪除文檔做一個刪除標(biāo)記,等到適當(dāng)?shù)臅r機(jī)文檔進(jìn)行統(tǒng)一刪除。索引修改則是先刪除原始文檔,然后重新添加新文檔。密鑰管理策略是對索引加密密鑰進(jìn)行分層管理以及通過時間戳機(jī)制來實(shí)現(xiàn)密鑰的更新?;谒饕脑L問控制策略是將訪問控制信息整合到索引當(dāng)中,實(shí)現(xiàn)文檔級粒度的訪問控制。
文檔編號G06F17/30GK101655858SQ200910063738
公開日2010年2月24日 申請日期2009年8月26日 優(yōu)先權(quán)日2009年8月26日
發(fā)明者盧正鼎, 煒 吳, 賽 宋, 文坤梅, 李瑞軒, 李雨前, 昆 燕, 辜希武, 雷小強(qiáng), 高國強(qiáng) 申請人:華中科技大學(xué)