混合数据库中大多都涉及到一些敏感数据,但我们要对这些敏感数据进行安全性的保护,同时又不能丧失数据库操作的高效和便捷性就变成了一项很重要的研究课题。为此,我们提出了一种混合型的数据库的加密策略。
一、AES算法分析及改进
AES加密算法是美国国家标准与技术研究所用于加密电子数据的规范。同时还是一个迭代的、对称密钥、分组型密码算法,它可以使用128、192和256位密钥,分组(16字节)加密和解密数据。AES加密算法初始化时拷贝16字节的输入数组到一个名为State(态)的4×4字节矩阵中,算法的主循环对State矩阵执行四个不同的操作:SubBytes(字节替换)、ShiftRows(行位移变换)、MixColumns(列混合变换)和AddRoundKey(密钥加)。Sub Bytes例程是一个代替操作,它将State矩阵中的每个字节替换成一个由Sbox决定的新字节。ShiftRows是一个置换操作,它将State矩阵中的字节向左旋转。MixColumns是一个代替操作,它用State字节列的值进行数学域加和域乘的结果代替每个字节。
AES加密和解密算法使用了一个由种子密钥字节数组生成的密钥调度表W[]。该方法被称之为密钥扩展例程KeyExpansion。从AES算法源代码中我们可以得知密钥扩展的规律,以种子密钥为128位、求第1轮轮密码为例的推算公式如式1)。其中I、j关系为I∈[1,11],当I=1时,j=0;当1>1时,j= (1-1) ×4。
如果第i轮的密钥w[j]、w[j+1]、w[j+2]、w[j+3]被窃取,根据以下规则‘如,由w[j]和ww[j+1]可算出w[j-3],由ww[j+1]和w[j+2]可算出w[j-2],由w[j+2]和w[j+3]]可算出w[j-l],由w[j]和w[j-l]可算出w[j-4]。这样就可以得到i-l的密钥w[j-4]、w[j-3]、w[j-2]、w[j-l],以此类推就可以得到整个W[]。
为了解决这个问题我们在KeyExpans ion方法中引入了用户访问权限值a(4字节),并采用式2)的推算公式,还以种子密钥为128位、求第i轮轮密码为例。i、j关系如式1)不变。
改进后的AES算法在w[]的推算上更加简单,在实现时也更加容易,在防破解和攻击方面功能的增进如表1所示:
改进后的AES算法引入了用户权限值a,虽然它增加了保存密码的数量,但它却大大的提高了数据库系统的抗攻击性。算法在实现上并没有变得复杂,在运行时也并没有多占用系统资源,保持了数据库系统的高效性。
二、加密策略及流程
所谓基于数据敏感度的混合型数据库加密策略,其实就是根据实际需求将数据库信息划分为敏感数据巧1、非敏感数据、敏感关键字和非敏感关键字;其中的敏感数据采用上面所述改进的AES算法进行二次加密,第一次使用某一轮密钥进行加密,第二次使用主密钥加密;对敏感关键字使用改进的AES算法加密,使用DES算法对非敏感数据和非敏感关键字进行加密。该策略的加密解密流程如图1所示。
该策略在使用前将数据分类并编号,编号O代表非敏感数据和非敏感关键字,编号1代表敏感数据,编号2代表敏感关键字。加密时采用如下步骤:
1)明文根据编号使用不同的加密算法,编号为O采用DES加密,为2采用改进的AES加密,最后得到密文加密过程结束。如果编号为1则进入第2)步;
2)选择首次改进AES加密的密钥。设k=a mod 11,其中a为用户访问权限,11为128位AES算法的迭代轮数,则在W[]中取从W[k×4]开始的连续4个元素做为密钥,并进行首次改进AES加密。
3)使用主密钥改进AES二次加密,最后得到密文。
该策略的解密过程是加密的逆过程,只不过在使用改进AES二次解密时先使用主密钥解密,一再使用首次加密密钥解密,首次加密密钥的计算方法也同加密一样。
三、加密策略系统实现
1、系统结构图
该加密策略系统主要由如图2所示各模块组成。数据划分模块的是由数据库系统管理员进行操作,功能是定义数据库中各表及各表中字段的数据类型划分和加密需求,以及数据库各用户的访问权限的数字化,用户权限和加密要求两部分就是由该模块产生的。用户API是加密系统的用户接口,主模块是加解密系统的核心模块,数据库访问接口主要是用来访问后台数据库的。
2、系统操作及实现细节
该系统在运行时首先由管理员操作数据划分模块产生用户权限和加密要求。最终用户权限被放在一个叫access[2][n]的二行n列的二维动态字符串数组中,access[0]存放的是用户类型,access[l]的相应位置存放用户类型的数字化值,n值代表用户权限的个数,由管理员动态设置。加密要求则被存放在一张名为ecrptreq数据表中,该表记录了数据库中所有表的加密情况及各表中字段被划分的类型及编号。
如果有用户要对数据库进行查询、修改、更新等操作,则在访问数据库内容之前系统会根据所访问的表名在ecrplreq表中查找该表是否被加密,如果没有就直接访问。如果加密则要根据表中各字段的类型编号调用主模块中的相应子模块进行加解密,然后再访问数据库。
该系统使用java语言实现,用到的主要方法及数据声明如下:
Public static strmg access[2] [n];//声明用来存放用户权限的数据
/*AES加密方法,参数依次为:明文、主密钥、用户权限术/
Public static byte[] AesEncrypt(Srring content, String Passwoud, String a);
/*AES解密方法,参数依次为:密文、主密钥、,用户权限术/
Public static byte[] AesDecrypt(byte[] content,S1ring Passwoud, String a);
/*AES二次加密方法,参数依次为:明文、轮密钥、用户权限术/
Public static byte[] AesEncryptTwo(String content, S1ring Passwoud, S1ring a);
/*AES二次解密方法,参数依次为:密文、主密钥、用户权限术/
Public static byte[] AesDecryptTwo(byteo content, String Passwoud,String a);
/*DES加密方法,参数依次为:明文、主密钥术/
Public static byte[] DesEncryptTwo(String content, String Passwoud);
/*DES解密方法,参数依次为:密文、主密钥术/
Public static byte[] DesDecrypt(byteo content, String Passwoucd);
高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。