将数据库中关键敏感字段根据其安全需求分为不同级别,用对称加密算法对关键敏感字段分级别加密,其数据密钥采用椭圆曲线加密算法保护。该方案将对称加密算法、椭圆曲线公钥加密算法和单向函数有机结合,实现了用户使用权限和关键敏感字段的安全级别的关联。用该方案建立的加密数据库,不仅可以保证敏感数据的机密性和完整性,而且节省大量存储空间和支持分级别权限访问,保证了数据库的高效可用性。
一、数据库加密方案
新方案由系统初始化,数据库中数据关键字段加密、数据加密密钥的安全存储、数据加密字段的解密4个阶段组成。
1、系统初始化
令E是Ep上的椭圆曲线,P是E(Fp)上的点,设P的阶是素数n,则集合(P)=(00P,2P,3P,…,(n-l)P)是由P生成的椭圆曲线循环子群。素数P,椭圆曲线方程E,点P和阶n构成公开参数组。用户ui私钥是在区间[l,n-l]内随机选择的正整数d,相应的公钥是Qi=dP。并将椭圆曲线参数组(p,E,P,n)保存在数据库里。
2、数据库中数据关键字段的加密
令Data-term-z代表数据Data中每个记录的第l个字段属于敏感信息,需以密文保存在数据库,使数据Data中每个记录的第l个字段一般用户是不可见的(即不能访问的),只有达到级别的用户才能访问它。现假设有一数据Data中的记录有α个字段Data-term-lλ(λ=1,2,…,d)属于敏感信息,其安全级别需求从高到低的次序分别为Data-term-l1,Data-term-l2,…,Data-term-lα。数据库按如下方式保存数据Data:
(1)随机选取ko∈{0,1k},计算
为字段Data-term-lλ的加密密钥;
(2)用密钥kλ加密,得到Data-term-lλ的密文CData-term-lλ=Ekλ(Data -term-lλ);
(3)将数据Data的敏感信息字段Data-term-lλ(λ=1,2,…,α)以密文CData-term-lλ保存在数据库中,其余字段信息仍以明文保存。
3、数据库数据加密密钥的安全存储
假若授权用户uj,能访问数据Data的加密字段的最高级别是Data-term-lη,即只能访问加密字段Data-term-lη,…,Data-term-lα,其中1<η≤α。服务器端Ui按如下操作存储data数据的字段加密密钥kλ
(1)从系统公用文件中读取Uj的身份标识IDj所对应的公钥Qj和系统公共参数params;
(2)随机均匀地选取r∈[l,n-l],利用私钥Sj计算c1=rp和C2=kη+rQj;
(3)将密文c=(CI,G)与Data保存在同一数据库中。
4、数据加密字段的解密
当Uj想访问数据Data的保密字段时,首先从加密数据库中获取(C1,Q),然后进行如下处理:
(1)利用用户Uj的私钥d,(C1,C2)和公共参数组,计算出解密密钥k= C2-dC1;
(2)用k分别计算加密字段CData-term-lη,…,CData-term-lα的解密密钥
其中η≤τ≤α;
(3)用密钥kτ,分别解密数据Data的加密字段CData-term-lτ,得到该字段的明文Data-term-lτ,=Dkτ(CData - term -lτ),其中η≤τ≤α。
在上述方案中,授权用户Uj的合法访问区域是加密字段CData-term-lτ,其中η≤τ≤α。Uj不能访问只有高安全级别授权用户访问的加密字段CData-term-lτ,l≤τ≤η-1。H2(.)是安全单向的Hash函数,因此,uj根据kη从kη=H2(kη-1)求解kη-1是一个难问题。
二、数据库关键敏感字段分级别加密方案的分析
本方案是基于椭圆曲线的离散对数问题和Hash函数的安全性假设的,其安全性和效率分析如下:
(1)可以确保多个授权用户对同一个加密字段进行共享访问,并且是分级别的访问,只有高一层的用户级别才可以对下一层的访问。uj根据kη从kη=H2(kη-1)求解kη-1,是一个难问题。只有达到级别的用户才能访问它,并且可以访问其级别以下的加密字段。采用对称加密算法对关键字段加密,这样授权用户可以对加密字段进行快速的解密,不影响系统运行速度。因此只要通过自己的私钥对密钥的密文解密得到加密字段的密钥,用心分别计算加密字段CData-term-lη,…,CData-term-lα的解密密钥
其中η≤τ≤α,从而最终可以高效访问明文数据,达到对关键字段分级别访问的目的,并防止越级访问。
(2)密钥的存储安全。因为密码系统的安全依赖于密钥的安全,所以最好确保访问密钥的实体数量保持最少。通过限制密钥在使用范围为单一目的,可以减少需要访问密钥的实体数量,在数据库加密系统中,这个要求的具体体现是密钥只能用于单一的数据库。本文通过kη得到同一级别中其他敏感字段的密钥,保证了一字一密,同时kη用椭圆曲线加密算法加密,攻击者面临椭圆曲线对数问题,从而可以防止非法用户去随便加解密数据库的数据,保证了数据的完整性。
(3)可以抵抗已知密文攻击。已知密文攻击是以大量使用同一密钥的数据作为基础来进行的,如果使用多个不同的密钥对数据进行加密,每个密钥加密的数据量就会比较少,从而限制了这种攻击的有效性。
(4)节省存储空间。与当前通用的密钥长度1024比特的RSA加密方案相比,本文方案使用椭圆曲线加密算法达到与其同等的安全性,密钥长度只需160比特。每个用户的密钥长度仅约为RSA方案的15.7%。此外,本文通过kη得到同一级别中其他敏感字段的密钥,保证了一字一密,同时数据库只要保存用户的一个密钥,极大地节省了存储空间;且在系统加载密钥时,可以减少处理负荷,使得加解密速度快。
在奔腾处理器740(1.73 GHz)、内存256 MB的SONY计算机上,使用数据库Oracle9i,对数据设置6个密级I={1,2,3,4,5,6},笔者在局域网内进行了实验。与根据需要在各级为用户设置不同密钥相比,本文方案为每个用户只保存一个密钥的设计方式,在500个用户使用的环境下,密钥存储空间节约了大约52.85%,但最高权限为i∈I级的用户获取第2级的解密数据是他获取第(l一1)级的解密数据所需时间的
1.27倍左右,其中i∈I满足1≤I≤i。这是因为大多数普通用户只需1个或2个级别的数据访问权限,具有各个级别数据访问权限的用户十分少。在实验中,设置最高访问级别为1—6级的用户分别占总用户数的60%,20%,10%,6%,3%和1%。而具有最高级别为i∈I的用户在获取第f级加密数据的解密密钥时,比获取第(l-1)级加密数据的解密密钥要多计算1次Hash函数,这需要耗费更多的时间。随着高级别权限的用户数目的增多,本文方案在节约密钥存储空间方面更有优势;而使用更高性能CPU的计算机作数据库的服务器,将加快Hash函数的计算,提高系统的效率。
小知识之Hash函数
Hash,一般翻译做"散列",也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。