对于像商业银行这样的数据密集型企业而言,数据的重要性日益凸现:一方面,数据是银行信息化的核心,是保障银行正常运转的关键;另一方面,数据是银行的宝贵资源和财富,对数据的挖掘、分析和利用将为银行创造更大的财富。而正是由于数据如此重要,使得它成为一个非常明确的易受攻击目标。为保障数据安全,我们提出了一种可应用在商业银行大型数据库中的动态生成密钥的数据库文件加密策略。
一、数据库加密技术应用的重要性
要想保障数据库的安全,首先要了解安全的威胁来源。对数据库的威胁可能来自黑客、网络外部的攻击者或者企业防火墙内部的某个工作人员。
目前,针对安全问题,多数网络的安全措施或者策略处于一种被动状态,主要用于保护网络的边缘安全。对于网络边缘的安全,各网络厂商已经进行了许多有益的探索,如防火墙、入侵检测及VPN等属于周边防御系统。但是,存在于网络服务器内的机密数据的安全隐患被忽视了。首先,外部攻击者只要突破网络就可以得到所有机密数据;其次,具有一定权限的银行内部员工也可以获得并且利用这些机密数据。
在目前的网络安全技术下,任何网络都存在漏洞。在数据不加密的情况下,任何系统的数据和数据库数据对内部和外部黑客都是公开的,黑客可以在几分钟内用移动硬盘等盗窃服务器的全部文件和数据库数据。由于利用一些公开的权威加密算法加密的文件和数据库数据很难被黑客破译,因此,数据文件加密和数据库加密成了网络安全的最后一道防线,也是网络安全最重要的解决方案。
二、数据库加密策略的选择
按照数据库加密的层次,数据库数据的加密可以在OS、DBMS内核层和DBMS外层实现。在OS层,由于无法辨认数据库文件中的数据关系,从而无法产生合理的密钥,也无法进行合理的密钥管理和使用。因此,在OS层对数据库文件进行加密目前还很难实现。在DBMS内层和DBMS外层加密的特点如表1所示。
三、基于3DES加密算法的商业银行数据库动态密钥加密方案
由于数据库系统包含文件(表)、记录、字段等多个层次的概念,所以对数据库文件加密也就可以选用以文件、记录、字段作为加密基本单位的方案。根据应用时具体要求的不同,实现时应用不同的方法。在传统的基于字段的数据库加密方法中,密钥是静态生成的,这样的加密方法缺点很明显加密、解密效率低若用单一密钥对每个字段重复加密,面对密文搜索攻击是脆弱的;若各字段的数据元素分别用不同的密钥加密,则密钥个数=记录个数×字段个数,数量惊人,难于管理。
近几年,为了解决上述问题,很多人提出了相应的解决方法。归纳这些方法的共同点,主要采取的策略是在不影响数据库安全性的前提下,尽可能地降低密钥的存储量。我们从数据库的安全性角度出发,提出了一种基于三重DES加密算法的动态密钥生成加密策略。
1、使用双密钥的三重DES加密算法
三重DES加密是一种将DES加密算法多次使用的技术。在第一次使用中,明文通过加密算法转化为密文。然后将该密文作为输入重新执行加密算法,该过程重复三次。在加密的三个阶段,共用到两组不同的密钥。具体运算过程是加密一解密一加密( EDE)。
给定明文巧受密钥K1,K2,密文C按如下方式生成:
解密时仍按同样顺序使用这两个密钥:
加密与解密过程如图1所示。
第二步,采用解密运算并没有什么密码学上的深层含义,只是为了使用三重DES的用户可以利用该加密算法解密单DES加密的数据。因为:
如果分组算法有一个n位密钥,那么用这种方法将有2n位密钥。IBM描述了这种加密一解密一加密模式与算法的传统实施之间的兼容性:如果设定Ki等于K2,这种加密方法与传统加密方法只用一个密钥加密相同。K1和K2轮流使用的本意是用于抵抗中间相遇攻击。
2、三级密钥关系
为了减少单个密钥的使用周期,增加整体安全性,在密钥管理中采用层次密钥结构,将密钥层次分为三层:用户密钥集KU={ku1,ku2,…kui},用来加密密钥加密密钥KK;密钥加密密钥KK,用来生成两组数据密钥K1、K2;数据密钥K1、K2,用来加密数据库中的明文数据文件。
三级密钥之间的关系如表2所示。
3、用户密钥集与密钥加密密钥的转换方案
设用户集U={u1,u2,…un}代表n个用户,U对应的用户密钥集为KU={ku1,ku2,...,kun}。一个密文表对应一个密钥加密密钥KK;而一个密钥加密密钥KK又对应一个用户密钥集KU。可知,KU={ku1,ku2,...,kun}与KK是多对一的映射关系。图2给出了KU、KK与待加密的明文表或密文表之间的关系。
我们采用下面的密钥转换方案实现{ku1,ku2,...,kun}与Kk的映射。
设Ti为转换参数生成器。对应每一个用户ui有一个解密参数Pi。 Pi由Ti生成。Ti构造如下:系统中有一个安全的传统加解密算法(E、D),令:
用户ui要访问KK时,ui提供ku,系统找到对应的pj,计算E( ku1, pi)E( ku1, I)_( ku1, Kk))Kk这样实现了{ku1,ku2... kui}与Kk的映射。对于一个非法用户uj,系统中没有与之对应的pj,因此无法得到Kk。
解密参数P;在系统中可能被别人读取到,但是并不会影响安全性。因为ui虽可知kui和所有的解密参数{p1,p2…pn},但根据加密算法的性质,ui仍不能得到kuj,对于u也是如此,所以安全性有保障。
该方案的优点不仅在于用户持有密钥量小,更重要的在于用户密钥的修改比较方便。如果ui要将kui改成kui’,则只要改动Ti即可。
Pi'取代Pi,ui就可用kui'完成访问,而Kk和数据库都未作变动,也不会影响其他用户对Kk的读取。
采用该密钥转换方案所付出的代价是对于一个拥有n个用户的待加密的明文表或密文表来说,系统附加了n个解密参数的存储量。
4、动态密钥生成策略及数据解密流程
数据库中每一个数据表对应一个密钥加密密钥Kk,以OIacle数据库为例,在设计数据表结构时,先创建一个sequence定义增长步长为L创建sequence的目的是为了确定表中每行数据所在行的序号。这样,通过行序号和表中的数据所在列的序号可以唯一确定表中的每一个数据。
设明文表中某一待加密的明文数据为P,P所对应的行序号值为X对应列所在的序号为Y。
设数据密钥K1=Kk+X,K2=Kk+ y(+为异或运算)。
将K1和K2作为3DES加密算法的两组密钥。设C为加密结果,具体的运算过程按照加密—解密—加密模式:
由于数据库文件加密与解密流程类似,下面以数据解密过程为例进行分析。如图3所示的数据库解密流程,当用户ui需要查看密文表中的某项密文C所对应的明文P'时,首先输入用户密钥ku1通过密钥转换方案获取密钥加密密钥K西遍历密文表中每一项密文,分别读取每一项密文所对应的X,Y然后通过动态密钥生成算法,生成该项密文对应的密钥K1,K2;采用三重DES解密算法对密文进行解密,得到明文只最后将得到的明文P与用户输入的P'进行比较,如果P=P'则解密完成,否则说明用户ui要查找的明文P'不在该密文表中。
5、三重DES加密算法的优点
(1)在加密过程中由于使用了两组不同的密钥,这种方法的密钥长度为56× 2=112位,密码强度增加了。
(2)对三重DES的穷举攻击的代价是2112≈(5×1033)数据级的。且用差分密码分析的代价是按指数级增长的,与单DES加密算法比较超出1052倍。
(3)使用双密钥的三重DES加密算法,数据密钥对K1和K2轮流使用可以很好地抵抗中间相遇攻击。
(4)密钥对K1和K2无需存储,存储在密钥库中的只是KK的密文。主密钥KM存储于客户端,由用户持有,入侵者想找到密钥对K1和K2很困难。
在商业银行大型数据库中,如果采取传统的静态密钥加密策略,由于数据库中存储的数据量巨大,将会产生相等量级的加密密钥,很难对密钥进行有效的安全管理。基于三重DES加密算法的动态密钥生成加密策略可以很好地避免由于庞大的数据量所产生的大量加密密钥,优化密钥管理,为商业银行的数据库安全提供了可行的加密策略。
小知识之DBMS
数据库管理系统(database management system)是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称dbms。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。用户通过dbms访问数据库中的数据,数据库管理员也通过dbms进行数据库的维护工作。它可使多个应用程序和用户用不同的方法在同时或不同时刻去建立,修改和询问数据库。DBMS提供数据定义语言DDL(Data Definition Language)与数据操作语言DML(Data Manipulation Language),供用户定义数据库的模式结构与权限约束,实现对数据的追加、删除等操作。