肖飛,王琳,黃正東
(廣州軍區(qū)武漢總醫(yī)院 a.信息科;b.醫(yī)療科,湖北 武漢 430070)
基于對偶編碼函數(shù)的密文過濾技術(shù)在醫(yī)院Oracle數(shù)據(jù)庫中的應(yīng)用研究
肖飛a,王琳b,黃正東a
(廣州軍區(qū)武漢總醫(yī)院 a.信息科;b.醫(yī)療科,湖北 武漢 430070)
對數(shù)據(jù)庫進(jìn)行加密后,如何提高密文數(shù)據(jù)的操作性能是一個非常重要的問題,而基于對偶編碼函數(shù)的密文過濾技術(shù)則可很好地解決此問題。文中在給出對偶編碼函數(shù)的定義后,著重分析了四種基本查詢基于對偶編碼函數(shù)的轉(zhuǎn)換規(guī)則,并利用JAVA語言將基于對偶編碼函數(shù)的密文過濾技術(shù)在醫(yī)院Oracle數(shù)據(jù)庫中進(jìn)行了實現(xiàn),最后通過實驗驗證了此技術(shù)對密文數(shù)據(jù)操作性能有巨大提升。
對偶編碼函數(shù);密文過濾技術(shù);Oracle數(shù)據(jù)庫;數(shù)據(jù)庫加密
Abstract:After carrying on encryption to the database,how to improve the operation performance of the cryptograph data becomes an important problem.Cryptograph filtration technology based on the pairs coding function can settle the problem perfectly.After giving the definition of pairs coding function , conversion rule of four basic query based on the pairs coding function was analyzed expressly in this paper.Cryptograph filtration technology based on the pairs coding function was actualized in oracle database by using JAVA language,in the end great promotion of the technology to cryptograph operation performance was validated by experiment.
Key words:pairs coding function;cryptograph filtration technology;Oracle database;database encryption
對密文數(shù)據(jù)庫中的密文信息進(jìn)行查詢時要進(jìn)行脫密操作,脫密時數(shù)據(jù)庫系統(tǒng)的性能將大大下降,而一些可直接操作密文數(shù)據(jù)的加密方式(如秘密同態(tài)技術(shù)[1、2]及保持有序的加密技術(shù)[3])的抗攻擊能力較差,在保證密文數(shù)據(jù)庫具有較好的抗攻擊能力的同時如何提高密文數(shù)據(jù)的操作性能,是數(shù)據(jù)庫加密中面臨的一個重要問題。基于特征函數(shù)的密文過濾技術(shù)[4]能很好地解決這個問題,該技術(shù)能夠在不影響數(shù)據(jù)庫加密強(qiáng)度的條件下大幅度地提高密文數(shù)據(jù)的檢索性能。
基于特征函數(shù)的密文過濾技術(shù)在對明文數(shù)據(jù)加密的同時,通過某種特征函數(shù)對待加密明文生成一個特征碼信息,此特征碼信息也存儲在數(shù)據(jù)庫中,在對密文數(shù)據(jù)進(jìn)行檢索時,首先根據(jù)特征碼進(jìn)行檢索,對特征碼檢索出的結(jié)果解密后再進(jìn)行明文檢索,與直接解密密文相比,此方式較大幅度地提高了密文檢索的性能。對偶編碼函數(shù)是一種安全性較高的特征函數(shù),由于其中使用了哈希函數(shù)[5],攻擊者很難通過特征碼信息直接分析出加密字段的值,從而保證了數(shù)據(jù)庫加密系統(tǒng)的安全性。
1.1 對偶編碼函數(shù)的定義
定義1 設(shè)有函數(shù)FC:Sl→S2,其中,S1為字符串C1C2...Cn,S2為二進(jìn)制字符串b0bl...bm-1,S2初始值所有位為0,n 1.2 查詢條件的轉(zhuǎn)換 使用對偶編碼函數(shù)后,在進(jìn)行密文查詢時,就需要對原始查詢語句where子句中的條件進(jìn)行轉(zhuǎn)換,將其轉(zhuǎn)換為對加密關(guān)系中對偶編碼字段進(jìn)行查詢的條件語句,轉(zhuǎn)換函數(shù)用Transfer()表示,column1是需要加密的明文字段,C1C2...Cn為條件字符串,其中可能含有通配符,也可能不含通配符,*為通配符,Ci(1≤i≤n)代表條件字符串中第i個字符,F(xiàn)C()是對偶編碼函數(shù),F(xiàn)C_column1是column1所對應(yīng)的對偶編碼,F(xiàn)C_column1M(k,k+1)是column1所對應(yīng)的對偶編碼的第H(CkCk+1)位字符,其中,M(k,k+1)= H(CkCk+1)。 通常,對字符串?dāng)?shù)據(jù)的查詢主要有下列幾種類型。 (1) 相等查詢,它給出一個屬性的一個特定值,即“屬性=值”,那么轉(zhuǎn)換函數(shù)定義如下: 定義2 Transfer(column1=value)=>FC_column1=FC(value)。 (2) 不等查詢,它給出一個屬性不等于某個值,即“屬性<>值”,那么轉(zhuǎn)換函數(shù)定義如下: 定義3 Transfer(column1<>value)<=>(FC_column1<>FC(value) or (FC_column1 =FC(value) and column1<>value))。 (3) LIKE查詢,它給出了一個屬性包含某個特定值。 當(dāng)條件字符串不含通配符時,其格式描述為C1C2...Cn,我們定義:若(FC_column1M(1,2)=1 and FC_column1M(2,3)=1…and FC_column1M(n-1,n)=1),則FC_column1 like FC(C1C2…Cn)。 當(dāng)條件字符串含有通配符時,其格式描述為C1C2…Ck-1CkCk+1…Cn,其中ck為通配符*,1≤k≤n,我們定義:若(FC_column1M(1,2)=1 and FC_column1M(2,3)=1…and FC_column1M(k-2,k-1)=1 and FC_column1M(k+1,k+2)=1…and FC_column1M(n-1,n)=1),則FC_column1 like FC(C1C2…Ck-1CkCk+1…Cn)。 若條件值中除通配符外的字符不足兩個,則就不需再采用對偶編碼過濾,因為不足兩個字符無法產(chǎn)生對偶編碼。 然后,LIKE查詢的轉(zhuǎn)換函數(shù)可定義如下: 定義4 Transfer(column1 like C1C2…Cn)=>FC_column1 like FC(C1C2…Cn)。 (4) NOT LIKE查詢,它給出了一個屬性不包含某個特定值。 當(dāng)條件字符串不含通配符時,其格式描述為C1C2…Cn,我們定義:若(FC_column1M(1,2)=0 or FC_column1M(2,3)=0…or FC_column1M(n-1,n)=0),則FC_column1 not like FC(C1C2…Cn)。 當(dāng)條件字符串含有通配符時,其格式描述為C1C2…Ck-1CkCk+1…Cn,其中ck為通配符*,1≤k≤n,我們定義:若(FC_ column1M(1,2)=0 or FC_column1M(2,3)=0…or FC_column1M(k-2,k-1)=0 or FC_column1M(k+1,k+2)=0…or FC_column1M(n-1,n)=0),則FC_column1 not like FC(C1C2…Ck-1CkCk+1…Cn)。 若條件值中除通配符外的字符不足兩個,則就不需再采用對偶編碼過濾,因為不足兩個字符無法產(chǎn)生對偶編碼。 然后,NOT LIKE查詢的轉(zhuǎn)換函數(shù)可定義如下: 定義5 Transfer(column1 not like C1C2…Cn)<=>(FC_column1 not like FC(C1C2…Cn) or (FC_column1 like FC(C1C2…Cn) and column1 not like C1C2…Cn))。 對于其他條件的查詢操作,均可通過條件轉(zhuǎn)換分解為上述四種基本查詢操作的組合。 2.1 Oracle中JAVA函數(shù)的使用 JAVA是一種具有跨平臺能力的面向?qū)ο笳Z言,具有很高的安全性[6],從Oracle8.1.5版本開始,JAVA編譯運行環(huán)境就被引入Oracle數(shù)據(jù)庫中,其全稱為Oracle Java Server(Jserver)。Jserver的引入,使得在Oracle數(shù)據(jù)庫中可以方便地使用JAVA函數(shù)[7],由此可基于JAVA語言的特性實現(xiàn)了Oracle內(nèi)部函數(shù)無法實現(xiàn)的功能。 在調(diào)用JAVA函數(shù)之前,要先將相應(yīng)的JAVA文件加載到數(shù)據(jù)庫中,加載使用loadjava工具,被加載進(jìn)數(shù)據(jù)庫的JAVA文件中的方法必須被定義為靜態(tài)方法。 加載語法為:loadjava -user username/password@database -resolve -verbose ####.#### 卸載語法為:dropjava -uers username/password@database -verbose ####.#### 其中:####.####為所要加載的文件的文件名及擴(kuò)展名,它可以是JAVA類文件、JAVA源文件或者.Jar或者.Zip文件。 JAVA文件被加載到數(shù)據(jù)庫中之后,其中的方法是不能被PL/SQL直接使用的,必須先為方法創(chuàng)建一個包裝器,包裝器就是一個PL/SQL過程或函數(shù),它對加載到數(shù)據(jù)庫中的JAVA靜態(tài)方法進(jìn)行包裝,Oracle中就是通過包裝器來調(diào)用JAVA文件中的相應(yīng)靜態(tài)方法。 當(dāng)JAVA文件中的靜態(tài)方法沒有返回值時,創(chuàng)建包裝器的語法如下: 當(dāng)JAVA文件中的靜態(tài)方法有返回值時,創(chuàng)建包裝器的語法如下: name '類名.方法名(參數(shù)列表) return Java規(guī)范的返回值類型';/ 當(dāng)數(shù)據(jù)庫中的其他用戶要調(diào)用此包裝器時,必須由此包裝器的OWNER來對其進(jìn)行授權(quán),授權(quán)語句包括兩部分,第一部分為訪問此JAVA資源的權(quán)限,第二部分為執(zhí)行此包裝器的權(quán)限。授權(quán)語句如下: 2.2 對偶編碼函數(shù)在Oracle中的實現(xiàn) 使用JAVA語言[8]實現(xiàn)對偶編碼函數(shù)類CharactorCoding,其類主要結(jié)構(gòu)如表1所示。利用loadjava工具將對偶編碼函數(shù)類加載進(jìn)Oracle數(shù)據(jù)庫,分別為對偶編碼生成函數(shù)、對偶編碼相等比較函數(shù)及對偶編碼相似比較函數(shù)創(chuàng)建對象包裝器CreateCharactorCoding(sinput varchar2)、CharactorCodingEqual (spcode varchar2,sarg varchar2)和 CharactorCodingLike( spcode varchar2,sarg varchar2)。 表 1 對偶編碼函數(shù)類主要結(jié)構(gòu) 3.1 基于對偶編碼函數(shù)的密文過濾技術(shù) 執(zhí)行密文操作時,首先對操作語句的條件語句部分進(jìn)行轉(zhuǎn)換,在加解密操作之前先根據(jù)對偶編碼過濾掉部分記錄,然后將剩余記錄進(jìn)行解密,再將解密后的數(shù)據(jù)根據(jù)原始條件語句進(jìn)行精細(xì)過濾,從而確定數(shù)據(jù)操作的范圍。 以包含5萬條記錄的診斷記錄表DIAGNOSIS(patient_ id,visit_id,diagnosis_type,diagnosis_no,diagnosis_text)為例來演示基于對偶編碼函數(shù)的密文過濾技術(shù)在Oracle中的實現(xiàn)。診斷記錄表只建立主鍵索引(patient_id,visit_id,diagnosis_no),加密前其結(jié)構(gòu)如表2所示。 表 2 診斷記錄表DIAGNOSIS 選擇AES算法[9,10]為加密算法,AES_encrypt()為根據(jù)此算法設(shè)計的加密函數(shù),extendkey為128位原始密鑰生成的擴(kuò)展密鑰。待加密數(shù)據(jù)列為diagnosis_text列,此列明文寬度48位,數(shù)據(jù)加密前先對此列進(jìn)行擴(kuò)展以滿足加密后數(shù)據(jù)存儲的需要,進(jìn)行加密操作后,此列數(shù)據(jù)將被密文數(shù)據(jù)替代。對于待加密的每個數(shù)據(jù)項,為其生成一個48位對偶編碼,實現(xiàn)時將對偶編碼與密文信息存儲在同一列中,因此實際加密后的診斷記錄表為DIAGNOSIS(patient_id,visit_id,diagnosis_ type,diagnosis_no,CreateCharactorCoding(diagnosis_text)||AES_ encrypt(diagnosis_text,extendkey))。 其中,對密文數(shù)據(jù)的操作,可分為下面幾種類型。 3.1.1 查詢操作 對于未涉及到加密列(查詢內(nèi)容及查詢條件中均未涉及)的查詢,加密操作對其沒有影響,對于涉及到加密列的查詢,均可通過條件轉(zhuǎn)換分解為下述四種基本查詢操作的組合。其中AES_dec_user()函數(shù)為將密文診斷記錄列解密為明文的解密函數(shù),spara為解密密鑰。 (1) 相等條件查詢 對diagnosis_text列加密前,查詢診斷記錄的相等條件查詢語句為: 3.1.2 插入操作 加密操作前,對診斷記錄表進(jìn)行插入的語句為: 其中,where子句的變化規(guī)則同查詢操作中的變化規(guī)則。 3.1.3 更新操作 對于未涉及到加密列(查詢內(nèi)容及查詢條件中均未涉及)的更新,加密操作對其沒有影響,而對于涉及到加密列的,操作語句的變化如下。 加密操作前,對診斷記錄表進(jìn)行更新的語句為: 其中,where子句的變化規(guī)則同查詢操作中的變化規(guī)則。 3.1.4 刪除操作 刪除操作時,當(dāng)刪除條件未涉及到加密列時,加密前后的操作語句不變。當(dāng)刪除條件涉及到加密列時,操作語句的where子句發(fā)生變化,變化規(guī)則同查詢操作中的變化規(guī)則。 3.2 實驗及實驗分析 3.2.1 實驗環(huán)境 實驗機(jī)為DELL4600服務(wù)器(至強(qiáng)2.4CPU,2G內(nèi)存,5*146G硬 盤,RAID5), 操 作 系 統(tǒng) 為 WINDOWS2000 SERVER,數(shù)據(jù)庫為Oracle8.1.7,JDK版本為1.4.0。 表 3 查詢性能實驗數(shù)據(jù)記錄表 3.2.2 實驗方法 選擇包含5萬條記錄的診斷記錄表DIAGNOSIS(patient_ id,visit_id,diagnosis_type,diagnosis_no,diagnosis_text)為實驗表,其中診斷列diagnosis_text為加密數(shù)據(jù)列,存儲擴(kuò)展前此列明文寬度為48位,生成的對偶編碼長度也為48位。診斷記錄表只建立主鍵索引(patient_id,visit_id,diagnosis_no),查詢其中“上呼吸道感染”診斷,對比測試下面兩種方式的查詢時間,各查詢時間均測試10次求其平均值。 方式1:diagnosis_text為密文形式,查詢方式為本方案中基于對偶編碼過濾查詢。 方式2:diagnosis_text為密文形式,查詢方式為全表解密后查詢。 實驗包括四個測試,分別用于測試相等條件查詢、相似條件查詢、不等條件查詢及不相似條件查詢四種情況。每個測試又包括兩部分,第一部分用于記錄以密文形式返回查詢結(jié)果所用時間,第二部分用于記錄以明文形式返回查詢結(jié)果所用時間。 測試1:以相等條件查詢。 查詢條件:明文diagnosis_text=’上呼吸道感染’ 查詢結(jié)果:共2450條滿足查詢條件記錄。 測試2:以相似條件查詢。 查詢條件:明文diagnosis_text like ’%上呼吸道感染%’ 查詢結(jié)果:共2712條滿足查詢條件記錄。 測試3:以不等條件查詢。 查詢條件:明文diagnosis_text<>’上呼吸道感染’ 查詢結(jié)果:共47550條滿足查詢條件記錄。 測試4:以不相似條件查詢。 查詢條件:明文diagnosis_text not like ’%上呼吸道感染%’。 查詢結(jié)果:共47288條滿足查詢條件記錄。 各測試中兩種查詢方式花費時間及實際解密數(shù)據(jù)行數(shù)如表3所示。 3.2.3 實驗分析及結(jié)論 由表3可知,四個測試中均為方式2花費時間較長,這與方式1為對部分?jǐn)?shù)據(jù)脫密后查詢、方式2為對所有數(shù)據(jù)脫密后查詢的實際相符。各測試中均為第二部分花費時間較長,這與第二部分多了對密文結(jié)果解密的時間開銷相符。 分析1:通過各測試中兩種方式花費時間對比可以看出,基于對偶編碼過濾查詢的效率明顯高于全表脫密的查詢,并且,本方案中采用的48位對偶編碼的過濾效率極高,在相等和相似條件查詢中過濾效率分別達(dá)到99.93%和99.90%,其中,過濾效率=根據(jù)對偶編碼函數(shù)過濾掉的不符合查詢條件的數(shù)據(jù)行數(shù)/根據(jù)原始查詢條件過濾掉的不符合查詢條件的數(shù)據(jù)。 分析2:各測試中第二部分均比本方法第一部分花費時間長,這與第二部分多了對密文結(jié)果解密的時間開銷相符,并且,由各測試第二部分和第一部分的時間差值可以看出,查詢結(jié)果解密的時間開銷與查詢結(jié)果解密的數(shù)據(jù)行數(shù)基本成正比例關(guān)系。 分析3:分析各測試中各部分兩種方法的查詢時間與實際解密數(shù)據(jù)行數(shù)(查詢條件解密數(shù)據(jù)行數(shù)+查詢結(jié)果解密數(shù)據(jù)行數(shù))可知,拋開解密時間開銷外,查詢本身所占時間開銷極小,而解密時間開銷與實際解密數(shù)據(jù)行數(shù)基本成正比例關(guān)系。 由上述分析,可得出以下結(jié)論:在對密文數(shù)據(jù)的查詢中,查詢本身所占時間開銷較小,解密所占時間開銷較大,在扣除查詢本身所花費時間后,剩余查詢時間開銷與解密的數(shù)據(jù)量成正比。采用對偶編碼過濾技術(shù)對密文數(shù)據(jù)進(jìn)行查詢時,其查詢效率遠(yuǎn)高于全表脫密的查詢方式,可極大地提高密文數(shù)據(jù)操作的性能。 [1] Rivest R L,Adlem A L,Dertouzos M L.On Data Banks and Privacy Homomorphism[M].//Foundations of SecureComputation.New York:Academic Press,1978:169-178. [2] 楊勇,方勇,周安民.秘密同態(tài)技術(shù)研究及其算法實現(xiàn)[J].計算機(jī)工程,2005,37(2):157-159. [3] R.Agrawal,J.Kirenan,R.Srikant,et al.Order Preserving Encryption for Numeric Data[C].//SIGMOD.Proceedings of the 2004 ACM SIGMOD international conference on Management of data.New York:ACM Press,2004:563-574. [4] Zhengfei Wang,Jing Dai,Wei Wang,et al.Fast Query over Encrypted Character Data in Database[J].International Symposium on Computer Information Science,2004,4(4):289-300. [5] 強(qiáng)士卿,程光.基于流的哈希函數(shù)比較分析研究[J].南京師范大學(xué)學(xué)報(工程技術(shù)版),2008,8(4):25-28. [6] 蔣曹清.Java安全體系結(jié)構(gòu)研究[J].廣西科學(xué)院學(xué)報,2006,22(4): 246-249. [7] Bjarki Holm,John Carnell,等.Oracle 9i Java程序設(shè)計[M].康博,譯.北京:清華大學(xué)出版社,2002:11-387. [8] 霍斯特曼,科奈爾.Java2核心技術(shù)卷I:原理[M].李如豹,等.譯.第五版.北京:機(jī)械工業(yè)出版社,2002:2-86. [9] FIPS 197.Advanced Encryption Standard[M].US:National Institute of Scienceand Technology,2001:1-51. [10] Nechvatal J,Bassham E,Bassham L,et al.Report on the Development of the Advanced Encryption Standard [J]. Res National Institute of Standards and Technology, 2000,106(3):511-577. Application Research of Cryptograph Filtration Technology Based on the Pairs Coding Function in Oracle Database XIAO Feia,WANG Linb,HUANG Zheng-donga TP309.7 B 1674-1633(2010)08-0037-05 2009-04-20 2009-11-10 作者郵箱:hawking-1979@163.com2 對偶編碼函數(shù)在Oracle中的實現(xiàn)
3 基于對偶編碼函數(shù)的密文過濾技術(shù)在Oracle中的實現(xiàn)
(a.Information Department;b. Medical Department,Wuhan General Hospital of Guangzhou Command,Wuhan Hubei 430070,China)