徐胜超计算机学院 2003612100007
摘要:采用加密技术是现代社会保护敏感信息的一种较为有效和经济的手段. 在数据库中对数据进行加密保护其加密机制主要涉及加密算法、加密粒度、密钥生成和管理、查询操作的实施以及对系统性能的影响等五个方面问题,本文提出了一种数据库的加密方案,并结合该方案主要分析了这些问题。
关键词:数据库加密,加密算法,加密粒度,密钥
一般而言,数据库系统通过使用身份认证、访问控制、隐通道、审计等基本安全技术能够满足一般的数据库应用,但对于一些重要部门特别是军事部门,仅靠上述这些措施是难以完全保证数据的安全性。因此,有必要对数据库中存储的重要数据进行加密处理,以实现数据存储的安全保护。在数据库中对数据进行加密保护其加密机制主要涉及加密算法、加密粒度、密钥生成和管理、查询操作的实施以及对系统性能的影响等。
1.一种新的数据库系统加密方案
目前的数据库加密策略多为基于DBMS的加密,也就是将数据的加解密、密钥管理及安全认证都交由DBMS来执行。这种加密策略的优点是:由于所有的加解密及密钥管理工作都在后台进行,因此不会对前台的应用程序产生影响;目前很多大型的数据库产品都提供了数据加密功能。但是这种加密策略有一个最大的弱点:由于加密数据与加密密钥信息同时放在数据库中,因此对加密密钥的管理带来了极大的困难。对于攻击者来说,在通过数据库的账号和口令得到数据库中的加密数据信息的情况下,就有可能同时得到加密密钥信息,由于加密算法的保密性比较差,这样就极有可能导致系统数据的严重外泄。如果可以将加密密钥信息与加密数据信息分离,这样即使攻击者通过数据库的账号和口令得到了加密数据,但由于无法得到加密密钥信息,也就很难对系统数据造成真正的威胁。
基于以上考虑,可以对上述基于的加密策略进行DBMS改造。将数据的加解密、加密密钥的管理及相关的认证工作都放在DBMS以外执行,DBMS只负责加密数据的存储管理。以数据库三层体系结构为例,我们可以在应用程序服务器与数据库服务器之间增加一层:中心加密服务器。中心加密服务器完成系统所有的数据加解密、密钥管理及相关的认证工作。加密服务器完成数据的加密后,将加密数据信息送至数据库服务器。需进行解密时,数据库服务器将加密数据信息送至加密服务器进行解密。因此,在数据库服务器与加密服务器之间传输的是加密数据。这种数据库加密系统的体系结构图如图1-1所示。在上述数据库加密体系结构中,用户访问数据库的流程如下:
(1)客户端向应用服务器发出数据访问请求;
(2)应用服务器响应客户端的请求,要求用户输入访问数据库所需的用户密钥,进行客户
与加密服务器之间的身份认证;
(3)认证通过后,应用服务器将数据访问请求发送到加密服务器,加密服务器根据用户及数据访问请求,提取相应的数据库加密密钥并进行校验,如果校验未通过,则退出;如果校验通过,则从数据库服务器中提取密文进行解密;
(4)加密服务器将解密后的数据通过加密信道传输给应用服务器;
(5) 应用服务器将结果发送到客户端。
2.密码算法的选择
密码算法在早期有序列算法,移位算法等。按密码算法所用的加密解密密钥是否相同,可分为对称密钥又称单密钥(加密解密密钥相同) 和公开密钥又称双密钥(加密解密密钥不同) 。如DES就是一种对称密钥算法,而RSA一种公开密钥算法。
图1-1本文加密方案的体系结构
选择合适的加密算法也是很重要的。加密强度应能满足系统安全需要,但要考虑加密结果是否符合数据约束条件,其存储会不会造成额外负担;对加密速度的要求则是不应该对系统性能产生明显影响,响应时间越短越好。同时,对应用系统的用户来说,数据库加解密过程应该是透明的,不能影响合法用户的正常操作。数据库加密要求加密效率要尽可能的高,而以RSA 算法为代表的公开密钥加密算法虽然加密强度较高,但算法复杂,效率较低,不能满足要求;相反以DES 算法为代表的对称密钥加密算法则是简单高效,适合进行数据库加密。
子密钥数据库加密算法是一种类似于DES的分组加密算法。本系统就使用这种算法来加密/解密。该算法的核心思路是根据数据库(特别是关系型数据库) 中数据组织的特点,在加密时以记录为单位进行加密操作,而在查询需要解密时, 则是以数据项为单位进行解密操作。两者所用的密钥是不同的, 加密所用的密钥是针对整个记录的密钥;而解密所用的密钥是针对该数据项的子密钥。关于子密钥的算法有很多这样的文章,比如文献[1],具体的算法所用的数据公式就不在这里叙述了。
3.加密粒度怎么样定义的
数据库系统的加密粒度可以分别选用以文件、记录、字段作为加密基本单位的方案。加密单位越小,适用范围越广, 但实现难度就越大。根据应用时具体要求的不同, 实现时应采用不同的方法。
把数据库文件作为整体, 用加密密钥和加密算法对整个数据库文件加密, 形成密文来保证数据的真实性和完整性。利用这种方法, 数据的共享是通过用户用解密密钥对整个数据库文件进行解密来实现的,但多方面的缺点极大地了这一方法的实际应用: 首先, 数据修改的工作将变得十分困难, 需要进行解密、修改、复制和加密四个操作, 极大地增加了系统的时空开销; 其次, 即使用户只是需要查看某一条记录, 也必须将整个数据库文件解密, 这样无法实现对文件中不需要让用户知道的信息的控制。因此, 这种方法只适用于能回避这些的应用环境。
一般而言, 数据库系统中每条记录所包含的信息具有一定的封闭性, 即从某种程度上说它完整地存储了一个实体的数据。因此,基于记录的加密技术是最常用的数据库信息加密手段。这种方法的基本思路是: 在各自密钥的作用下, 将数据库的每一个记录加密成密文并存放于数据库文件中; 记录的查找是通过将需查找的值加密成密码文后进行的。然而基于记录的数据库保护有一个缺点, 就是在解密一个记录的数据时, 无法实现对在这个记录中不需要的字段不解密; 在选择某个字段的某些记录时, 如果不对含有这个字段的所有记录进行解密就无法进行选择。
基于字段的数据库加密, 就是以不同记录的不同字段为基本加密单元进行加密。该方法可以对数据库中单个数据元素进行加密。其优点在于具有最小的加密粒度, 具有更好的灵活性和适应性。其缺点是: 加解密效率低; 若用数据库密钥对单个数据元素重复加密, 对于密文搜索攻击是脆弱的; 若各字段的数据元素分别用不同的密钥加密, 则密钥个数=记录个数×字段个数,其量是非常惊人的, 实际上根本无法管理。
本方案中的加密粒度的定义是结合了记录和字段两种方式的优点,加密是对记录,解密是对字段。所以在子密钥加密算法中,数据库的更新、修改、增加和删除可以较方便地完成。
4.密钥的管理
密钥的管理是一个非常重要的问题,采用在数据库中建立系统表的方法来管理各类
密钥。我在数据库中建立下面一些表:
1) 数据类表(Data_class)
Dc_No; 数据类编号
Dc_describe; 数据类描述
Dc_para; 加密质数
2) 属性信息表(Sys_col)
Col_name; 属性名称
Col_Tname; 该属性所属的表
Col_type; 属性类型
Col_len ; 属性长度
Col_DC; 属性所属的数据类
3) 用户类表(User_class)
Uc_no; 用户类编号
UC_describe; 用户类描述
Uc_PWD; 用户类密钥(系统私钥加密)
4)用户表(Users)
User_ID ; 用户标识符
User_Describe ; 用户描述
User_Belong ; 用户所属用户类
User_Public ; 用户的公钥
5)用户类权限表(UC_rights)
UC_No ; 用户类编号
DC_No ; 数据类编号
Rights ; 用户类权限
有了上述各表, 就可以很好的管理密钥了,我们把访问密文数据库中数据都转化为表的操作了。
5.如何解决加密/脱密的时间开销与数据库查询效率之间的矛盾。
5.1查询中存在的问题
对于加密后的密文数据库,由于密文数据不再保持明文数据原有的顺序关系,因此当用户进行查询操作时不能按原有的方式进行,通常首先是将查询条件所涉及的属性段进行全段脱密(当加密粒度为字段级或数据级时) 或进行全表脱密(当加密粒度为表级或记录级时) ,然后再进行查询操作. 由于增加了额外的脱密开销,这种加密机制会导致数据库系统效率大幅度降低,并且会随着数据库中数据的增加而使效率问题变得更为突出. 提高密文数据库查询速度的根本途径是设法省去查询操作前的脱密过程,即实现按密文方式进行查询,这是一项全新的研究工作,目前已有人提出了能实施密文查询的算法,但是这种方法难度比较大。
5.2矛盾的解决方式
由于上面的密文查询方式的算法实现困难,我们只能另外用一些办法了。
(1)对数据库解密时,不对整个数据库解密,只对合法用户查询的结果集解密。这种解密只在缓冲区内部进行,不允许提交给数据库,以保证数据库中的数据永远是以密文形式存放在数据库中。
(2)索引字段不加密。为了达到迅速查询的目的,数据库文件需要建立一些索引,不论是字典式的单词索引、B树索引或HASH函数索引等,它们的建立和应用必须是明文状态,否则将失去索引的作用。
(3)关系运算的比较字段不加密。DBMS要组织和完成关系运算,参加并、差、积、商、投影、选择和连接等操作的数据一般都要经过条件筛选,这种“条件”选择项必须是明文,否则DBMS 将无法进行比较筛选。
(4)表间的连接码字段不加密。数据模型规范化以后,数据库表之间存在着密切的联系,这种相关性往往是通过“外部编码”联系的,这些编码若加密就无法进行表与表之间的连接运算。
6.加密后对数据库的功能和性能带来什么影响?
6.1在加密机制的装载上
现在加密机制的装载一般有下面三种方式:
a. 自行开发一个具有该机制的数据库管理系统;
b. 将国内流行的商品化数据库管理系统(如ORACLE , SYBASE ,DB2 等) 的内核进行改造,使DBMS具有加脱密和密文功能;
c. 对现有的数据库管理系统不加改动,在数据库管理系统之上构造一个“外包式”加密系统. 前两种方式开发周期长、难度大,而第三种方式才是比较实用的。本文中的加密方式就是第三种。
6.2在功能上的影响
数据库加密后对DBMS原有功能会产生一些影响。目前商用的DBMS的功能比较完备,特别象Oracle、Sybase 这些采用Client/Server 结构的DBMS, 具有数据库管理和应用开发等工具。数据库数据加密以后, DBMS的一些功能将无法使用,无法实现对数据制约因素的定义。Sybase 数据库系统的规则定义了数据之间的制约因素。数据一旦加密,DBMS 将无法实现这一功能,且值域的定义也无法进行。数据库中的每个字段的类型、长度都有具体的限定。数据加密时,数值类型的数据只能在数值范围内加密,日期和字符类型的数据也都只能在各自的类型范围内加密,密文长度也不能超过字段限定的长度,否则DBMS 将无法接受这些加密过的数据。
密文数据的排序、分组和分类。Select 语句中的Group by、Order by、Having 子句分别完成分组、排序、分类等操作。这些子句的操作对象如果是加密数据,那么解密后的明文数据将失去原语句的分组、排序、分类作用,这是用户所不需要的。
SQL语言中的内部函数将对加密数据失去作用。DBMS对各种类型数据均提供了一些内部函数,这些函数不能直接作用于加密数据。DBMS的一些应用开发工具的使用受到,不能直接对加密数据进行操作。
6.3在性能上的影响
本文的加密系统的优点是:由于所有的加解密及密钥管理工作都在加密服务器中进行,因而可以大大减轻数据库服务器的负担,提高数据库服务器的效率;实现了加密密钥信息与数据加密信息的分离,使得加密密钥的管理更为简便安全;由于将数据的加解密及密钥管理工作分离出来,可以为整个数据库系统环境提供一种标准的加密服务。
参考文献
[1]赵志强,宋菲数据库加密技术, 医院数字化, 2004年4月, 9-12
[2]马晨华,陆国栋,裘炅,赵阳,基于用户鉴别码的加密系统设计,计算机工程, 2003
年12月,43-45
[3]崔国华,洪帆,付小青,胡伦骏,数据库系统中一种更安全的加密机制, 华中理工大学学
报,2000年7月,29-31
[4]彭湃,戴一奇,李武军,网络密文数据库的设计,清华大学学报,2001年第1期, 92-95
[5]王晓峰,王尚平,秦波,数据库加密方法研究,西安理工大学学报,2002年第3期, 263-268下载本文