[摘要] 本文设计了一种更安全、有效的数据库加密方法。该方法采用二级密钥体制,即用工作密钥将数据用对称加密算法进行加密,然后使用非对称加密算法用主密钥进行加密,最后在数据库中存储的是工作密钥的密文数据。
[关键词] 二级密钥 密文数据库 密钥管理
一、引言
目前,以计算机和网络为基础的各种管理信息系统(mis)已成为当今社会运行的基础。数据库是mis的核心,是一种可共享的资源。在数据库系统中大量集中存放的某些数据很可能是国家或单位的机密数据或重要数据,这些数据一旦被泄密或遭到破坏,将给国家或单位造成巨大损失。据有关资料报道,80%的计算机犯罪来自系统内部。因此,数据库的安全与保密成为mis安全的一个关键。
二、数据库加密的特点
数据加密就是将数据和信息(称为明文)经过一定的变换(一般为变序和代替)转换为不可辨识的数据形式(称为密文)的过程,使不应了解该数据和信息的人不能够知道和识别。预知密文的内容,使用加密的逆过程再将其转变为明文,即将密文数据转变成可见的明文数据,即为解密过程。加密盒解密过程构成密码系统,明文与密文统称报文。任何密码系统无论形式多么复杂,至少包括明文集合、密文集合、密钥集合和算法,其中密钥和算法构成了密码系统的基本单元。算法是一些公式、法则或程序,规定明文与密文之间的变换方法,密钥可看作算法中的参数。数据库密码系统要求将明文数据加密成密文数据后存储,查询时将密文数据取出解密得到明文信息。
较之传统的数据加密技术,数据库密码系统尤其自身的要求和特点。WWw.133229.cOM数据库加密分为基于数据库、表、记录、字段,对于加密与普通不加密情况下的性能,通过不同的加密级别的单机平台试验,比较出字段级数据库加密的效果比记录级、数据表级和数据库级要好,而且对于数据的加密算法最好是对称加密算法,因为对称加密算法加/解密速度快,适合于对大量的数据加密。
另外,在网络通讯系统中,每次通讯的会话密钥是动态产生的。会话一旦结束,本次会话密钥也就失去作用,可以被清除掉。而数据库中数据是长期存放的,数据的加密密钥不可能随用随清,密钥的某些信息必须存放在机器中。如此一来,总有一些特权用户有机会存取密钥,这对加密系统的安全是十分不利的,解决这一问题的方法之一是研制多级密钥管理体制。如何产生和保护这些密钥,做到在从产生到消亡这段时间内确保不会被泄漏,这就对密钥的管理提出了更严格的要求。
三、二级密钥体制
所谓二级密钥体制就是一级密钥为主密钥,使用公钥算法如rsa;二级密钥为工作密钥,使用私钥算法如des。工作密钥用于对数据库数据进行加。脱密,主密钥的作用是对工作密钥进行加密。这样就既利用了私钥算法的快速性又保持了工作密钥的安全性。二级密钥工作的流程图如图1所示。
1.数据库加密中的二级密钥体制
当决定对表中的某个字段中的数据进行加密之后,面临的一个问题是如何对该字段中的数据加密?这是一个非常严重的问题。在本研究中,我们控制系统为该字段随机产生一个对称密钥(我们称对称加密算法忠要用到的密钥为对称密钥)。数据库表中该字段内的所有数据,都用这个对称密钥进行加密存储,这就是工作密钥。对于工作密钥一种最简单的处理方式是让这些用户直接保存和管理数据密钥,但是用户自己保存这些密钥仍然存在着很多问题,如对某个用户来说,可能拥有访问权利的不仅仅是一个加密字段中的数据,用户很可能同时使多个加密字段的授权用户。而对于不同的加密字段,所对应的数据加密时不同的。(因为,如果对于不同加密字段,都是用相同的一个数据密钥的话,就很容易造成数据泄密。)这样,用户就需要同时管理对应于多个加密字段的多个数据密钥,用户的负担显然过于沉重,另外对于数据库的超级用户管理员来说如果这些工作密钥是明文存储就没有什么意义了。因此对于这个问题,我们考虑用二级密钥的加密体制。
2.密文数据库的加密过程
我们用非对称密钥算法对工作密钥进行加密,将加密后的密文工作密钥存储在数据库中。我们用a代表加密字段中的所有数据,k代表用来对该字段加密的数据密钥,k是由系统随机产生的,被用在对称加密算法中。ku1,ku2,……,kuun是加密字段的授权用户user1,user2,……,usern各自的公钥。
(1)k作为对数据加密的对称密钥,使用非对称加密算法e1对a加密,得到a的密文形式e1(a,k)。把e1(a,k)存入数据库中,代替原来的明文数据。
(2)k被非对称加密算法e2加密,密钥就是用户i的公钥。当然这里用数据库用户i的公钥对k进行加密有一个前提,就是,数据库用户i必须是该加密字段的授权用户。令不同的数据库用户对应有不同的公钥(当然也有不同的私钥),则这里就有k的n个加密拷贝,例如对于数据库用户user1,有e2(k, ku1),对于数据库用户user2,有e2(k, ku2)。
(3)把这n个k的加密拷贝也存入数据库。所以在存储e1(a, k)之外,还需要额外地在数据库系统中占有n个存储空间。但这n个存储空间实际上可以理解为在取得方便性的时候必须付出的代价——用户不再自身管理数据密钥,付出这样的代价是值得的。
另外,一旦数据库中已经存有加密字段授予某用户的数据密钥的加密拷贝的话,用户存入数据的流程就有了一点改变。kr1,kr2,……,krn,在前面已经提到过,是数据库用户1,数据库用户2,……,数据库用户n的私钥。这样,对a的加密过程和对数据密钥k的保护过程改变为:
(1)数据库用户i从加密数据库中取出自己对于加密字段的数据密钥e2(k,kui),然后用自己的私钥kri作为解密密钥(假设数据库用户是加密字段数据a的授权用户),调用不对称解密算法d2,对e2(k,kui)进行解密,可以取回该加密字段的数据密钥k,加密算法e2与解密算法d2是配对的一套算法,例如,利用rsa算法分别执行加密和解密。
(2)k作为对数据加密的对称密钥,使用对称加密算法e1对a加密,得到a的密文形式e1(a, k)。把e1(a, k)存入数据库中,代替原来的明文数据a。
3.密文数据库的解密过程
如图4,利用解密算法d1,d2,从e1(a, k)得回a的整个过程可以描述如下:
(1)数据库用户i从加密数据库中取出自己针对加密字段的数据密钥拷贝e2(k, kui),用自己的私钥作为解密密钥,实际上,用户的私钥如何存储及取出,在后面的“用数据库用户口令对私钥进行加密保护”中有描述。调用不对称加密算法d2,对e2(k, kui)解密,可以取回该加密字段的数据密钥k。
(2)从加密数据库中取出e1(a, k),然后用k作为解密密钥,调用对称加密算法对e1(a, k)解密,就可以得回明文数据a。
四、结论
本文使用的数据库是sql server 2000,用到了java的加密扩展包即java cryptography extension,简称jce,它是sun的加密服务软件,包含了加密和密钥生成功能,使用到了非对称加密算法,解决了工作密钥的存储问题。
参考文献:
[1]王洪杰:应用数据加密技术对数据库数据加密的探讨[j].天津职业技术师范学院学报,2003,13(3):34~36
[2]左黎明等:基于jce的网络数据库敏感信息加密技术与实现[j].华东交通大学学报,2004,21(4):142~145