■姚华
常见数据库加密技术对比
■姚华
从技术手段上来看,现今数据库加密技术主要有三大类,分别是前置代理及加密网关方式、应用层加密方式以及后置代理方式。这三类技术各自的特点如何,彼此之间孰优孰劣,下文详尽介绍。
该技术思路是在数据库之前增加一道安全代理服务,对数据库访问的用户必须经过该安全代理服务,在此服务中实现如数据加解密、存取控制等安全策略;然后安全代理服务通过数据库的访问接口实现数据在库中的最终存储。
这种技术也会存在一些问题和限制:
1)由于在安全增强代理中需要存储加密数据,因此要解决与数据库存储数据的一致性问题,这基本不可实现。
2)数据的联合检索问题:由于在数据库内外都存在数据,这些数据的联合检索将变得很困难;SQL语法的完全兼容也非常困难。
3)开发无法透明问题:数据库协议虽然存在标准,但事实上每个不同的数据库版本都会进行若干变更、扩展和增强,使用了这些特性的用户必须进行改造。同时在安全代理中对数据库通讯协议的模拟非常困难。
4)数据库的优化处理、事务处理、并发处理等特性都无法使用:查询分析、优化处理、事务处理、并发处理工作都需要在安全增强器中完成,无法使用数据库在并发处理和查询优化上的优势,系统的性能和稳定性更多地依赖于安全代理;
5)对于对存储过程、触发器、函数等存储程序的实现支持也非常困难。
另外该技术需要在安全代理服务层提供非常复杂的数据库管理功能,如:SQL命令解析,通讯服务,加密数据索引存储管理、事务管理等等,因此存在巨大的开发工作量及很高的技术复杂度,此外还有类似于存储过程、触发器等无法解决的技术问题。
应用层加密的主要技术原理在于,应用系统通过加密API(JDBC,ODBC,C API等)对敏感数据进行加密,将加密数据存储到数据库的底层文件中;在进行数据检索时,将密文数据取回客户端,再进行解密。另外应用系统将自行管理密钥体系。
这种方案的缺点是,应用程序必须对数据进行加解密,增加编程复杂度,但无法对现有的系统做到透明,应用程序必须进行大规模的改造。从效率角度来看,这种技术方案无法利用数据库的索引机制,加密后数据的检索性能将大幅度下降。
这种技术使用“视图”+“触发器”+“扩展索引”+“外部调用”的方式实现数据加密,同时保证应用完全透明。它的核心思想是充分利用数据库自身提供的应用定制扩展能力,分别使用其触发器扩展能力、索引扩展能力、自定义函数扩展能力以及视图等技术来满足数据存储加密,加密后数据检索,对应用无缝透明等最主要需求。
这种方案的技术原理主要有以下四个方面:
(1)通过视图实现加密数据透明查询处理
数据库的视图可以实现对表内数据的过滤、投影、聚集、关联和函数运算。该方案正是通过数据库的视图原理实现对数据的透明访问;首先对将原有的表进行改名,然后在该表上建立与原表同名的视图;在视图内实现对敏感列的解密函数调用,实现数据的解密。
(2)通过触发器实现数据的加密插入和更新处理
数据库中的触发器可以实现对数据更新动作的特定行为的响应,同时数据库中可以支持针对视图的触发器。这种方案在建立的视图上建立Instead of触发器,通过Instead of触发器实现对明文数据的加密,将加密数据插入到表中。
(3)通过数据库的扩展索引接口实现加密索引
以Oracle数据库为例,在Oracle Data Cartridge的索引扩展机制提供了一套现成的框架,可以自己定义索引并实现Operator,自行编写索引在Create Index、Insert、Delete、Update语句执行、以及Scan Index发生时的相应处理代码。通过该机制,可以使用自定义的扩展加密索引,这样当使用该索引对加密数据进行检索时,可以进行正常的排序及比较,这也就解决了加密后数据检索的难题,大幅度提升了密文检索的效率。
(4)通过外部接口调用实现独立于数据库的权限控制和国产加密算法
在实现透明加密访问和高效索引访问之外,另一重要目的是实现对国产加密算法的调用和独立于数据库的权限控制。实现这一目的的技术关键是外部程序调用和外部通讯支持。在数据库中支持外部程序调用,只要定义好通讯接口即可。那么这种方案可以将加密函数和解密函数做成外部调用,这样不仅可以在外部调用国产加密设备的加密算法,还可以将权限校验过程放在数据库之外完成,确保了对超级用户的权限限制。