数据库加密的主要方法:
1.秘密同态技术。
找到一种方便的加密方法,不仅保证了数据库的安全性,而且保证了数据库的使用(如查询、插入和删除)一直是数据库加密的主要研究方向。为了提高密文数据库的查询效率,Rivest等人提出了秘密同态的概念。
定义1(秘密同态),假设EK2分别代表加密。解密函数,明文数空间中的元素是有限集合{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. 密钥管理方案灵活、高效,密钥安全存储,使用方便可靠。众所周知,加密算法本身并不保密,所以要确保加密数据的安全性通常取决于密钥的安全性。