加密的要求
一般来说,一个良好的数据库加密系统应该满足以下基本要求:
1.支持各种粒度加密
仅能加密文件或某些基表是不够的,为了更好地控制数据库的安全,必须支持各种不同粒度的加密,至少要支持字段粒度的加密。
2.良好的密钥管理机制
数据库有很多用户,数据库加密的粒度又有多种,因此密钥量很大。极端情况下,每个加密数据项都需要一个密钥,这与一般的密钥管理机制有很大的不同。需要一个良好的密钥管理机制,来组织和存储大量密钥。
3.合理处理数据
这包括几方面的内容。首先要恰当地处理数据类型,否则DBMS将会因加密后的数据不符合定义的数据类型而拒绝加载;其次,需要处理数据的存储问题,实现数据库加密后,应该基本上不增加存储空间开销。
4.不影响合法用户的操作
加密系统影响数据操作的响应时间应尽量短,在现阶段,平均延迟时间不应超过0.1秒。此外,对数据库的合法用户来说,数据的录入、修改和检索操作应该是透明的,不需要考虑数据的加、解密问题。2
加密方式在3个不同层次实现对数据库数据的加密,这3个层次分别是操作系统层、DBMS内核层和DBMS外层。
(1)操作系统层加密:在操作系统层无法辨认数据库文件中的数据关系,从而无法产生合理的密钥,对密钥合理的管理和使用也很难。所以,对大型数据库来说,在操作系统层对数据库文件进行加密很难实现。
(2)DBMS内核层实现加密:这种加密是指数据加密在DBMS内核层实现。这种加密方式的优点是加密功能强,并且加密功能几乎不会影响DBMS的功能,可以实现加密功能与数据库管理系统之间的无缝耦合。其缺点是加密运算在服务器端进行,加重了服务器的负载,而且DBMS和加密器之间的接口需要DBMS开发商的支持。
(3)DBMS外层实现加密:比较实际的做法是将数据库加密系统做成DBMS的一个外层工具,根据加密要求自动完成对数据库数据的加/解密处理。采用这种加密方式,加/解密运算可在客户端进行。它的优点是不会加重数据库服务器的负担并且可以实现网上传输的加密,缺点是加密功能会受到一些限制,与数据库管理系统之间的耦合性稍差。
数据库加密系统分成两个功能独立的主要部件:一个是加密字典及其管理程序,另一个是数据库加/解密引擎。数据库加密系统将用户对数据库信息具体的加密要求以及参数信息保存在加密字典中,通过调用数据加/解密引擎实现对数据库表的加密、解密及数据转换等功能。数据库信息的加/解密处理对数据库服务器是透明的。
按以上方式实现的数据库加密系统具有很多优点:首先,系统对数据库的最终用户是完全透明的,管理员可以根据需要进行明文和密文的转换工作;其次,加密系统完全独立于数据库应用系统,无需改动数据库应用系统就能实现数据加密功能;第三,加/解密处理在客户端进行,不会影响数据库服务器的效率。
数据库加/解密引擎是数据库加密系统的核心部件,它位于客户程序与数据库服务器之间,负责在后台完成数据库信息的加/解密处理,对应用开发人员和操作人员来说是透明的。数据加/解密引擎没有操作界面,在需要时由操作系统自动加载并驻留在内存中。
数据库加/解密引擎由3大模块组成:加/解密处理模块、用户接口模块和数据库接口模块。其中,用户接口模块的主要工作是接受用户的操作请求,并判断是否需要加懈密处理;数据库接口模块要去存取数据库服务器;加/解密处理模块完成数据库加/解密引擎的初始化、内部专用命令的处理、加密字典信息的检索、加密字典缓冲区的管理、SQL命令的加密变换、查询结果的解密处理以及加解密算法实现等功能,另外还包括一些公用的辅助函数。2
数据库加密粒度数据库加密粒度是指数据加密的最小单位,通常可以分为文件级、表级、字段级、记录级和数据项级等五个层次。
文件级加密文件级加密把数据库文件作为一个整体,对整个数据库文件用加密算法和加密密钥加密,形成密文的形式来确保数据的机密性。文件级加密的优点是加密方法简单,只需要对存储在磁盘中的相应数据库文件进行加密处理即可。密钥的数量少,便于管理。缺点是由于对整个数据库文件都进行了加密,所以即使只需要查询文件中的一条记录,也必须对整个数据库文件进行解密。而数据库又是一个随机访问量很大的系统,因此,系统性能将受到很大的影响,用户访问速度不可避免的大大降低。故文件级加密一般用于辅存中备份的数据库。
表级加密表级加密的对象是数据库中的表。数据表包含多个表,并不是所有的表都有提高的安全需要,因而只需要对其中一些包含敏感信息的表进行加密,以保护它们的安全性。与文件级加密相比,采用表级加密粒度,系统的查询性能会有所改善.因为对于未加密表的查询,系统性能不会受到影响,对于加密表的查询,只需要解密对应的加密表,而不要解密整个数据库、在实行表级加密时,可以采用对存储数据的磁盘块(页面)进行加密,但是,这种方法与DBMS集成时.需要对DBMS内部一些核心模块进行修改,包括对语法分析器、解释器和查询执行器的修改,而目前一些主流的商用DBMS都不开放源代码,很难把这种方法与它们集成起来。
记录级加密记录级加密的对象是数据表中的记录。记录中各字段值连接一起进行加密处理,加密后输出一列字符串、在实现记录级加密时,一般通过调用数据库系统专门的加密函数,对页面中的记录进行加密。与文件级和表级加密相比,这种加密方式粒度更细,可选择的灵活性更好。但是,基于记录的数据库保护有一个缺点,由于其操作的对象是记录,解密时也是以记录为单位进行的,这样不能保证对某个记录中不需要的字段不解密,在选择某个字段的某些记录时,如果不对含有这个字段的所有记录进行僻密就无法进行选择、因此,这种方法相对来说也欠缺一定的灵活性,同时也需要对DBMS内核进行修改。
字段级加密字段级加密又称为域加密或属性级加密,加密对象是关系中的某个字段。在实际应用中,字段级加密是一个较好的选择。一些重要和敏感的信息往往出现在关系中的某些列,如信用卡号、身份证号、银行卡号等,利用字段级加密,可以实现只对这些重要数据进行加密保护,而无须对普通数据也进行加密,灵活性较好。在实现字段级加密时,可以采取多种方式,既可以在DBMS外部完成,也可以在DBMS内部完成。
数据项级加密数据项级加密也称数据元素级加密,在数据库的加密粒度中,数据项级加密粒度最小,安全性和灵活性在以上加密方式中也是最高的,实现方式与字段级加密相似,只是各字段数据项分别用不同的数据项密钥完成,所需密钥个数=记录个数×字段个数,数量非常惊人,因此密钥管理将会非常复杂,系统的执行效率也会受到影响。1