数据库加密的主要方法:
1、秘密同态技术
寻找一种既保证数据库安全性,又保证使用(如:查询,插入,删除) 的方便性的加密方法一直是数据库加密的主要研究方向。为了提高密文数据库的查询效率,Rivest 等人提出秘密同态的概念。
定义1 (秘密同态) 假设Ek1 和Dk2 分别代表加密、解密函数, 明文数据空间中的元素是有限集合{ M1 , ?, Mn} ,α 和β 代表运算, 若α( Ek1 ( M1), ?,Ek1 ( Mn) ) = Ek1 (β( M1 , ?, Mn) ) 成立, 则称函数族( Ek1 ,Dk2 ,α,β) 为一个秘密同态。
秘密同态技术能够对数据直接在密文的状况下进行操作,从而有效提高对密文数据库的查询速度。但是该方法对已知明文攻击存在一定安全隐患,所以Domingo 等人对其进行了改进。此后国内外也有很多基于秘密同态技术的研究。秘密同态技术能够对未经解密的密文数据进行查询,大大提高了密文数据库的查询效率。但是,因为该方法对加密算法提出了一定的约束条件,使得满足密文同态的加密算法的应用不具有普遍性。
2、密文索引技术
提高密文数据库查询效率的另一种主要方法是密文索引技术。假设属性A 是用户的查询属性,为A 建立索引A’,A 是对用户保密的,用户只能看到其索引A’,这样既保证了用户查询的方便性又保证了敏感数据的安全性。对于加密粒度为字段级和记录级的加密方法比较适合于建立索引,而对于加密粒度为属性列的加密算法,因为算法是以属性列为最小加密单元的,即使为属性列建立索引在检索时也需要对整个属性列进行解密,所以并不适合于建立密文索引机制。
目前有许多关于密文索引的方法。
一种基于哈希算法的分散密文索引技术,假设敌手只拥有密文数据及其对应的索引,由于索引中的数据地址是以密文形式存放的,找不出密文与索引的对应关系,该方法能对抗敌手的静态分析,但是对于动态跟踪技术存在一定的安全隐患。
一种可以防范内部攻击的基于元组的索引方法,但是对每一个索引的查询都会返回所有相匹配的元组,降低了查询效率。另外还有顺序索引技术、数组索引技术和矩阵索引技术等也都针对不同问题被先后提出。对于大型数据库建立索引,由于数据量较大,建立的索引不能完全存放于主存之中,目前大多采用B + 树的方法将索引存于外存之中,当应用时再将部分索引调入主存。采用B + 树存储存在一定缺陷,因为数据库需要进行大量的存储和删除操作,随着节点的增删,势必会引起B + 树的不平衡,从而影响查询效率。所以,对于小型数据库有研究提出以矩阵的形式存放索引表,并将索引表一次性存入主存之中,以提高查询效率。
目前,大多数的密文索引技术都是针对于外部攻击的,虽然也有一些针对于内部攻击的密文索引技术,但是在安全性和易用性上还存在一定问题。
3、子密钥加密方法
传统的基于记录的数据库加密的方法存在一个问题,因为数据是以记录为单位进行加密的,所以在查询时需要对整个字段进行解密(或对需查询的明文进行加密) 以后再进行查询,这就必然增加了查询开销。为了解决基于记录的数据库加密技术存在的问题, G. I.David 等人提出了子密钥数据库加密技术。
Hwang M - S 等人提出采用多级子密钥的安全模型以提高子密钥系统的灵活性和安全性。子密钥加密算法的核心思想是根据数据(特别是关系型数据库) 中数据组织的特点,在加密时以记录为单位进行加密操作。而在解密时以字段为单位进行解密操作,系统中存在两种密钥,一 种是对记录加密的加密密钥,另一种是对字段进行解密的解密密钥。子密钥加密方法,从一定程度上解决了针对记录加密方法的缺陷。但是,因为系统要保存两种密钥,这就增加了密钥管理的复杂性。这一点也是子密钥加密所急需解决的问题。
一个好的数据库加密系统应该在保护数据安全的基础上,尽可能提高工作效率,在工作效率和安全性之间取得一个平衡。总体来说应该满足以下要求:
1. 加解密速度要求足够快,这样减少影响数据操作响应时间。
2. 加密强度足够大,保证大部分数据长时间不被破译。但是在实际应用中加密算法不一定在理论上无法破解,但在实际应用中应能保证破解密文的代价大于获得其中数据的意义。
3. 对数据库的合法用户来说加解密操作是透明的,它不会影响用户的合理操作。换句话说,若某用户在明文数据库系统中能够进行更新、增加、删除数据、那么在密文数据库中也可以用相同的方法增加、更新和删除数据,用户不用关心数据如何完成加解密。
4. 加密后的数据库,存储量不能有较大程度增加。
5. 密钥管理方案灵活、高效,密钥安全存储,使用方便可靠。众所周知,加密算法本身并不保密,所以要确保加密数据的安全性通常取决于密钥的安全性。