数据库字段分级的加密是对数据中的关键敏感字段分级别加密,用椭圆曲线加密算法加密数据密钥,密钥的管理是一种密钥分离的安全理念,即要求一个密钥只能用于一个单一的目标,其目的是尽可能减少访问某一密钥的实体的数量。
一、数据库加密方案
新方案由系统初始化,数据库中数据关键字段加密、数据文件加密密钥的安全存储、数据文件加密字段的解密4个阶段组成。
1、系统初始化
令E是L上的椭圆曲线,P是E( Fp)上的点,设P的阶是素数n,则集合(P)={∞,P,2P,3P,…,(n-1)P)是由P生成的椭圆曲线循环子群。素数P,椭圆曲线方程E,点P和阶n构成公开参数组。用户u,私钥是在区间[1,n-1]内随机选择的正整数d,相应的公钥是Qi= dP。并将椭圆曲线参数组(p,E,Qn)保存在数据库里。
2、数据库中数据关键字段的加密
令Data-term-z代表数据Data中每个记录的第z个字段属于敏感信息,需以密文保存在数据库,使数据Data中每个记录的第z个字段一般用户是不可见的(即不能访问的),只有达到级别的用户才能访问它。现假设有一数据Data中的记录有d个字段Data-term-lλ(λ=1,2,…,α)属于敏感信息,其安全级别需求从高到低的次序分别为Data-term-l1,Data-term- l2,…,Data-term- lα。数据库按如下方式保存数据Data:
(1)随机选取ko∈{0,1}k,计算为字段Data-term-lλ的加密密钥;
(2)用密钥kλ加密,得到Data-term-lλ的密文CData-term-lλ=Eka (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∈[1,n-1],利用私钥Sj计算C1= rP和q =kη+rQj;
(3)将密文c=(C1,C2)与Data保存在同一数据库中。
4、数据加密字段的解密
当uj想访问数据Data的保密字段时,首先从加密数据库文件中获取(C1,C2),然后进行如下处理:
(1)利用用户Uj的私钥d,(C1,C2)和公共参数组,计算出解密密钥k= C2 - dc1;
(2)用kη分别计算加密字段CData-term-lη,…,CData-term- α的解密密钥足,,其中η≤τ≤α;
(3)用密钥kτ,分别解密数据Data的加密字段CData-term_-lτ,得到该字段的明文Data-term-lτ=Dk, (CData - term -lτ),η≤τ≤α。
在上述方案中,授权用户Uj的合法访问区域是加密字段CData-term-lτ,η≤τ≤α。Uj不能访问只有高安全级别授权用户访问的加密字段CData-term-lτ,1<τ≤η—1。H2(*)是安全单向的Hash函数,因此,uj根据kη从kη=H2(kη-1)求解kη-1是一个难问题。
二、数据库字段分级的加密方案分析
本方案是基于椭圆曲线的离散对数问题和Hash函数的安全性假设的,其安全性和效率分析如下:
(1)可以确保多个授权用户对同一个加密字段进行共享访问,并且是分级别的访问,只有高一层的用户级别才可以对下一层的访问。Uj根据足,从kη=H2(kη-1)求解kη-1,是一个难问题。只有达到级别的用户才能访问它,并且可以访问其级别以下的加密字段。采用对称加密算法对关键字段加密,这样授权用户可以对加密字段进行快速的解密,不影响系统运行速度。因此只要通过自己的私钥对密钥的密文解密得到加密字段的密钥,用k。分别计算加密字段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.850%,但最高权限为i∈I级的用户获取第l_级的解密数据是他获取第(l-1)级的解密数据所需时间的1.27倍左右,其中i∈I,满足1≤I≤i。这是因为大多数普通用户只需1个或2个级别的数据访问权限,具有各个级别数据访问权限的用户十分少。在实验中,设置最高访问级别为1~6级的用户分别占总用户数的60%,20%,10%,6%,3%和1%。而具有最高级别为i∈I的用户在获取第z级加密数据的解密密钥时,比获取第(l-1)级加密数据的解密密钥要多计算1次Hash函数,这需要耗费更多的时间。随着高级别权限的用户数目的增多,本文方案在节约密钥存储空间方面更有优势;而使用更高性能CPU的计算机作数据库的服务器,将加快Hash函数的计算,提高系统的效率。
小知识之椭圆曲线
在数学上,椭圆曲线为一代数曲线,被下列式子定义:Y的平方=X的三次方+AX+B其是无奇点的;亦即,其图形没有尖点或自相交。 若Y的平方=P(X),其中P为任一没有重根的三次或四次多项式,然后可得到一亏格1的无奇点平面曲线,其通常亦被称为椭圆曲线。更一般化地,一亏格1的代数曲线,如两个三维二次曲面相交,即称为椭圆曲线。