基于SQL Server的数据库内部加密技术的探讨
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
1 引言
企业信息系统的发展将数据的安全问题提到前所未有的高度。一方面,企业本身需要对自己的关键数据进行有效的保护另一方面,越来越多的企业开始从应用服务提供商一,处获得应用支待和服务,在这种情况下,企业的业务数据存放在处,其安全性无法得到有效的保障。因为传统的数据库保护方式是通过设定口令字和访问权限等方法实现的,这就留下了一个很大的安全漏洞一数据库管理员可以不加限制地访问数据库中的所有数据。解决这一问题的关键是要对数据本身加密,即使数据不幸泄露或丢失,也难以被人破译。[1] 数据库加密系统,其实现的主要功能是对存储在数据库中的数据进行不同级的存储加密。这样就有效的保护了存储在数据库中的重要数据,即使某一用户非法入侵到系统中或盗得了数据库文件,没有解密密钥,他也不能得到所需数据。所以数据库的加密处理对保护数据的安全性具有非常重要的意义。 2 SQL Server的常见安全问题 SQL Server 2005已经被众多信息系统采用,但在安全方面还是存在一些技术或者是管理上的问题。 1)空口令或弱口令:初学者在安装SQL Server时为了省事,SQL Server管理员sa 用的是空口令或弱口令,这样危险性十分巨大,而这些危险往往是初学者意识不到的,小王就觉得,自己的库是试验数据,没什么用,即使别人连上库也无所谓。殊不知SQL Server的默认用户sa的权限非常巨大,有种观点是sa的权限要大于administrator的权限,也就是说没有限制的sa用户可以做Windows系统管理员所做的任何事。 2)注入和跨库攻击:注入和跨库攻击可能是这几年黑客攻击中最流行的词了,它的原理和上面讲的都是获得了SQL Server管理员sa的权限,从而控制数据库,还可以利用xp_cmdshell这样的SQL Server的扩展存储过程控制Windows系统。注入和空口令获取sa权限的方法不同,注入是ASP程序在连接SQL Server时有漏洞,黑客利用漏洞获取了sa权限。 3)SQL Server不打补丁的漏洞:没打补丁的SQL Server存在着众多的漏洞,无论你的权限设置的多么严格都能被轻易攻破。 3 数据库加密技术介绍 3.1 加密层次 数据库加密大致可以分为两种方式外部加密和内部加密。数据库的外部加密,一般选择在应用程序和操作系统,通过调用加解密函数来完成加密数据的存储和访问。外部加密的优点是,不需要修改,只需要在应用程序或者操作系统中增加相应的加解密模块即可。但是,这种方法也有一些缺点,首先它不能支持各种加密粒度。其次,它仅仅对用户数据进行加密而不能对元数据索引数据日志等进行加密再者,数据的完整性检查需要应用程序来完成,因为数据加密后,没有办法在DBMS中进行完整性检查,而需要在应用程序中增加这项功能,实现起来非常麻烦。在操作系统中加密时,加密的粒度是基于文件,对应到数据库中则是相应的表或者整个数据库,这种加密粒度非常粗糙,最直接的影响是,加解密的工作相当大,极大地降低系统性能。 在数据库内部加密一般选择在数据物理存取之前进行加解密操作也就是说,DBMS在将内存中的数据写到如磁盘时,进行加密操作,而从磁盘读取数据到内存中时,进行相应的解密操作。这种方法的优点是,由于DBMS能够区分各种粒度的数据,所以可以支持各种粒度的加密,加密的灵活性较好。另外,在DBMS内部实现加密,可以更有效地和DBMS内部的访问控制机制、授权机制等各种功能结合起来。更重要的是,数据库一个重要特点是被多个应用共享,这种方法的加解密都是在DBMS内部完成,对应用程序是透明的,不需要在多个应用中进行修改,容易保持数据的一致性。缺点是需要修改DBMS的内核,DBMS是一个非常复杂的软件,对它进行修改是一件非常艰巨任务。 3.2 加密粒度 按照数据库的结构层次,数据库的加密粒度可以分为数据库级、表级、记录级、字段级和数据项级。根据不同的应用需要,选择合适的加密粒度。[2] 字段加密的对象是关系中的某个字段,字段级加密是一个很好的选择,因为在实际生活中,一些重要和敏感的信息往往出现在关系中的某些列,如信用卡号、身份证号、银行账号等,只需要对这些重要数据进行加密保护,而没有必要对普通数据也进行加密。例如,有一个客户表,它包含客户、姓名、地址和信用卡号。在这个表中,没有必要去加密客户,我们最想加密的字段是信用卡号。在实现字段级加密时,可以采取多种方式,既可以在DBMS外部完成,也可以在DBMS内部完成。 3.3 加密算法 加密算法是数据加密的核心,加密算法本身的好坏直接影响数据库加密的安全和性能。一个好的加密算法产生的密文应该频率平衡,随机无重码规律,周期很长而又不可能产生重复现象。攻击者很难通过对密文频率、重码等特征的分析获得成功。通常来说,加密算法有对称算法和非对称算法。对称算法有时又叫传统密码算法,就是加密密钥能够从解密密钥推算出来,反过来也成立。在大多数对称算法中,加密密钥和解密密钥是相同的。[3] 在对数据库存储数据进行加密时对称加密算法使用最为广泛这是因为,与非对称加密算法相比,对称加密算法的速度快了几十甚至几百倍,对系统的性能影响较小。对称算法又可分为两类序列密码和分组密码。目前数据库加密常用的算法有:AES、DES、3DES、RC5等。 4 数据库加密系统设计 4.1 设计目标 根据实际项目需求和前面章节的的理论研究先提出基于扩展存储过程的数据库加密系统”设计目标如下: 1)利用数据库加密技术,对数据库中存储的“敏感”数据实现字段级加密;2)实现对数据的存储加密和密文检索等操作;3)保证加解密处理过程中的数据完整性;4)屏蔽密文数据对应用程序的开发影响,开发人员通过加密系统能实现对密文数据的“透明访问”。 4.2 系统工作模型 数据库加密系统由SQL解析模块、数据库对象、加解密动态链接库和加密系统管理程序组成。系统的工作工程如下: 1)加密系统中的“SQL分析模块”对提交的SQL语句进行语法分析和扩展,根据DBMS中的“加密字典”对SQL语句进行“解析扩展”;2)加密系统将重组后的SQL语句提交给DBMS,DBMS通过“数据库对象”调用“加解密动态库”对数据库中的密文数据进行解密,并将解密后结果反馈给“数据库对象”;3)应用程序通过“数据库对象”获取解密后的明文数据。 4.3 开发平台 本系统运行在数据库服务器上,其开发平台及工具如下所示: 1)操作系统:Windows Server 2003;2)数据库:Microsoft SQL Server 2005;3)设计工具:Microsoft Visio 2005;4)开发平台:JDK 6.0,MyEclipse 6.5。 4.4 关键技术及实现 本文实现的加密系统是通过SQL解析模块与应用程序相接,从而实现了应用程序对DBMS中密文数据的“透明访问”,所以SQL解析模块也是整个加密系统设计中的关键所在。由于T-SQL语句的语法结构比较复杂,所以SQL语句解析模块的设计也是整个加密系统中的一个难点问题。通过对语法结构进行裁减语法描述参见后,设计实现了语句解析模块。模块由“数据初始化方法”和4个核心方法“SELECT子句解析方法”、“INSERT子句解析方法”、“DELETE子句解析方法”和“UPDATE子句解析方法”所组成。 由于3DES也是基于DES的分组加密算法,其加密时也是按位二进制位对明文进行分组,所以当明文的长度不是8Bytes的整数倍时,就需要对明文进行字节对齐使得明文的长度为8Bytes的整数倍这样字节对齐后带的问题是解密后,需要还原在加密前进行了字节对齐操作的明文。 为了解决上述分组加密算法带来的问题,加密DES模块在设计中,采用ASCII码为0x00的字符,对齐不是8Bytes整数倍的明文,当解密还原为二进制的字符串后,由于其解密后的字符串也是用0x00填充,所以无需做特殊处理,直接进行类型转换即可保证数据在加、解密前后的一致性。 5 总结 分析了目前信息安全领域中,数据库安全所存在的问题,深入研究了数据库加密系统的相关理论,以数据库的内部字段级加密为基础,设计并实现了数据库的加密系统。该加密系统在基于B/S系统中的运行情况表明,系统不仅满足了数据保密性要求,在系统性能方面也得到了很好的保证。 该文章在 2010/9/30 1:42:45 编辑过 |
关键字查询
相关文章
正在查询... |