大家都知道数据库加密技术是保障数据库安全的一种有效手段,为此我们在对数据库加密系统进行详细研究的基础上,提出了一种采用基于DBMS外层的数据库加密系统,下面本编就给大家简单介绍一下。
一、数据库加密层次
目前,数据库加密可以在3个不同层次实现,分别是:操作系统层、DBMS(数据库管理系统)内核层和DBMS外层。
(1)在操作系统层实现加密和解密
由于操作系统层无法判别数据库文件中的数据关系,从而无法产生合理的密钥,所以对大型数据库而言,在操作系统层对数据库文件进行加密很难实现,已经不被人们考虑;
(2)在DBMS内核层实现加密和解密
是指数据在物理存取前完成加密解密工作。采用这样的方式优点是加密功能强,并且不会影响DBMS的功能,能够实现加脱密与数据库管理系统之间的无缝连接:缺点是加密和解密功能要在服务器端进行,而且DBMS和加密解密模块之间的接口需要DBMS开发商的支持。
(3)在DBMS外层实现加密和解密
是将数据库加密系统做成DBMS的一个外层工具,根据用户的加密要求自动完成对数据库中存放数据的加密和解密处理。这种方式的优点是:加密解密运算在客户端进行,不会加重数据库服务器的负载,并且可以实现网上传输的加密:缺点是加密功能会受到一些限制,与DBMS之间的耦合性稍差。
这种采用基于DBMS外层的数据库加密系统,这种方式既可以避免对具体的数据库提供商的依赖,又可以较好地实现数据库的加密。数据库加密系统作为一种通过加密方式保护数据的专门系统,它并不仅仅是一个数据库应用系统,而是一个将数据库管理、加密模块和密钥管理三者相结合的系统。
二、基于DBMS外层的数据库加密系统的基本要求
基于DBMS外层的数据库加密系统要求主要有以下4个方面。
1、加密算法选择
选择适合于数据库系统的加密算法应该满足以下的要求:
①由于数据库中的记录保存时间相对较长,因此加密算法强度要求高;
②数据库加密以后,明密文数据长度相同或者相当,不应明显增加,避免数据库管理系统有较大变动;
③对于大型数据库系统而言,数据库最常见的使用方式是随机访问,所以加脱密速度要足够快,对数据操作响应时间的影响应在用户可接受的范围内;
④加密算法应该能够直接对记录或者字段进行加密。
考虑到数据库数据量大、数据访问频繁的特点,数据库加密算法应采用对称密码算法,并且由于数据库字段的长度一般较小,适合采用小分组加密算法。目前数据库加密常用的算法如下:
(1)数据加密算法(Data Encryption Algorithm,DEA)是一种对称加密算法,很可能是使用最广泛的密钥系统,特别是在保护金融数据的安全中,最初开发的DEA是嵌入硬件中的。
(2)3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据块应用三次DES加密算法。由于计算机运算能力的增强,原版DES密码的密钥长度变得容易被暴力破解;3DES即是设计用来提供一种相对简单的方法,即通过增加DES的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法。
(3)AES加密算法,密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。
(4)RC5分组密码算法是1994由麻萨诸塞技术研究所的Ronald L. Rivest教授发明的,并由RSA实验室分析。它是参数可变的分组密码算法,三个可变的参数是:分组大小、密钥大小和加密轮数。在此算法中使用了三种运算:异或、加和循环。
2、加密粒度选择
较之一般的计算机数据加密技术,数据库系统的数据加密情况比较复杂。根据应用场合的不同,可分别选取以文件、记录或者字段作为加密的基本单位。由于层次不同,这3个加密粒度的适用环境与实现难度各不相同。
(1)以文件为单位进行加密
把数据库文件作为整体,用加密算法对整个数据库文件加密来保证信息的真实性和完整性。这种方法存在极大的缺点:由于数据库文件只有在解密后才能使用,因此,用户在使用数据库前需要解密整个数据文件。这样造成用户操作数据库过程中,数据库文件是以明文形式存放在磁盘上,用户在关机前必须确保明文数据库文件彻底删除以防止泄密,同时对索引文件、临时文件等一切可能引起泄密的文件也要彻底删除。
(2)以记录为单位进行加密
在某种程度上说,数据库系统中的每条记录完整地存储了一个实体的数据。因此,基于记录的加密粒度是最常用方式。这种方式是将数据库中每条记录使用不同的密钥加密后存于数据库文件中。一般来说,记录的长度一般较短,而在数据库中存储时间相对较长,如果使的密钥少,则导致保密性面临威胁,密钥使用太多又会导致密钥管理的复杂性。
(3)以字段为单位进行加密
是指以不同记录的不同字段为基本加密粒度进行加密。该方法可以对数据库中单个数据元素进行加密。这种方式的优点是具有最小的加密粒度,因而具有更好的灵活性和适应性。缺点在于:加脱密效率低:如果采用密钥对单个数据元素重复加密,则对于密文搜索攻击是脆弱的;如果各个字段的数据元素分别使用不同的密钥加密,其密钥数据非常庞大,导致密钥管理困难。
综合以上所述的不同加密粒度的优缺点,本文设计的加密系统采用以字段为粒度的加密单位,而密钥的分配则以记录为单位进行。这样既可以保证加密的强度又可以避免庞大的密钥管理。
3、密钥动态管理
由于数据库中的数据是长期存放的,因此数据的加密解密密钥不能随意丢失。为保证在密钥的生存期内不会泄露出去,必须对密钥进行合理的管理。使用数据库的客体间存在着较复杂的逻辑关系,所以数据库加密系统中不仅存有大量密钥,而且组织和存储工作非常复杂,需要对密钥进行动态管理。
4、降低数据库加密后的影响
对于数据库加密系统而言,最大不利因素就是其对数据库系统效率的影响。用户在对数据库进行频繁的随机访问过程中,要求数据库系统查询速度高。对数据库加密之后,如果没有适当的处理,将使数据库的访问速度变慢,如果超过了用户的容忍度,那么加密数据库也就失去了意义。因此,设计数据库加密系统的一个最基本的要求就是加脱密速度快。此外,对数据库的合法用户而言,加密过程应该是透明的,即用户在对数据的录入、检索和修改等操作时,无需考虑数据的加密解密问题。
三、用基于DBMS外层的数据库加密系统结构研究
1、数据库中数据加密、解密基本流程
数据加密基本流程是指将需要加密的敏感数据使用密钥进行加密操作,变换成其他人无法识别的形式。“秘密通道”是为保护密钥而使用的。在本文设计的数据库加密系统中,秘密通道是指使用3级密钥体制的密钥保护方式。
2、数据库加密系统体系结构
本数据库加密系统采用DBMS外层加密方式,数据加密算法使用成熟的3DES,动态的多级密钥管理。数据库加密系统分成3个功能相对独立的模块:数据库加密解密引擎、密钥管理模块和加密系统管理模块。对于客户端使用的数据库应用程序属于通常数据库管理应用程序;服务器端是数据库管理系统和数据文件,这里不作为重点研究。
加密解密引擎:它是数据库加密系统的核心部分,主要功能是完成后台数据的加密解密处理,实现用户对数据的透明访问。
密钥管理模块:密钥管理模块主要负责密钥的生产、更换、检测和销毁等工作。为加密解密引擎提供密钥,也为加密系统管理程序提供密钥的管理。
加密系统管理模块:对整个数据库加密系统进行加密字典和密钥等加密参数的管理模块。它调用加密解密引擎实现数据库记录的明、密文之间的数据转换,调用密钥管理模块进行密钥的管理。
3、主要功能模块
(1)加密解密引擎
数据库加密系统的加密解密引擎主要包括两个主要功能模块:数据库接口模块和加密解密处理模块。
1)数据库接口模块;主要有两部分接口
①用户访问加密解密引擎的接口;
②加密解密引擎访问后台的数据库文件的接口函数。
该接口模块将所有访问数据库的操作封装成一组函数,屏蔽了各类不同数据库的特性,使得加密解密处理模块不必考虑实际使用的是何种数据库。
2)加密解密处理模块
它是加密解密引擎的核心部分,它主要负责数据的加密解密处理。它包括:引擎的初始化、加密参数信息的检索、字段的加密变换和查询结果的脱密变换等功能。
在该模块中,加密算法是核心。不同的加密算法其强度和加密速度是不同的,具体见上文。本系统设计使用3DES算法。3DES算法的长度是固定的,因此,在对字段进行加密时,必须对加密的数据以112位长度为单位进行分割以便使用3DES算法加密,分割后不足112位数据补0。解密时,同样使用3DES算法,同时要去掉加密时添加的0以还原数据。下面以数据库最常用到的操作来说明加脱密处理的主要流程。
(2)密钥管理模块
密钥管理模块的功能是给加密解密模块提供密钥和相关的密钥验证和保护。本文设计的加密解密引擎采用字段加密的方式对数据库中的敏感数据进行密存。密钥管理设计为最具灵性的记录项加密粒度下的3级密钥管理方式。数据库里的密钥分3级:主密钥MK.表密钥TK和数据密钥Kij。在密钥管理中,主密钥是最重要的密钥,它用来保护表密钥,用它将表密钥加密后存储在加密字典中,而主密钥本身则存放在密码装置中。表密钥用以保护数据密钥Kij,根据待加密的第i条记录参数Ri,以及它的第j个加密字段属性Cj,那么该数据项的密钥可由下面的公式产生:
KIj=f(TK,Ri,Cj)。
该数据密钥是用来加密数据的工作密钥,不用物理方式存储。
(3)加密系统管理模块
加密系统管理模块是操作人员对数据库加密系统进行管理的工具。它位于DBMS与客户端数据库应用程序之间,主要功能是:验证用户是否具有对加密数据的访问权限,根据用户的需求更改加密参数;调用加密解密引擎实现对数据库中敏感数据的加密解密及数据转换功能。用户只有通过该模块才能访问加密字典,这样既可保证整个数据库加密系统设计的独立性,也更好地保证了加密字典的安全性。
四、加密系统的限制及对数据库的影响
数据库加密系统使用高强度的密码算法对敏感数据进行复杂的加密操作,并使用3级密钥体制保护工作密钥。这样的设计可以有效地防止来自操作系统和DBMS的攻击。但是,DBMS必须能够识别出部分数据,以便完成数据库文件的管理和使用,这样加密系统必须有一定的限制。另外,数据库加密系统不可避免地会对DBMS产生一定影响。
1、加密系统的限制
(1)索引字段不能加密
数据库的索引字段一般是为了达到迅速查询的目的,因此索引字段需要在明文状态下建立和维护使用,否则将失去索引的作用。
(2)表间的连接码字段不能加密
在数据库中,数据表之间存在着密切的联系,而这种联系通常是通过外部编码实现的,如果这些编码加了密,则无法进行表与表之间的连接运算。
(3)关系运算的比较字段不能加密
DBMS在完成关系运算,如参加和、差、积、选择和连接等操作的数据,一般要经过条件的筛选,这种“条件”选择项必须是明文,否则DBMS将无法进行比较。
2、DBMS影响
(1)失去对密文数据的分组、排序和分类功能
数据库应用中,经常要对检索的数据进行分组、排序和分类。这些数据项如果加密,则不能使用这些操作,即,SELECT语句中的groupby、order by和having子句无法在加密数据上使用。
(2)无法实现数据之间的约束条件
在数据库系统中数据之间定义了完整的约束条件。但是,数据加密后,DBMS将无法实现这一功能。此外,数据加密后,数值类型的数据只能在数据规定的范围内加密,加密后的数据长度不能超过字段定义的长度,否则DBMS无法接受不符合定义的数据。
(3)SQL语言中的内部函数将对加密数据失去作用
DBMS对各类数据均提供了一些内部函数,显然这些函数不可直接作用于加密后的数据。
(4)DBMS自带的应用开发工具的使用受限
DBMS的一些应用开发工具不能直接对加密的数据进行操作。
小知识之DBMS
数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称DBMS。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。用户通过DBMS访问数据库中的数据,数据库管理员也通过dbms进行数据库的维护工作。它可使多个应用程序和用户用不同的方法在同时或不同时刻去建立,修改和询问数据库。大部分DBMS提供数据定义语言DDL(Data Definition Language)和数据操作语言DML(Data Manipulation Language),供用户定义数据库的模式结构与权限约束,实现对数据的追加、删除等操作。