利用加密技术对数据库文件进行加密能够有效地保证数据的安全,即使黑客窃取了关键数据,得到的也只是密文,他仍然难以得到所需要的信息。实现数据库加密以后,各用户(或用户组)的数据由用户用各自的密钥加密,从而保证了用户信息的安全。另外,经过加密的敏感数据在数据库的备份中以密文形式存在,从而减少因备份介质失窃或丢失而造成的损失。因此,数据库文件加密对于保障数据安全十分重要。

文章介绍了扩展存储过程技术,并在此基础上提出了一个数据库加密系统逻辑模型,分析了各主要模块,实现了基于扩展存储过程的数据库加密系统。

一、扩展存储过程

扩展存储过程是一种特殊的存储过程。它通过Microsott的开放式数据服务(open data services,ODS)技术,提供了一个基于服务器的编程接口来扩展SQL Server的功能。从而用户可以使用高级语言创建自己的外部例程,以满足特定的功能需求。扩展存储过程实质上是SQL Server可以动态装载并执行的动态链接库,可直接在SQL Server的地址空间运行,并使用SQL Server ODS APl(application programming interface)编程。

扩展存储过程的工作原理如图1所示。

基于扩展存储过程的数据库加密技术

扩展存储过程是关系数据库引擎的开放式数据服务层的一部分,而开放式数据服务层是该引擎和服务器Net-Iibrary之间的接口。服务器Net-Library接收客户端TDS (tabular datastream)数据包并将它们传递给开放式数据服务。开放式数据服务将TDS数据包转换成事件并传递到关系数据库引擎的其它部分。而后数据库引擎使用开放式数据服务,通过服务器
Net-Library将回复发送回SQL Server客户端。

二、系统的设计

1、系统设计目标

一个有效的数据库加密系统,必须达到以下目标:

①利用加密技术,对数据库中存储的“敏感”数据实现字段级加密:

②恰当地处理数据类型转换等问题,保证加密和解密处理过程中数据的完整性;

⑨使用户不需考虑数据的加、解密过程,实现数据库合法用户对于数据的录入、修改和检索操作的透明性;

④实现对各级加密密钥的存储和管理。

2、系统的模块划分

系统实现的逻辑模型如图2所示。

基于扩展存储过程的数据库加密技术

系统可以划分为3大模块:加/解密引擎模块、数据库对象模块和加密系统管理模块。

加/解密引擎模块是数据库加密系统的核心部分,它由加/解密动态库和SQL语句解析两部分组成,实现对应用程序提交的SQL语句的解析、对加密密钥的加载以及对数据信息的加/解密处理;

数据库对象模块是数据库加密系统与DBMS的接口,数据库加密系统通过该模块实现对数据库的访问和操作,而DBMS则通过该模块调用加/解密动态库来实现相应的加、解密操作;

加密系统管理模块用于系统管理员对密文数据库中的信息及加密密钥进行管理,如修改加密字段信息、加载密钥和变更加密密钥等。

下面以应用程序访问密文数据库为例,简要说明系统的工作原理:

首先,SQL解析模块对应用程序提交的SQL语句进行分析,根据DBMS中的加密字典对SQL语句进行解析和扩展;

然后,加密系统将重组后的SQL语句提交给DBMS。DBMS通过数据库对象模块调用加/解密动态库,对数据库中的密文数据进行解密,并将解密后的结果反馈给数据库对象模块;

最后,应用程序通过数据库对象模块获取解密后的明文数据。

3、加/解密引擎模块

(1) 加/解密动态库

加/解密动态库是加/解密引擎模块的核心部分,也是整个加密系统的核心。动态链接库(dynamic link library,DLL)是一个可以被其它应用程序共享的程序模块,其中封装了一些可以被共享的例程和资源,由Windows应用程序直接或间接调用来执行。系统中的加/解密动态库主要实现了3DES加密算法、不同数据类型与二迸制流之间的相互转换和加密密钥的加载等。加/解密动态库由数据库对象模块的加/解密存储过程根据需要调用并执行,从而实现相应的功能。

①3DES加密算法:3DES(即Triple DES)是DES向AES过渡的加密算法,是DES的一个更安全的变形,三重DES增加了密钥长度。因此,系统中采用3DES算法实现对数据信息的加/解密,具有较高的安全性。

②不同数据类型与二进制流之间的相互转换:由于数据库中字段的数据类型是多样的,就需要考虑不同数据类型与二进制流之间的相互转换。当用户读数据时,首先将密文二进制流数据解密为明文二进制流,而后根据加密字典中的信息,通过UDF(user-defined func-tions)将明文二进制流转换为与之匹配的数据类型之后返回给前台用户:当用户对密文字段写入数据时,首先将写入的数据类型转换为二进制流类型,对转换后的二进制流数据进行加密并保存。

③加密密钥的加载:由于系统中对数据的存储加密采用的是对称加密算法,所以整个加,解密的过程中密钥的保护尤为重要。系统中的加密密钥保存在硬介质智能卡中,通过密钥加载程序将密钥从智能卡中读出,而后将读出的密钥加载到数据库服务器端的共享内存区。加,解密动态库通过密钥在共享内存区的用户自定义索引获取加/解密密钥。

加密密钥的加载过程如图3所示。

基于扩展存储过程的数据库加密技术

(2) SQL语句解析

SQL语句的解析需要用到数据库对象模块的加密字典和UDF。加密字典表保存了数据库中密文字段的字段名、数据类型、加/解密UDF等相关信息。而UDF则用来调用相应的扩展存储过程最终实现对数据的加密和解密。

在对SQL语句进行解析时,主要是进行词法和语法分析,获取相应的语法树,并与加载到内存中的加密字典相比对,在各个需要加密的字段上应用相应的UDF,实现对SQL语句的扩展。

4、数据库对象模块

该模块主要包括了扩展存储过程、用户自定义函数和加密字典等内容。

(1)扩展存储过程和用户自定义函数_

在系统的设计中,扩展存储过程和UDF对加/解密动态库进行了封装。从而通过扩展存储过程和UDF实现了对密钥的加载和数据的加、解密过程。

(2)加密字典

加密字典实际上是数据库中的一张表,如同设计数据库系统中所用到的“数据字典”一样。加密字典中保存的是所有密文字段的相关信息。加密字典经由加/解密引擎模块加载到数据库服务器内存,它分为两个线性链表:表名链表和字段名链表。字段名链表通过Tablelndex与表名链表建立起映射。

在对SQL语句进行解析时,首先遍历表名链表,对语句中出现的密文表名进行标记。在解析到字段信息时,遍历字段名链表,并通过Tablelndex索引表名链表中对应的结点,从而对密
文字段应用相应的UDF。

5、加密系统管理模块

密钥管理是整个数据库加密系统的关键,因为密钥一旦泄露,数据库中的密文信息就变得毫无意义。所以密钥的生成、保存、加载和更新操作在整个系统中极为重要。

(1)密钥的生成:

采用二级密钥,用于对数据库中数据信息进行加密的对称密钥和用于对对称密钥进行加密的非对称密钥对。其中,非对称的RSA密钥对在卡内生成,对称密钥则以密文形式存放于智能卡中,对称密钥的加密处理由智能卡的硬件完成。

(2)密钥的保存:

在加密系统中,非对称密钥保存在硬件介质“智能卡”中,所以很好的确保了密钥的安全性;对称密钥被非对称密钥加密后,通过采用位数较长的非对称密钥和加密强度较高的RSA算法,很好的保证了对称密钥的安全性。智能卡(U-KEY)的一个最大特点就是存储在智能卡EPPROM中的数据受硬件保护,用户如果没有PIN码,无法强行从智能卡中获取EPPROM中的数据,一旦智能卡硬件被破坏,数据也随之丢失。

(3)密钥的加载:

存储在“智能卡”中的非对称密钥对,将加密存储于数据库中的对称密钥解密并将其加载于操作系统进程都可以访问的共享内存区,这样就可以通过对共享内存区的密钥设置惟一的标识ID,来索引每一个对称密钥。由于标识ID是由系统自定义的,因此能够很好的确保对称密钥的安全性。

(4)密钥的更新:

系统中通过定期变更“智能卡”中的非对称密钥来保证对称密钥的安全性。在非对称密钥变更时,需将数据库中的对称密钥解密后重新加密保存。当对称密钥需更新时,加密系统的管理程序根据加密字典中的信息对原加密信息解密后,用新的密钥对信息重新加密,然后更新对称密钥,从而确保数据库中的密文数据在密钥变更前后的一致性。

该数据库加密系统将SQL语句解析组件嵌套于客户端的应用程序中,使得客户端应用程序对数据库的访问不受加密的影响,从而实现数据库最终用户对数据库服务器的“透明访问”;密钥管理程序运行在数据库服务器端,实现对加密系统中密钥的管理、加载和更新;加密字典管理程序运行在数据库服务器端,实现对加密字典的管理、对密文字段的变更等功能。

基于扩展存储过程的数据库加密系统模型,应用扩展存储过程技术,实现了对DBMS内核级的功能扩展。该模型已经实现并在实际中得到了应用,取得了预期的效果。

小知识之DBMS

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