加密数据库系统的密钥管理

对存储在计算机系统外部存储器里的数据进行保护的手段是多种多样的,而数据加密方法是最基本的技术之一,特别是对于窃取或篡改数据之类的犯罪和破坏活动来说,更是一种有效的保护措施。因为它使数据以密文形式存于数据库,用户自己掌握相应的密钥,使非法侵入者即使能得到数据库的数据,也不能得到其明文形式。

数据库加密的密钥由于数据的长期存在而无法做到随用随清。因此,密钥管理在数据库加密系统中处于举足轻重的地位,因为密钥管理不好,即使加密算法强度再高,一旦密钥泄露或被窃取,数据还是没有安全性可言,加密也就形同虚设。

然而密钥的分配和管理问题也是一个难题。作为一门综合性技术,它涉及到密钥的产生、检验、分配、传递、保管、使用及销毁的总过程。本文就从密钥管理最重要的几个方面入手,讨论密文数据库的密钥管理。

密文数据库的密钥分类

数据库加密系统的密钥大致可以分成两类,一类是用户密钥,另一类是数据密钥。

用户密钥主要是用户对数据库的数据进行查询、修改等操作时需要。用户向数据库管理系统提供自己的密钥等信息,经过系统验证确认用户的合法性和权限后用户就可以进行相关的操作了。

数据库用户由于权限不同还分为两类。一类是数据库管理员,其权限最大,既可以对明文数据进行处理又可以对密文数据进行处理(可处理的是非敏感数据,对于敏感数据可以采用多人共同操作的方式);另一类是普通用户,只可以对明文数据进行处理。普通用户中包含了不同权限的用户,这可以通过建立用户权限类来实现,即相同权限的用户可以归入一个类中,比如可采用用户角色的方法,不同的用户属于不同的角色。

数据密钥分为两类,分别是主密钥和工作密钥。

主密钥是用来对数据密钥加/脱密使用的密钥,对其它密钥实施加密保护,其自身可定期更换。

对数据库加密可在表、记录、数据项三个层次上进行。现在用得最多的是在数据项这个级别上进行加密,本文讨论的也是在数据项一级的加密密钥的管理。相应的,工作密钥有表密钥(对应于每张表)和数据项密钥(对应于表里的每条数据)两种,表密钥是用来生成数据项密钥的密钥加密密钥,属于二级密钥,它在表创建时随机生成。数据项密钥是对数据库的每项数据进行加密的密钥,每个数据项对应的数据项密钥都不一样。

密钥的生成

·用户密钥、主密钥的生成

用户密钥、主密钥的生成基于混沌理论。混沌是自然界中普遍存在的运动状态,它是无周期、无序、非线性变化、有涨落起伏的,混沌具有非线性、蝴蝶效应、分维性以及长期预测的不可能性等特征。由混沌获得的随机序列是以确定的数学形式得到理论上不可预测的混乱结果,使得对系统的综合和描述分析几乎不可能,因而,它是一个优良的密钥源。详细的密钥生成过程见文献[2]。

·基于数据项加密的数据密钥的生成

考虑一个有N条记录,M个属性的数据库。Xij表示第i条(i≤N)记录上的第j个(j≤M)属性的数据项。对应每个项Xij有不同的加密密钥Kij。加密算法E是任意一种分组对称加密算法(如3DES),D为E对应的解密算法。则密文Cij=E(Kij,Xij)。由于加密密钥过多,出于安全和效率上的考虑,显然不能全部存储在介质上的,只能在需要的时候动态生成。同时,数据库中的数据需长期存放,要保证加密解密的一致性,对数据项解密时所用的密钥应和加密时所用的密钥完全一样,即前后产生的密钥要相同。因此,密钥不可能随机产生,而只能通过某种固定的函数关系生成。该函数只与数据项的位置有关,而与数据项的值无关。

通常,与数据项位置相关的几个量有:它所在表,所在的记录和属性。设每个表有一个表密钥TK,每个记录有一个不需加密的行标志Ri(1≤i≤N),每一属性也有一标志Cj (1≤j≤M),那么数据项Xij的密钥Kij可如下产生:

Kij=f(TK,Ri,Cj)

这里,f是数据项密钥生成函数,其中一般包含分组加密算法。该分组加密算法可以与数据项加密所用的块加密算法一致,也可以不一致。这里假设是一致的,都是E。其中Ri和Cj可以是记录或属性的一些固有性质,如存储地址的物理地址或属性名等等。由于Ri和Cj是以明文的形式存在,这样表密钥TK就需要保密,对TK的最有效保密方法是用密钥加密密钥对它进行加密。本文中就采用了主密钥来对其进行加/脱密处理。

密钥生成函数f应该满足以下3个安全条件:

(1)不同数据项的密钥相同的概率很小。

(2)即使已知数据项Xij的一些信息(如取值范围、概率分布),也不可能由密文Cij获得Xij的其它信息。

(3)由某一个数据项密钥难于求得其它数据项密钥。

另一方面,数据项密钥产生的速度应尽可能地快,这也是衡量生成函数好坏的一项重要标准。影响数据项密钥生成速度的最主要因素是执行分组加密算法E的次数,这是因为一个高强度的块加密算法E,执行它所需的时间是比较长的。所以,一个密钥生成函数产生数据项密钥时所需执行E的次数越少,密钥生成的速度就越快,所生成函数效率也就越高。因此,衡量一个数据项密钥生成函数效率的高低,最主要的就是看它执行块加密算法E的次数。

这里给出一种数据项密钥生成函数(加密算法是满足上面条件的块加密算法E):

Kij=K1i K2j

其中,K1i=E(TK,Ri),K2j=E(TK,Cj),

以下证明该算法是满足上面3个安全条件的:

对于条件(1),对同一记录i中的不同数据项Xip和Xiq,一般Cp≠Cq,从而K2p≠K2q,K1i K2p≠K1i K2q,所以Kip≠Kiq,同理,对于同一属性列的不同数据项Xpi和Xqi,Kpi≠Kqi 。对于任意两个数据项Xij、Xpq(i≠p,j≠q),若要使Kij=Kpq,即:

E(TK,Ri) E(TK,Cj)= E(TK,Rp)

E(TK,Cq)

(其中Ri≠Rp,Cj≠Cq)

可知,要找到使上式成立的Kij和Kpq还是非常困难的。由此可知,函数是满足条件(1)的。

由E的性质可知方程是满足条件(2)的。

当某个密钥Kij泄漏时,由于K1i和K2j的不可知性,攻击者不可能求得另外的密钥Kpq和TK,所以也是满足条件(3)的。

综上所述,此函数是满足所有的安全条件的。

密钥的存储与管理

密钥如何安全地存放是一个很重要的问题。为了保证密钥的安全性又方便合法用户使用,对不同的密钥采用不同的存放方式。而数据项密钥是动态生成的,不存在存放的问题。

·主密钥的存储

主密钥是用来加密数据密钥的密钥,因此,主密钥的安全性对整个数据库系统而言具有至关重要的作用。因为它一旦泄露或被窃取,所有的加密数据都会泄露。

本文中的主密钥是存储在密码装置中。在密码装置内部至少包含一种密码算法和供少量密钥、参数用的存储器,并只能经由不受侵犯的接口进行数据交换。在密码装置中,密钥是以明文的形式存在,当试图打开密码装置窃取密钥时,整个装置将自动销毁,里面的内容也不复存在。由此可起到对主密钥的保护作用。

为了保证主密钥的安全性,主密钥应该定期更换,但由于主密钥的产生,注入密码装置和正确性验证等均非常的严格,因此为了减少错误和节省时间,可采用注入一个主密钥MK,然后用某种方法得到它的一些变形MK1,MK2,…等来作为每次使用的主密钥。用这些生成密钥来代替主密钥的方法可以保证主密钥的安全性,还可实现密钥的分隔保护,也有利于密码装置的优化设计。

·表密钥存储

密文数据库管理系统中的每个数据库都有一个表密钥,它是一种数据较大且需长期保存的密钥。由于密码装置不可能存放这么大量的密钥,因此表密钥的保护方式只能是以密文的方式存放在数据字典中,用主密钥来对其进行加/脱密。一般来说,表密钥是不进行修改操作的,因为要修改表密钥,就需要对整个数据库进行脱密后再加密,开销相当大。只有当主密钥更换时,表密钥的密文形式根据主密钥生成的MKi才进行相应的更改。

·用户密钥存储

用户密钥是由用户自己保管的。由于用户密钥较长而且没有什么规律,可以采取将密钥存入智能卡的方法。为防止他人盗取用户的智能卡来非法访问数据库,还可以为每个用户设定单独的口令。访问数据库时,用户需要提供智能卡和自己的口令,由系统进行鉴别,通过认证就可以使用数据库了。

参考文献

[1] 余祥宣,倪晓俊. 加密数据库系统中的密钥管理 [j] 华中理工大学学报 1995.7

[2] 宋雨,赵文清. 密钥管理在管理信息系统中的应用研究 [j] 计算机工程与应用 1999.10

[3] 孙淑玲. 应用密码学清华大学出版社

来源:ZDNet


微信扫描分享本文到朋友圈
扫码关注5G通信官方公众号,免费领取以下5G精品资料

本周热点本月热点

 

  最热通信招聘

  最新招聘信息

最新技术文章

最新论坛贴子