针对日前存在的数据库数据加密算法进行比较,根据实际需要,提出一种通用数据库数据文件加密方案,该方案的提出有利于解决在构建第三方数据库托管服务等通用数据库方面存在的数据安全问题,具有广阔的应用前景。
一、数据库加密技术现状
数据库加密技术可分为表加密、记录加密和字段或属性加密,目前常用的是字段加密。字段加密技术,可分为两大类:索引和同态。
索引又可分为:按密文入口地址索引和按密文索引。同态也可分为:秘密同态和匹配同态。不过常用的检索或处理机制,都是针对某一特定类型数据库或数据库中某一特定类型的数据比较有效,但对一般类型数据库或数据库中一般类型的数据,处理效果就不够理想,甚至根本无法处理。
比如,采用密文入口地址索引和密文索引的检索机制,对数据库中数值型数据检索比较有效,对字符型数据处理效果就比较差,对数值型数据进行修改(加、减、乘、除)的效果就更不好,而采用秘密同态处理机制,对数值璎数据进行修改(加、减、乘,除)的效果比较理想,因为可以实现在不解密的情况下直接对数据进行修改,但几乎无法实现数据检索。采用匹配同态的检索机制,对字符型数据检索可以实现在不解密的情况下直接匹配,效果较好,但在处理数值型数据检索时效果无法达到采用索引方式的检索机制。
下面我们就来了解一下上述三种常用的加密机制。
二、常用加密机制
1、秘密同态加密机制
秘密同态的基本思想如下:
假设E和D分别代表加密、解密函数,明文数据空间中的元素是有限集合{M1,M2,…,Mn},α和β代表运算,若α[(E(M1),E(M2),…,E(Mn))=E(β(M1,M2,….Mn)]
成立,则称函数族(E,D,α,β)为一个秘密同志。
目前,秘密同态加密机制在整数范围、实数范围都能实现加密状态下的算术运算。
2、密文入口地址表索引机制
为了与密文B+树索引机制区分,本文中将密文建立人口地址表实现的索引称为密文入口地址表索引。下面采用一个实倒来说明该加密机制。
表1是一个密文表,其中Salary是密文字段,用E(.)和E’(.)表示加密函数,E(data)和E’(data)表示对明文数据data加密后的密文,假设表中有五条记录,且每条记录长度为1 00,Salary密文字段在记录中的馆移量为30,第1条记录的入口地址为0000,则第1条记录中的密文字段Salary地址为0030。
通过对表1中的加密字段Salary,用解密函数D还原成明文,再对明文进行从小到大排序后建立的入口地址索引表如表2所示,对表2中的入口地址也进行了加密,在表1对Salary进行加密的函数E和表2对入口地址进行加密的函数E‘可以相同也可以不同。
假设要检索的数据为1450,用S表示数据库服务器,C表示访同端,使用二分查找算法,检索过程如下:
(1)C向S发出访问请求;
(2)S将索引地址E’(0100)发送给C;
(3)C解密E’(0100),得到地址0100;
(4)C根据地址0130取得密文数据E(1800)*解密E(1800),得到1800,由于1800>1450,所以请求访问下一条索引地址E’(0400);
(5)S将索引地址E’(0400)发送给C,C对其解密,得到地址0400;
(6)C根据地址0400取得密文数据E(1450),对其解密得到1450,检索成功。
3、匹配同态加密机制
该机制也能实现在不解密的情况下被检索出来,为了与秘密同态区分,本文中以匹配查找为主要思想的加密机制称为匹配同态加密机制。该加密机制的基本思想是:加密时,将明文字符串转换成Unicode编码形式(一个明文字对应2个字节,即16位二进制数),将明文字的每一位扩展成4位(如0,扩展成0000;1扩展成1111),这样每个明文字由64位组成,以明文字为基本单位进行分组,利用IDEA分组密码算法(由64位明文,产生64位密文)进行分组加密,然后顺序合成密文。解密时,采用加密时的逆过程。
对于IDEA分组加密算法,如果密钥相同,完全相同的明文分组会得到相同的密文,不同分组内的明文,因为受周围其他字、词的影响,明文与密文完全没有对应关系。这样,由于明文字符与密文分组有一一对应关系,对于字符型数据常用的“等于”或“包含”类查询,可以保持原来的查询语句不变,直接在密文库中查找检索词密文即可。这种加密机制在处理字符型数据时,从目前已有的加密技术看,效率是最高的。但在处理日期颦和数值型数据时,面对常用的“大于”或“小于”等查询条件分由于其自身的特点,只能通过顺序查找法进行检索,这样在记录数较多的情况下,执行效率会非常低。
三、通用数据库数据文件加密方案的提出
由于常用加密算法中存在的局限性问题,在通用数据库数据文件加密方案中,将融合上述三种方案的优点,根据处理字段类型的实际情况,选择其中某一种加密算法来进行处理。数据库数据文件类型常见的有数值型、字符型和日期型,其他类型有加密处理要求,可转换成常见类型中的一种进行处理。
针对分布式计算、电子投票、网上银行等效据库,由于经常要求对已经加密的数据进行算术运算,往往采用秘密同态加密技术效率较高,而针对构建第三方数据库托管服务的数据库,加密的字段不但有数值型、日期型,也可能有字符型和其他类型,所以在处理过程中,需要有一种通用的数据库数据加密设计方案。
1、通用数据库数据文件加密方案思想
通用数据库数据文件加密方案的基本思想如下:
根据加密对象的实际情况,针对不同数据类型采用比较合理的加密技术,在不影响安全的前提下,力求提高数据的处理效率。该基本思想与数据库文件加密要求相吻合。为了提高数据的处理效率,在处理过程中尽量减少解密和加密的次数。
通用数据库数据文件加密方案的具体实现如下:不对表中的主键、外键进行加密,对加密的数值型字段,若需要经常进行算术运算,则采用秘密同态加密技术,若还需要实现检索功能,则在秘密同态加密基础上,再对密文建立人口地址索引表,采用二分查找法实现检索,对检索量大算术运算很少的数值型字段,采用密文入口地址索引或密文索引;对加密的字符型字段,采用匹配同态加密技术实现;对加密的日期型字段,采用密文入口地址索引或密文索引技术实现;其他类型加密字段,需先转换成前面三种类型中的一种,再进行加密处理。
四、通用数据库数据文件加密案例
表3是一个企业员工工资数据库表,假如要对该表中的职务和工资字段进行加密,由于职务是字符型数据,工资是数值型数据,而且工资需要经常改动和查询,根据本文中提出的加密设计方案,对职务字段采用匹配同态加密技术,对工资字段采用秘密同态加密技术,同时建立入口地址检索表。
对每个数据库表建立一个“表结构加密方案文件”,如表4所示。该文件记录了字段的加密情况和加密密钥,在加密类型中,采用了四位二进制数对应四种加密类型,它们分别是:秘密同态加密、匹配同态加密、密文入口地址表索引和密文索引。加密类型为4表示用匹配同态加密技术,加密类型为A表示用秘密同态和密文人口地址表索引机制,如图1所示。
当每次由客户端向数据库服务器提交操作请求时,先由控制层根据提交的操作命令,分析其中要访问的字段,再对照表结构加密方案文件,若访问的字段未经加密,则可直接执行操作命令,否则,根据字段的加密类型,转向对应的命令处理模块。对处理完的记录集,经过脱密处理,再由通信模块对它加密后发送给客户端,处理过程如图2所示。
在该通用加密设计方案处理过程中值得注意的是:每当执行完工资字段的修改命令后,需要有一次对该字段密文入口地址表索引的重建工作,用来满足索引文件同步的需要。
五、通用数据库数据文件加密方案安全性分析
1、仅知密文攻击
对秘密同态加密技术,只要找到一对足够大的素数p和q,并能得到安全存放,那么,假如攻击者获取了密文,要想从p×q中获取p是非常困难的,因为需要对p×q进行因数分解I对密文入口地址表检索技术,由于对入口地址进行了加密处理,仅仅通过静态分析密文表及其对应的索引表,则得不到任何有用的信息,是安全的,假如攻击者通过动态追踪数据库检索过程,得到密文数据与其索引的对应关系,则安全性稍差。
2、巳知明文攻击
对秘密同态加密技术,如果攻击者获取一个明文密文对(x,y),攻击者可以进行反复的试探,以期获得解密密钥p,但攻击者需要进行试探运算的运算量大到不可以接受的地步,对密文入口地址表检索技术,巳知部分明文与其对应的密文,那么还需要进行巳知明文攻击,这里的安全性依靠的就是加密算法的强度.可采用NIST最后选定的AES(Advanced encryptstandard)算法,可以有效地抵抗巳知明文攻击。
3、完整性攻击
对于目前巳知的几种数据库加密技术,攻击者都可以任选一个值来替换一个已经加密的数据。也就是说,通用加密设计方案无法抵抗完整性攻击。
根据目前数据库加密技术的现状,可以这么说,没有一种加密技术能完全满足数据库中所有数据类型的加密需要,特别对于构建第三方数据库托管服务方面的数据库安
全需求,用一种通用数据库数据加密设计方案显得尤为重要,该方案的研究有着广阔的前景和实际应用价值。
小知识之索引
索引,使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构,例如 employee 表的姓名列。如果要按姓查找特定职员,与必须搜索表中的所有行相比,索引会帮助您更快地获得该信息。