基于对偶编码函数的密文过滤技术在医院Oracle数据库中的应用研究

2010-10-09 08:23肖飞王琳黄正东
中国医疗设备 2010年1期
关键词:对偶密文解密

肖飞,王琳,黄正东

(广州军区武汉总医院 a.信息科;b.医疗科,湖北 武汉 430070)

基于对偶编码函数的密文过滤技术在医院Oracle数据库中的应用研究

肖飞a,王琳b,黄正东a

(广州军区武汉总医院 a.信息科;b.医疗科,湖北 武汉 430070)

对数据库进行加密后,如何提高密文数据的操作性能是一个非常重要的问题,而基于对偶编码函数的密文过滤技术则可很好地解决此问题。文中在给出对偶编码函数的定义后,着重分析了四种基本查询基于对偶编码函数的转换规则,并利用JAVA语言将基于对偶编码函数的密文过滤技术在医院Oracle数据库中进行了实现,最后通过实验验证了此技术对密文数据操作性能有巨大提升。

对偶编码函数;密文过滤技术;Oracle数据库;数据库加密

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

0 前言

对密文数据库中的密文信息进行查询时要进行脱密操作,脱密时数据库系统的性能将大大下降,而一些可直接操作密文数据的加密方式(如秘密同态技术[1、2]及保持有序的加密技术[3])的抗攻击能力较差,在保证密文数据库具有较好的抗攻击能力的同时如何提高密文数据的操作性能,是数据库加密中面临的一个重要问题。基于特征函数的密文过滤技术[4]能很好地解决这个问题,该技术能够在不影响数据库加密强度的条件下大幅度地提高密文数据的检索性能。

基于特征函数的密文过滤技术在对明文数据加密的同时,通过某种特征函数对待加密明文生成一个特征码信息,此特征码信息也存储在数据库中,在对密文数据进行检索时,首先根据特征码进行检索,对特征码检索出的结果解密后再进行明文检索,与直接解密密文相比,此方式较大幅度地提高了密文检索的性能。对偶编码函数是一种安全性较高的特征函数,由于其中使用了哈希函数[5],攻击者很难通过特征码信息直接分析出加密字段的值,从而保证了数据库加密系统的安全性。

1 对偶编码函数

1.1 对偶编码函数的定义

定义1 设有函数FC:Sl→S2,其中,S1为字符串C1C2...Cn,S2为二进制字符串b0bl...bm-1,S2初始值所有位为0,n

1.2 查询条件的转换

使用对偶编码函数后,在进行密文查询时,就需要对原始查询语句where子句中的条件进行转换,将其转换为对加密关系中对偶编码字段进行查询的条件语句,转换函数用Transfer()表示,column1是需要加密的明文字段,C1C2...Cn为条件字符串,其中可能含有通配符,也可能不含通配符,*为通配符,Ci(1≤i≤n)代表条件字符串中第i个字符,FC()是对偶编码函数,FC_column1是column1所对应的对偶编码,FC_column1M(k,k+1)是column1所对应的对偶编码的第H(CkCk+1)位字符,其中,M(k,k+1)= H(CkCk+1)。

通常,对字符串数据的查询主要有下列几种类型。

(1) 相等查询,它给出一个属性的一个特定值,即“属性=值”,那么转换函数定义如下:

定义2 Transfer(column1=value)=>FC_column1=FC(value)。

(2) 不等查询,它给出一个属性不等于某个值,即“属性<>值”,那么转换函数定义如下:

定义3 Transfer(column1<>value)<=>(FC_column1<>FC(value) or (FC_column1 =FC(value) and column1<>value))。

(3) LIKE查询,它给出了一个属性包含某个特定值。

当条件字符串不含通配符时,其格式描述为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)。

当条件字符串含有通配符时,其格式描述为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)。

若条件值中除通配符外的字符不足两个,则就不需再采用对偶编码过滤,因为不足两个字符无法产生对偶编码。

然后,LIKE查询的转换函数可定义如下:

定义4 Transfer(column1 like C1C2…Cn)=>FC_column1 like FC(C1C2…Cn)。

(4) NOT LIKE查询,它给出了一个属性不包含某个特定值。

当条件字符串不含通配符时,其格式描述为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)。

当条件字符串含有通配符时,其格式描述为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)。

若条件值中除通配符外的字符不足两个,则就不需再采用对偶编码过滤,因为不足两个字符无法产生对偶编码。

然后,NOT LIKE查询的转换函数可定义如下:

定义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))。

对于其他条件的查询操作,均可通过条件转换分解为上述四种基本查询操作的组合。

2 对偶编码函数在Oracle中的实现

2.1 Oracle中JAVA函数的使用

JAVA是一种具有跨平台能力的面向对象语言,具有很高的安全性[6],从Oracle8.1.5版本开始,JAVA编译运行环境就被引入Oracle数据库中,其全称为Oracle Java Server(Jserver)。Jserver的引入,使得在Oracle数据库中可以方便地使用JAVA函数[7],由此可基于JAVA语言的特性实现了Oracle内部函数无法实现的功能。

在调用JAVA函数之前,要先将相应的JAVA文件加载到数据库中,加载使用loadjava工具,被加载进数据库的JAVA文件中的方法必须被定义为静态方法。

加载语法为:loadjava -user username/password@database -resolve -verbose ####.####

卸载语法为:dropjava -uers username/password@database -verbose ####.####

其中:####.####为所要加载的文件的文件名及扩展名,它可以是JAVA类文件、JAVA源文件或者.Jar或者.Zip文件。

JAVA文件被加载到数据库中之后,其中的方法是不能被PL/SQL直接使用的,必须先为方法创建一个包装器,包装器就是一个PL/SQL过程或函数,它对加载到数据库中的JAVA静态方法进行包装,Oracle中就是通过包装器来调用JAVA文件中的相应静态方法。

当JAVA文件中的静态方法没有返回值时,创建包装器的语法如下:

当JAVA文件中的静态方法有返回值时,创建包装器的语法如下:

name '类名.方法名(参数列表) return Java规范的返回值类型';/

当数据库中的其他用户要调用此包装器时,必须由此包装器的OWNER来对其进行授权,授权语句包括两部分,第一部分为访问此JAVA资源的权限,第二部分为执行此包装器的权限。授权语句如下:

2.2 对偶编码函数在Oracle中的实现

使用JAVA语言[8]实现对偶编码函数类CharactorCoding,其类主要结构如表1所示。利用loadjava工具将对偶编码函数类加载进Oracle数据库,分别为对偶编码生成函数、对偶编码相等比较函数及对偶编码相似比较函数创建对象包装器CreateCharactorCoding(sinput varchar2)、CharactorCodingEqual (spcode varchar2,sarg varchar2)和 CharactorCodingLike( spcode varchar2,sarg varchar2)。

表 1 对偶编码函数类主要结构

3 基于对偶编码函数的密文过滤技术在Oracle中的实现

3.1 基于对偶编码函数的密文过滤技术

执行密文操作时,首先对操作语句的条件语句部分进行转换,在加解密操作之前先根据对偶编码过滤掉部分记录,然后将剩余记录进行解密,再将解密后的数据根据原始条件语句进行精细过滤,从而确定数据操作的范围。

以包含5万条记录的诊断记录表DIAGNOSIS(patient_ id,visit_id,diagnosis_type,diagnosis_no,diagnosis_text)为例来演示基于对偶编码函数的密文过滤技术在Oracle中的实现。诊断记录表只建立主键索引(patient_id,visit_id,diagnosis_no),加密前其结构如表2所示。

表 2 诊断记录表DIAGNOSIS

选择AES算法[9,10]为加密算法,AES_encrypt()为根据此算法设计的加密函数,extendkey为128位原始密钥生成的扩展密钥。待加密数据列为diagnosis_text列,此列明文宽度48位,数据加密前先对此列进行扩展以满足加密后数据存储的需要,进行加密操作后,此列数据将被密文数据替代。对于待加密的每个数据项,为其生成一个48位对偶编码,实现时将对偶编码与密文信息存储在同一列中,因此实际加密后的诊断记录表为DIAGNOSIS(patient_id,visit_id,diagnosis_ type,diagnosis_no,CreateCharactorCoding(diagnosis_text)||AES_ encrypt(diagnosis_text,extendkey))。

其中,对密文数据的操作,可分为下面几种类型。

3.1.1 查询操作

对于未涉及到加密列(查询内容及查询条件中均未涉及)的查询,加密操作对其没有影响,对于涉及到加密列的查询,均可通过条件转换分解为下述四种基本查询操作的组合。其中AES_dec_user()函数为将密文诊断记录列解密为明文的解密函数,spara为解密密钥。

(1) 相等条件查询

对diagnosis_text列加密前,查询诊断记录的相等条件查询语句为:

3.1.2 插入操作

加密操作前,对诊断记录表进行插入的语句为:

其中,where子句的变化规则同查询操作中的变化规则。

3.1.3 更新操作

对于未涉及到加密列(查询内容及查询条件中均未涉及)的更新,加密操作对其没有影响,而对于涉及到加密列的,操作语句的变化如下。

加密操作前,对诊断记录表进行更新的语句为:

其中,where子句的变化规则同查询操作中的变化规则。

3.1.4 删除操作

删除操作时,当删除条件未涉及到加密列时,加密前后的操作语句不变。当删除条件涉及到加密列时,操作语句的where子句发生变化,变化规则同查询操作中的变化规则。

3.2 实验及实验分析

3.2.1 实验环境

实验机为DELL4600服务器(至强2.4CPU,2G内存,5*146G硬 盘,RAID5), 操 作 系 统 为 WINDOWS2000 SERVER,数据库为Oracle8.1.7,JDK版本为1.4.0。

表 3 查询性能实验数据记录表

3.2.2 实验方法

选择包含5万条记录的诊断记录表DIAGNOSIS(patient_ id,visit_id,diagnosis_type,diagnosis_no,diagnosis_text)为实验表,其中诊断列diagnosis_text为加密数据列,存储扩展前此列明文宽度为48位,生成的对偶编码长度也为48位。诊断记录表只建立主键索引(patient_id,visit_id,diagnosis_no),查询其中“上呼吸道感染”诊断,对比测试下面两种方式的查询时间,各查询时间均测试10次求其平均值。

方式1:diagnosis_text为密文形式,查询方式为本方案中基于对偶编码过滤查询。

方式2:diagnosis_text为密文形式,查询方式为全表解密后查询。

实验包括四个测试,分别用于测试相等条件查询、相似条件查询、不等条件查询及不相似条件查询四种情况。每个测试又包括两部分,第一部分用于记录以密文形式返回查询结果所用时间,第二部分用于记录以明文形式返回查询结果所用时间。

测试1:以相等条件查询。

查询条件:明文diagnosis_text=’上呼吸道感染’

查询结果:共2450条满足查询条件记录。

测试2:以相似条件查询。

查询条件:明文diagnosis_text like ’%上呼吸道感染%’

查询结果:共2712条满足查询条件记录。

测试3:以不等条件查询。

查询条件:明文diagnosis_text<>’上呼吸道感染’

查询结果:共47550条满足查询条件记录。

测试4:以不相似条件查询。

查询条件:明文diagnosis_text not like ’%上呼吸道感染%’。

查询结果:共47288条满足查询条件记录。

各测试中两种查询方式花费时间及实际解密数据行数如表3所示。

3.2.3 实验分析及结论

由表3可知,四个测试中均为方式2花费时间较长,这与方式1为对部分数据脱密后查询、方式2为对所有数据脱密后查询的实际相符。各测试中均为第二部分花费时间较长,这与第二部分多了对密文结果解密的时间开销相符。

分析1:通过各测试中两种方式花费时间对比可以看出,基于对偶编码过滤查询的效率明显高于全表脱密的查询,并且,本方案中采用的48位对偶编码的过滤效率极高,在相等和相似条件查询中过滤效率分别达到99.93%和99.90%,其中,过滤效率=根据对偶编码函数过滤掉的不符合查询条件的数据行数/根据原始查询条件过滤掉的不符合查询条件的数据。

分析2:各测试中第二部分均比本方法第一部分花费时间长,这与第二部分多了对密文结果解密的时间开销相符,并且,由各测试第二部分和第一部分的时间差值可以看出,查询结果解密的时间开销与查询结果解密的数据行数基本成正比例关系。

分析3:分析各测试中各部分两种方法的查询时间与实际解密数据行数(查询条件解密数据行数+查询结果解密数据行数)可知,抛开解密时间开销外,查询本身所占时间开销极小,而解密时间开销与实际解密数据行数基本成正比例关系。

由上述分析,可得出以下结论:在对密文数据的查询中,查询本身所占时间开销较小,解密所占时间开销较大,在扣除查询本身所花费时间后,剩余查询时间开销与解密的数据量成正比。采用对偶编码过滤技术对密文数据进行查询时,其查询效率远高于全表脱密的查询方式,可极大地提高密文数据操作的性能。

[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] 杨勇,方勇,周安民.秘密同态技术研究及其算法实现[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] 强士卿,程光.基于流的哈希函数比较分析研究[J].南京师范大学学报(工程技术版),2008,8(4):25-28.

[6] 蒋曹清.Java安全体系结构研究[J].广西科学院学报,2006,22(4): 246-249.

[7] Bjarki Holm,John Carnell,等.Oracle 9i Java程序设计[M].康博,译.北京:清华大学出版社,2002:11-387.

[8] 霍斯特曼,科奈尔.Java2核心技术卷I:原理[M].李如豹,等.译.第五版.北京:机械工业出版社,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
(a.Information Department;b. Medical Department,Wuhan General Hospital of Guangzhou Command,Wuhan Hubei 430070,China)

TP309.7

B

1674-1633(2010)08-0037-05

2009-04-20

2009-11-10

作者邮箱:hawking-1979@163.com

猜你喜欢
对偶密文解密
对偶τ-Rickart模
Hilbert空间中广义框架的Q-(近似)对偶
一种支持动态更新的可排名密文搜索方案
基于模糊数学的通信网络密文信息差错恢复
炫词解密
解密“一包三改”
密钥共享下跨用户密文数据去重挖掘方法*
炫词解密
配之以对偶 赋之以精魂
一种基于密文分析的密码识别技术*