针对当前数据库文件加密系统面向特定环境应用的问题,我们设计了一种通用的数据库文件加密模块,该模块可提供不同的加密算法与加密粒度,用户可根据需要进行相应的选择。

一、数据库文件加密模块设计原则

1、加密层次的选择

数据库文件加密模块可以选择在3个不同层次实现,这3个层次分别是OS、DBMS内核和DBMS外层。

在OS层加密,其加密粒度是整个文件,十分粗糙,无法辨认数据库文件中的数据关系,从而无法根据数据关系对数据进行合理的加密。

在DBMS内核层加密,是指数据在物理存取之前完成加,解密工作,这种方式可以更有效和DBMS内部的各种功能结合起来,但是需要对DBMS的内核进行修改,需要DBMS开发商的支持。

采用DBMS外层加密方式时,加密/解密运算、密钥的管理等工作在DBMS外层执行,不会加重数据库服务器的负载并且可以根据需要灵活配置数据库加密,但加密功能会受到一些限制。

因此,本文选择在DBMS外层实现对数据库文件的加密。

2、加密算法的选择

目前常用的加密算法可分为2类:对称加密算法和非对称加密算法。

对称加密算法的加密和解密密钥相同,具有加解密速度快,保密度高等优点。对称加密算法按加密模式又可分为序列密码和分组密码两大类,序列密码以字符为单位进行加密变换,每一字符数据的加密与报文的其他部分无关;分组密码加密时,明文按固定长度分组,对各组数据用不同密钥加密。

非对称加密算法加密和解密使用不同的密钥,这类算法加解密速度较慢,速度仅达到其他加密算法的千分之一到百分之一。

数据库文件加密系统要求所使用的加密算法安全性高的同时加解密速度足够快,尽量不影响用户使用,并且加密后,数据量不应该明显增加。因此选择使用对称密钥的分组加密算法,本加密模块提供了2种具有代表性的加密算法:DES加密算法和AES加密算法用户可根据加密强度的需求进行选择配置。对于碎片分组,本模块采用密文挪位法吲,保证分组加密的长度,同时保证了加密后数据长度不变,但对于数据库中有些比较短的数据,还是根据情况进行了数据填充,否则会降低密码强度。

3、加密粒度的选择

加密粒度是指数据库加密的最小单位,按照数据库的结构层次,对数据库信息加密的粒度可分为数据库级、表级、记录级、字段级和数据项级。

(1)数据库级:把数据库文件作为整体进行加密。这种加密方法简单,但加密粒度粗糙,查询效率低,即使只需要少量数据,也必须解密整个数据库。

(2)表级:以数据库文件中的表为单位进行加密。与数据库级加密比较,查询性能有所改善,但仍然不够灵活。

(3)记录级:一般而言,数据库文件系统中每条记录所包含的信息具有一定的封闭性,与数据库级和表级加密相比,这种加密的粒度更细,灵活性更好,是最常用的数据库信息文件手段。

(4)字段级:加密的对象是关系中的某个字段。字段加密是一个比较好的选择,因为一些敏感的信息总是出现在某些列,只需对这些数据文件进行保护,不需对普通数据文件加密。

(5)数据项级:以不同记录的不同字段为基本加密单元进行加密.该方法具有最小的加密粒度,具有更好的灵活性和适应性,但密钥的管理十分困难。

选择加密粒度时,应该兼顾效率和安全性,根据不同的要求,进行不同的选择。本加密模块可以提供记录级、字段级和数据项级3种加密粒度。

4、密文数据的存放

数据文件经加密后,数据类型及数据长度都有可能发生变化,如果存放到原数据表中,则有可能发生错误。因此,本文采取将明文与密文分开存放的方式,另建一张密文表,将密文数据存放到密文表中。

5、数据库文件加密的限制

由于选择在DBMS外层实现对数据库文件的加密,DBMS要完成对数据库文件的管理和使用,必须能够识别部分数据,因此,只能对数据库的部分信息文件进行加密。

注意:

(1)索引字段不能加密;

(2)关系运算的比较字段不能加密;

(3)表间的连接码字段不能加密。

二、数据库文件加密模块系统设计

1、系统结构与主要模块功能

本文提出的加密模块位于DBMS外层,于数据库应用程序与DBMS之间,形成一种3层次的结构,由3个独立的主要部件构成:加密系统管理程序、数据库文件加密/解密引擎和加密字典。其系统结构如图1所示。

通用数据库文件加密模块设计方法

加密系统管理程序位于数据库服务器的外层,来自客户端的加密请求需要通过加密系统管理程序处理后再发送到DBMS,它主要由接口模块、加密分析模块及加密字典管理程序组成。接口模块提供数据库应用程序访问数据库加密模块的接口;加密分析模块判断用户的请求是否需要加密处理,如果不需要加密,则直接提交给数据库管理系统,否则通过调用数据库文件加密/解密引擎处理后再提交。

加密字典管理程序提供对加密字典的创建、初始化、修改及维护等工作,是系统管理员变更加密要求及强制访问控制的工具。

数据库文件加密/解密引擎是数据库加密模块的核心模块,在后台按要求对信息进行加解密处理,由初始化模块、读写数据模块、密钥管理模块、加密/解密模块及接口模块组成。初始化模块主要负责数据类型的转换,加密时,所有数据类型的数据要先转化成字符串类型数据再加密;将密文解密后,也需要先将其转换为原始类型数据再提交给用户。

读写数据模块用来读取需要进行加密/解密的数据,并将处理结果写入相应的表中。密钥管理模块负责密钥的管理,包括密钥的产生、装入、分配、存储、使用、传送、销毁等环节。本加密模块采用二级密钥管理机制,每个加密数据库有一个主密钥,它由用户创建数据库时确定,保存在加密装置里,用来对二级密钥进行加密,二级密钥用来对数据进行加密,由密钥生成算法产生,经主密钥加密后存放在加密字典中。加密/解密模块按要求对数据进行加密/解密处理.接口模块提供数据库加密/解密引擎访问数据库管理系统的接口。

加密字典中记载了有关加密数据的所有信息,包括加密字段的标记、所使用的加密算法及密钥长度等,通过加密/解密引擎实现对数据库文件的加密、解密及数据类型转换等功能。

2、系统处理流程

假设身份认证等功能已经在其他应用程序中完成,所有进入本模块的用户都是合法用户。

数据库文件加密/解密引擎工作之前,首先要判断所要进行的操作是加密还是解密,如果进行加密操作,则需要判断用户所选择的加密算法,然后根据用户的选择调用不同的加街函数实现对数据的加密,最后将加密结果存人数据库密文表中。解密操作与加密操作步骤相似,只是将数据类型转换工作推迟到解密后进行,最后将解密后的明文数据提交给加密系统管理程序做下一步的处理。数据库文件加密/解密引擎工作流程如图2所示。

通用数据库文件加密模块设计方法

数据库文件加密模块主要工作步骤如下:

Stepl当创建一个数据库时,由用户输入一个主密钥并保存在加密装置里。

Step2如果用户有加密需求,调用加密函数,并根据自己的需要设置参数。

Step3判断用户是否有新的加密要求,如果有,将加密要求记录在加密字典中。

Step4加密系统管理程序通过查询加密字典判断数据是否需要加密处理,如果不需要,转Step6。

Step5数据库文件加密/解密引擎获得密钥后对所指定的数据文件进行加密和解密处理。

Step6将命令提交给数据库管理系统。

Step7根据不同要求将返回结果进行适当处理后提交给用户。

三、通用数据库文件加密模块的测试

建立一个简单的学生成绩管理系统对数据库加密模块进行测试,测试数据为一万条记录。该系统的主机配置为Celeron 2.4G,256 M内存;数据库系统为SQL Server2000。

测试过程如下:

(1)记录数据库没有使用加密模块时插入和查询记录所用的时间。

(2)设置加密模块使用DES加密算法对姓名字段进行加密,记录其插入与查询记录所用的时间。

(3)设置加密模块使用AES(128 bit密钥)加密算法对姓名字段进行加密,记录其插入与查询记录所用的时间,测试结果如表1所示。

通用数据库文件加密模块设计方法

采用DES加密算法时,插入记录的时间增长了2.18%,查询记录的时间增长了4.84%;采用AES加密算法时,插入记录的时间增长了1.01%,查询记录的时间增长了8.26%.可以看出,数据库文件加密模块对数据库系统效率的影响并不是很大,用户可以接受。

小知识之DBMS

数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称DBMS。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。用户通过DBMS访问数据库中的数据,数据库管理员也通过dbms进行数据库的维护工作。它可使多个应用程序和用户用不同的方法在同时或不同时刻去建立,修改和询问数据库。大部分DBMS提供数据定义语言DDL(Data Definition Language)和数据操作语言DML(Data Manipulation Language),供用户定义数据库的模式结构与权限约束,实现对数据的追加、删除等操作。