專利名稱:密文數(shù)據(jù)庫檢索技術(shù)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明屬于計(jì)算機(jī)軟件相關(guān)領(lǐng)域,是加密技術(shù)在數(shù)據(jù)庫中的應(yīng)用。
背景技術(shù):
目前,大型關(guān)系型數(shù)據(jù)庫管理系統(tǒng)都具備一整套完善的安全管理手段,包括識別角色權(quán)限、訪問控制、安全審計(jì)等功能。其中的角色權(quán)限管理已經(jīng)相當(dāng)完善,基本能夠滿足權(quán)限分配的需要;訪問控制已經(jīng)精確到字段級,達(dá)到關(guān)系型數(shù)據(jù)庫管理的最小粒度。
盡管數(shù)據(jù)庫管理系統(tǒng)本身的安全措施已經(jīng)相當(dāng)完備,但是仍然無法完全解決數(shù)據(jù)安全的需求。業(yè)務(wù)數(shù)據(jù)管理的安全層次與數(shù)據(jù)庫管理系統(tǒng)的安全層次往往不一致,數(shù)據(jù)庫管理系統(tǒng)中具有超級權(quán)限的管理員往往不具備業(yè)務(wù)數(shù)據(jù)管理的超級職能。數(shù)據(jù)安全不僅要抵抗來自網(wǎng)絡(luò)黑客的安全威脅,還要防止來自網(wǎng)絡(luò)內(nèi)部,特別是數(shù)據(jù)庫管理員的安全威脅,而目前的數(shù)據(jù)庫管理系統(tǒng)安全體系,幾乎不能對數(shù)據(jù)庫管理員采取任何安全限制。若要滿足業(yè)務(wù)數(shù)據(jù)的安全需要,必須在現(xiàn)有數(shù)據(jù)庫管理系統(tǒng)之外,建立一套符合業(yè)務(wù)數(shù)據(jù)安全需要的新的安全體系,在新的安全體系中對數(shù)據(jù)庫中的敏感數(shù)據(jù)進(jìn)行加密處理,以阻斷來自數(shù)據(jù)庫管理員的安全威脅。
發(fā)明內(nèi)容
檢索的目的是要從原文中查找特定的詞,密文檢索希望在不解密的情況下在密文中找到檢索詞在原明文中的位置,由于原文在加密過程中經(jīng)過了充分的混合和擴(kuò)散,原文中的字、詞都是與周圍字、詞一起加密的,這些字、詞相互影響,與檢索詞單獨(dú)加密形成的密文沒有對應(yīng)關(guān)系,因此,無法通過直接比對密文與檢索詞密文得到檢索詞的位置。
為了保證在密文數(shù)據(jù)在不解密的前提下被檢索出來,必須保證相同的明文字加密后能夠得到相同的密文。對于IDEA分組加密算法,如果密鑰相同,完全相同的明文分組會得到相同的密文,不同分組內(nèi)的明文,因?yàn)槭苤車渌帧⒃~的影響,明文與密文完全沒有對應(yīng)關(guān)系。因此,保證密文檢索的前提是,一個64位分組只處理一個明文字。如果明文以Unicode的形式編碼,一個明文字對應(yīng)2個字節(jié),即16位二進(jìn)制數(shù),因此加密前首先要將這個16位二進(jìn)制數(shù)轉(zhuǎn)換成一個64位分組。
轉(zhuǎn)換的方式有多種,最簡單的方式是將1轉(zhuǎn)換成1111,將0轉(zhuǎn)換成0000,這樣,每個64位分組就與一個明文字相對應(yīng)。還可以有其它可能的轉(zhuǎn)換方式,如末尾添1或末尾添0;將16位二進(jìn)制數(shù)重復(fù)4次;添加一個擴(kuò)展密鑰,密鑰與16位二進(jìn)制數(shù)計(jì)算得到一個64位分組,等等。
檢索時將查詢詞分解成單有字,將每個字轉(zhuǎn)換成Unicode編碼格式,然后將這些16位二進(jìn)制數(shù)按照上面的辦法轉(zhuǎn)換成64位分組,使用加密原文相同的密鑰進(jìn)行加密運(yùn)算,得到查詢詞密文。將查詢詞密文提交到查詢服務(wù)器,與原文密文進(jìn)行比對,就可以得到查詢結(jié)果。
二進(jìn)制數(shù)據(jù)的傳輸、存儲和比較都不十分方便,實(shí)際應(yīng)用時可以采用Base64編碼,將二進(jìn)制數(shù)轉(zhuǎn)換成字符型數(shù)據(jù)。
具體實(shí)施例方式
要加密的數(shù)據(jù)可能有各種數(shù)據(jù)類型,加密后經(jīng)過Base64編碼,統(tǒng)一變成字符型數(shù)據(jù),因此密文數(shù)據(jù)庫的密文字段的數(shù)據(jù)類型可以統(tǒng)一定義為字符類型。如果數(shù)據(jù)只在一定時間內(nèi)需要保密,過了保密期限數(shù)據(jù)要以明文形式存儲,或者同一個數(shù)據(jù)表中只有部分記錄有保密要求,其它記錄需要存儲明文,就需要對同一個數(shù)據(jù)在數(shù)據(jù)表中建明文和密文兩個字段,明文字段采用明文需要的數(shù)據(jù)類型,密文字段用字符類型。在同一時刻的同一條記錄,明文字段和密文字段只能由一個被填充。
1、加密加密前首先要生成對稱密鑰(以下簡稱密鑰),為了防止來自網(wǎng)絡(luò)內(nèi)部,尤其是系統(tǒng)管理員的安全威脅,密鑰應(yīng)該在客戶端生成。
加密前首先要將數(shù)字、日期等數(shù)據(jù)統(tǒng)一轉(zhuǎn)換成字符型數(shù)據(jù)。
日期型的數(shù)據(jù)轉(zhuǎn)換起來比較簡單,可以直接將日期格式化為字符串,如“2004-05-0121:30:05”,注意格式轉(zhuǎn)化中年、月、日、時、分、秒位數(shù)要添滿,“5月”要用“05月”,時間用24小時格式,以保證檢索時可以按位比較。
數(shù)字型數(shù)據(jù)的轉(zhuǎn)換比較復(fù)雜,需要處理正負(fù)號、小數(shù)點(diǎn)、指數(shù)等。首先要處理正負(fù)號,正號不能忽略,要轉(zhuǎn)換成“1”,負(fù)號轉(zhuǎn)換成“0”;然后寫指數(shù)部分,指數(shù)的位數(shù)要固定,根據(jù)數(shù)據(jù)的范圍選一個合適的長度,位數(shù)不足的要在前面補(bǔ)零;然后是底數(shù)的小數(shù)點(diǎn)以后的部分。
假設(shè)指數(shù)部分取三位,轉(zhuǎn)換舉例如下365 = +0.365×10+003 轉(zhuǎn)換成 11003365-365.056 = -0.36556×10+003轉(zhuǎn)換成 010033650560.000365 = +0.365×10-003 轉(zhuǎn)換成 10000365加密前進(jìn)行轉(zhuǎn)換的目的是為了保證檢索時可以按照字符位進(jìn)行比較,通過比較字符,得到數(shù)值或日期的大小。
將轉(zhuǎn)換后的字符串分解成單字,對每個字單獨(dú)進(jìn)行加密處理,將單字密文合并后得到密文。
將密鑰用自己的公開密鑰加密得到密鑰密文。
將密文與密鑰密文保存到密文庫,完成加密操作,見圖1。
2、密文檢索密文檢索時首先要從密文庫中下載密鑰密文,然后用自己的私有密鑰解密,得到密鑰。
按照與明文加密時相同的方法將檢索詞轉(zhuǎn)換成字符,然后將字符拆分位單字,用密鑰對每個字單獨(dú)進(jìn)行加密處理,將單字密文合成檢索詞密文,提交到密文庫進(jìn)行檢索,見圖2。
由于明文字符與密文分組有一一對應(yīng)關(guān)系,對于字符型數(shù)據(jù)常用的“等于”或“包含”類查詢,可以保持原來的查詢語句不變,直接在密文庫中查找檢索詞密文即可。對于數(shù)字類型和日期類型常用的“大于”或“小于”等查詢條件,由于加密后明文中的大小關(guān)系與密文字符串的大小關(guān)系不一致,明文所具有的數(shù)值大小比較在密文中不復(fù)存在,因此,需要對檢索條件進(jìn)行重構(gòu),使其能夠完成密文數(shù)值大小的比較。
重構(gòu)檢索條件時首先將“大于等于X”拆分為“大于X”或“等于X”兩個檢索條件,同樣將“小于等于X”拆分為“小于X”或“等于X”兩個檢索條件?!暗扔凇辈樵儣l件可以直接進(jìn)行密文比對。
由于加密前在對日期和數(shù)字型數(shù)據(jù)進(jìn)行轉(zhuǎn)換時已經(jīng)為檢索作了準(zhǔn)備,這些數(shù)據(jù)的大小比較與轉(zhuǎn)換后的字符串按位比較可以取得一致,因此,密文檢索條件的重構(gòu)可以按照每個明文字符對應(yīng)的密文分組為單位進(jìn)行。以“大于0.000365”為例(轉(zhuǎn)換后為10000365)首先處理符號位,體現(xiàn)在檢索條件中為“第一個密文分組為1的密文”(限制查詢結(jié)果為正數(shù));然后是指數(shù)符號位,體現(xiàn)在檢索條件中為“第二個密文分組為1的密文或0的密文”(對于查詢結(jié)果是否大于1沒有限制)。
然后是數(shù)字的比較,可以按位進(jìn)行“大于0”體現(xiàn)在檢索條件為“這個密文分組可以是0至9的任何一個數(shù)字的密文”,“大于3”體現(xiàn)在檢索條件為“這個密文分組可以是3至9的任何一個數(shù)字的密文”,其余以此類推。
最后的一位(大于5)的檢索條件為“這個密文分組可以是6至9的任何一個數(shù)字的密文”或“這個密文分組是5的密文且后面還有其它數(shù)字(即密文比查詢的密文位數(shù)長)”。
組合以上檢索條件可以查詢得到“大于0.000365”的數(shù)。
3、解密解密時首先要從密文庫中下載密鑰密文,然后用自己的私有密鑰解密,得到密鑰。然后下載密文,用密鑰解密成明文字符,將解密后的明文字符串按照與加密時相反的規(guī)則轉(zhuǎn)換成原來的數(shù)據(jù)類型,見圖3。
圖1數(shù)據(jù)加密流程。
圖2密文檢索流程。
圖3數(shù)據(jù)解密流程。
權(quán)利要求
1.為適合密文數(shù)據(jù)庫檢索對分組加密算法的改進(jìn),其特征是將單個字對應(yīng)的二進(jìn)制數(shù)進(jìn)行擴(kuò)展,達(dá)到與加密算法分組位數(shù)相同的長度,在密鑰相同的條件下,相同明文字的密文相同,不受上下文中周圍其它字的影響,通過比檢索詞的密文,實(shí)現(xiàn)不解密條件下的數(shù)據(jù)庫查詢檢索。
2.為實(shí)現(xiàn)能夠通過密文比較明文大小而對數(shù)值型、日期型等數(shù)據(jù)類型進(jìn)行的字符串轉(zhuǎn)換,其特征是轉(zhuǎn)換后的字符串可以按照字符位比較得到原明文數(shù)據(jù)的大小,通過查詢語句重構(gòu)可以實(shí)現(xiàn)不解密條件下的數(shù)據(jù)庫數(shù)值型、日期型等字段的比較查詢。
全文摘要
此項(xiàng)發(fā)明基于目前常用的PKI體系,在不改變數(shù)據(jù)庫管理系統(tǒng)內(nèi)部運(yùn)行機(jī)制的前提下,通過程序邏輯實(shí)現(xiàn)了密文數(shù)據(jù)庫,并在一定程度上保持了數(shù)據(jù)庫原有的查詢檢索功能。為了保證密文數(shù)據(jù)在不解密的情況下能夠被檢索出來,日期、數(shù)字類型的數(shù)據(jù)需要按照一定的規(guī)則轉(zhuǎn)換成字符,并且加密使用的分組密碼算法需要進(jìn)行一些改造。
文檔編號H04L9/00GK1588366SQ20041007011
公開日2005年3月2日 申請日期2004年8月2日 優(yōu)先權(quán)日2004年8月2日
發(fā)明者李新 申請人:中國科學(xué)院計(jì)算機(jī)網(wǎng)絡(luò)信息中心