为降低数据库明文泄露的风险,我们提出一种基于ECDH(Elliptic Curvc Diffie-Hellman)密钥交换协议和Rijndael加密算法、将私钥独立于DBMS之外的数据库加密方案。使用用户可根据自己数据安全性需求,灵活选择密钥长度参数。

一、ECDH协议与Rijndael加密算法

1、ECDH密钥交换协议

ECDH是基于ECC(Elliptic Curve Cryptosystems,椭圆曲线密码体制)的DH( Diffie-Hellman)密钥交换算法。交换双方可以在不共享任何秘密的情况下协商出一个密钥。该算法可以使A/ice、Bob双方在不共享任何秘密的情况下,协商出一个密钥,且继承了ECC密钥长度短、计算速度快和安全性能好等突出优点。在Alice、Bob共享椭圆曲线E、大素数阶N、基点G参数的前提下,密钥交换过程如下:

(1)Alice生成随机整数a<N(私钥),计算出公钥A=axG。Bob生成随机整数b<N(私钥),计算出公钥B=bxG。

(2)Alice与Bob双方分别将公钥A、B互相传递给对方。以此为基础,双方分别接收到对方发送的A或B,并对算式Q=bxA、Q'= ax曰分别进行计算。

经过交换和结合,Alice、Bob得到:

Q=bxA =bx(axG)=(bxa)xG=(axb)xG=ax(bxG) =axB=Q’即共享密钥Q。

设计方案将公钥口保存到DB,用户保存私钥a.经ECDH计算产生协议密钥Q=axB,Q再经转换后,生成数据密钥,由此避免了由数据库泄露数据密钥的风险。

2、Rijndael加密算法

Rijndael是一种在高级加密标准(AES)中使用的基本加密算法。

同时Rijndael还是一种对称分组加密算法,具有分组长度和密钥长度可变的灵活特性,即它可用128 bit、192 bit或256 bit的密钥对以128 bit、192 bit或256 bit为分组的数据加密。该加密算法与许多分组加密算法一样,用“轮”作为基本的变换单位,轮数(最小为10)随着分组长度和密钥长度的增加而增加。轮变换包括SubBytes0、ShiftRows0,MixColumns0及AddRoundKey0这4个不同的变换,而这些变换都是可逆的,以方便解密。

除此之外,Riindael加密算法在不同环境下具有良好的适应性,内存需求低,抗多种攻击性能优秀,这也是本文选择Riindael加密算法加密数据库数据的主要原因之一。

3、初始化向量

为了隐藏明文的统计特性和数据格式等关键参数以提高数据的安全性,.Net平台提供了5种分组对称加密算法模式:

(1)电子密码AC(Electronic Code Book. ECB);

(2)密码块链(Cipher Block Chain,CBC);

(3)输出反馈(Output Feedback, OFB);

(4)密码反馈(Cipher Feedback,CFB);

(5)密码文本窃用(Cipber Text Stealing,CTS)。

除了模式(1)之外,其他4种模式都使用了初始化向量N来实现反馈这一安全性增强机制。即用一个密钥和一个N对数据块进行加密转换,再用N将上一个加密块的信息混合到下一个加密块,从而保证了密文的隐蔽性。

显然,密文的生成与解密不仅要依赖密钥,同时对N也有一定的依赖性,以CFB模式为例,实验证明了该加密模式具有良好的N敏感性。

二、数据库加密系统结构

为了避免由数据库保管密钥导致泄漏的潜在危险,数据库加密设计方案采用了在DBMS外层实现的策略,由功能相互独立的加密字典管理模块和数据库加密和解密引擎2个构件组成。

1、加密字典管理模块

加密字典用于记录用户对数据加密的相关信息,它通过界面接口,为用户提供加密数据选项、加密操作及初始化向量等交互服务。设计方案中的加密字典包括tb_EncryptFields和tb_PublicKey2个表。

加密字典定义步骤如下:

(1)验证用户合法性:系统接收到用户输入口令pwd后,用较安全的杂凑函数SHA256计算出256bit的N=SHA256(pwd),截取H的游64 bit,计算subHi=H.Substrirg(0,64)。与表1的字段sha.Pwd进行比较,若逻辑值为1,则为合法用户,否则,返回登录页面。

(2)分配公钥:获取表2的uld字段,并自动为其分配系统公钥pK。

(3)定义密钥和IV长度:依据rdd的权限,为每个可加密字段没置密钥长度kL及IV长度ivl,并存入表2。

为保证数据的安全,可擞据需要适时更新用户口令并配置加密字典。更新婀须进行备份并解密数据库,配置完成后,按照新的机制对数据库实施加密操作。

2、数据库加密引擎和解密引擎

数据库加密和解密引擎是数据库加密系统的核心构件之一,其功能住子完成数据的加密和解密处理。

(1)加密

1)用户登录成功后,系统俄取片的后192 bit,计算subH2=H.Subsn-ing( 64,192),获取用户私钥sK=SHA256(subliz)。

2)从表1获取公钥pK,用ECDH计算出该用户加密数据的中问密钥cK=ECDH(sK,pK)。

3)选取需加密字段fN,从表2中获取该字段的加密密钥挺度kL及IV长度ivL等相关信息。

4)利用K= SHA256(c.K).Substring(0,k/)IV =cK.Siibstring(256 - ivL,ivL)计算加密该字段的密钥K和初始化始化向域IV。

5)用Rijndael对字段JN进行加密,得到密文C=En_RijndaeI(fN、K,lv)。

(2)解密

1)一4)与加密前4步相同:计算出需解密字段fN的密钥K和切始化向量IV。

5)用Rijndael对字段JN进行解密,得到明文De_ Rijndael(fn,K,IV)。

三、数据库加密系统之ECDH与Rijndael加密算法应用

基于.Net平台的实验环境设置为Visual Siudi0 2008,SQL Server 2005;实验用机为Pen 3.0 GHz CPU,l GB内存,操作系统为WindoWs XP;实验用的DB由DBGen自动生成,大小为500 MB。

1、加密效果与密钥空间

以加密数据库中的关键字段qst_coruent为例,如图4明文数据所示。

设定十进制192 bit的密钥:

key= {82, 107, 98, 52, 106, 118. 85, 121, 47, 121, 101, 55,67, 100, 55, 107, 56, 57, 81, 81, 103, 81. 61, 61}以及128 bit初始化向量:

IV={70, 70, 248, 142, 245, 50, 255, 39, 187,9,222, 228,243, 212, 16, 129}

方案中的密钥与用户髓录口令、系统公钥及选择的密钥长度相关。加密效果则与密钥和初始化向量相关。该没计方.案的密钥空问依赖于Rijndael算法密钥的长度,即密钥空问为2128、7192和2256,证明此密钥空间足以抵抗穷举攻击。以192 bit密钥为例,若采用每秒1千万亿次的“天河一号"计算机进行理沦耗时汁算,耗时约:

f= 2192/(lx 1030 x3 600x 24x365)=1.99 X1020千万亿年。

同时,Rijndael算法固有的特性及初始向挝的引入,使设计方案具有较强的抗差分攻出和统计攻击能力。

2、密钥敏感性

密钥敏感性是指明文加密密钥的微小变化会得到2种完全不同的密文,如果解密密钥发生微小改变,会导致无法恢复出原始明文。以图4的原始明文为例,验证本文方案密钥的敏感性,在初始化向量不变的前提下,将加密密钥的末位数l修改为2,即:

key={82, 107, 98, 52, 106, 118, 85, 121, 47, 121, 101, 55,67, 100,55, 107, 56, 57, 81, 81, 103, 81, 61, 62}

实验结果说明,本文方案具有良好的密钥敏感性。

3、加密效率分析

在忽略实验环境差异的条件下,加密过程所耗费的时间越短,说明该方案的效率越高。本文对密钥长度分别为128 bit、192 bit和256 bit时,100条、500条、l 000条、5 000条、10 000条和20 000条记录的批量加解密耗时进行统计,结果如表3所示,从中可以看出,密钥长度对加密和解密耗时影响非常小。当密钥长度为256 bit时,对20 000条记录的加解密耗时分别是28.170 s和28.809 s,这一结果说明在保证数据安全的前提下,系统时间资源的支出是可以接受的。显然,加解密耗时与计算速度呈反比关系,机器配置越高,耗时越少。

该加密系统对各种数据库的加密具有普适性,无须对数据库应用系统进行修改,即可实施加密操作。实验结果证明,本文设计的系统具有足够大的密钥空间、良好的密钥敏感性和较高的加密效率。

小知识之数据库加密系统数据库加密系统是一款基于透明加密技术的数据库防泄漏系统,该产品能够实现对数据库中的敏感数据加密存储、访问控制增强、应用访问安全、安全审计以及三权分立等功能。