数据库加密综述石磊摘要数据库加密是利用现有的数据库和加密技术,来研究如何对数据库中的数据加、解密,从而提高数据库系统的安全。
数据库加密可以在OS、DBMS内层、DBMS外层上实现。
OS层上的数据库加密由于存在太多的问题和缺陷,已经不被人们考虑。
已有的数据库加密产品都是在DBMS外层实现的,这种实现方式虽说做到了数据和密钥的分离,可以有效地抵御外部的非法入侵,但对企业内部的攻击却没有很好的防范措施;另外,这种方式还存在着:使数据和应用程序紧密结合起来、在DBMS之外又增加了其他的数据管理工具、硬盘存储空间浪费大等缺陷。
其实,数据的加密与否只是数据的一个属性,数据的加密存储是数据的一种保存方式,关乎数据的物理存储,这些都是DBMS现有功能的一部分。
另外从数据和应用程序的分离、数据的维护和安全来看,数据库加密都应当在DBMS内实现。
本文就是基于关系DBMS,介绍一种数据库加密的实现方法。
1 引言随着网络应用的不断发展,信息成为社会发展需要的重要战略资源。
围绕信息的获取、使用和控制的竞争愈演愈烈,信息安全成为在激烈竞争中立于不败之地的重要保障。
调查显示,我国互联网安全状况有所好转,但互联网用户的网络安全意识仍比较薄弱,对发生网络安全事件未给予足够重视,联网单位对外部网络攻击防范的意识有所增强,但单位内部的网络安全管理工作还不到位。
数据库作为信息存储中心,其安全问题尤为突出。
一方面,企业为了本身的利益,需要对其敏感信息进行保护而不让外界获取;另一方面,在数据库作为服务DAS(Database As Service)的数据管理模型下,企业需要从数据库服务提供商DSP(Database Service Provider)处获得专业的数据库服务。
这种情况之下,企业的数据存放在数据库服务提供商处,其完全性无法得到有效的保障。
因为如果数据库只使用访问控制来限制数据访问的话,数据库提供商处的数据库管理员(DBA)就可能会有意或无意访问到企业的所有数据,从而给企业造成巨大损失。
对于这种“监守自盗”的行为,只有从DBMS内完成对数据的加密,这样不仅可以有效减少来自于外界的危害,也可以有效防止DBA对数据安全造成的威胁。
我的综述通过叙述数据库的安全现状说明数据库加密技术的重要性,根据数据库数据存储的特点提出数据库加密的要求,详细阐述数据库加密技术的一般原理,并重点介绍基于关系DBMS的一种数据库加密实现方法,最后提出对数据库安全管理前景的展望。
2 数据库的安全现状l、数据库的安全需求面对外部攻击者可能造成的安全威胁,可以将数据库的安全需求归纳为五个方面:数据的完整性、数据的保密性、用户鉴别、访问控制和安全审计。
2、数据库的安全威胁数据库在信息系统中的核心地位是数据库面临着更加严重的安全威胁。
凡是可能造成数据库中存储数据错误(遗漏非授权的修改、删除等)、数据的非法获取、拒绝正常服务等行为都属于对数据库的安全造成了威胁。
数据库的安全威胁主要来自人为恶意攻击、自然灾害、设备故障或管理失误等。
其中对数据库安全威胁最大的是人为恶意攻击。
恶意攻击将造成非法获取数据、非法篡改数据和引发系统的拒绝服务等多种安全威胁。
其攻击手段主要有:(1)非法用户通过窃取被授权用户的用户名、口令及密钥等手段访问其未被授权访问的数据。
( 2 )使用被授予访问权限的帐户来进行未被授权的操作也就是合法用户的越权行为。
( 3 )绕过DBMS直接对数据库文件进行读写。
( 4 )利用病毒、特洛伊木马等破坏性程序,在特定的条件下,攻击者可以绕过系统设置的安全机制进入系统以达到破坏和窃取数据的目的。
( 5 )通过拒绝服务攻击,使服务器过载、崩溃,从而阻止合法用户对数据的正常访问。
( 6 )通过控制通信,例如错误信息的插入、故意的延时或无序传送等手段通过网络进人系统窃取数据并进行破坏性操作。
( 7 )在数据传输信道上采用搭线窃听、电磁接受、传输监控等手段窃取数据。
综合分析数据库系统的漏洞及其面临的安全威胁,我们认为对数据库中敏感数据进行加密处理,不仅是堵塞“隐秘通道”的有效手段,更是确保数据库中的数据内容不被泄漏的最重要的手段。
通过加密,不仅管理员无法知道数据内容,即使数据不幸泄露或丢失,其内容也难以被人破译。
因此,实现数据库中敏感数据的保密是保证数据库安全的重点。
3 数据库加密的功能和特点一般而言,一个行之有效的数据库加密技术主要应有以下几方面的功能和特点:a)身份认证:用户除提供用户名、口令外,还必须按照系统安全要求提供其他相关安全凭证。
系统可以选择使用终端密钥、用户USB Key等来增强身份认证的安全性。
b)通信加密与完整性保护:有关数据库的访问在网络传输中都应被加密,通信的目的地还可以校验通信的完整性;通信一次一密的意义在于防重放、防篡改。
c)数据库数据存储加密与完整性保护:系统采用数据项级存储加密,即数据库中不同的记录、每条记录的不同字段都采用不同的密钥加密,并辅以校验措施,以保证数据库数据存储的保密性和完整性,防止数据的非授权访问和修改。
d)数据库加密设置:系统中可以选择需要加密的数据库列,以便于用户选择那些敏感信息进行加密而不是全部数据都加密。
只对用户的敏感数据加密,可以提高数据库访问速度,有利于用户在效与安全性之间进行自主平衡。
e)多级密钥管理模式:主密钥和主密钥变量保存在安全区域,二级密钥受主密钥变量加密保护;数据加密的密钥存储或传输时利用二级密钥加密保护,使用时受主密钥保护。
f)安全备份:系统提供数据库明文备份功能(为防止灾难发生,系统提供明文形式的数据库内容备份功能,以防止丢失密钥或数据造成灾难性后果)和密钥备份功能(用户可以同时使用DBMS的备份功能和数据库加密系统的密钥备份功能,同时备份密文和密钥,在需要时进行恢复)。
g)通用接口和广泛的平台支持:系统采用开放的体系结构,支持标准SQL 语句。
4 数据库加密的要求由于数据库本身的特点和实际应用需求,对数据库加密一般应具有以下功能:(1)由于数据库数据信息的生命周期一般比较长,无论采取何种加密方法都应能做到实际不可破译的程度;(2)数据信息在加密后,其占用的存储空间不宜明显增大;(3)加密和解密速度都应足够快,尤其对解密的速度要求更高,应使用户尽量感觉不到由于加、解密所产生的延时;(4)加密系统要有尽可能灵活的授权机制;(5)加密系统应同时提供一套安全的、灵活的密钥管理机构;(6)对数据库的加密不应影响系统的原有功能,应保持对数据库操作的灵活性和简便性;(7)加密后的数据库仍能满足用户在不同类别程度上的访问;(8)防止非法拷贝。
5 数据库加密的原理数据加密就是把数据信息即明文转换为不可辨识的形式即密文的过程,目的是使不应了解该数据信息的人不能够知道和识别。
将密文转变为明文的过程(如图所示)就是解密。
加密和解密过程形成加密系统,明文与密文统称为报文。
任何加密系统通常都包括如下4个部分:(1)需要加密的报文,也称为明文P;(2)加密以后形成的报文,也称为密文Y;(3)加密(解密)算法E ( D);(4)用于加密和解密的钥匙,称为密钥K。
加密过程可描述为:在发送端利用加密算法E和加密密钥Ke对明文P进行加密,得到密文Y = E Ke( P )。
密文Y破传送到接收端后应进行解密。
解密过程可描述为:接收端利用解密算法D和解密密钥Kd对密文Y进行解密,将密文恢复为明文P = D Kd ( Y )在密码学中,把设计密码的技术称为密码编码,把破泽密码的技术称为密码分析。
密码编码和密码分析合起来称为密码学。
在加密系统中,算法是相对稳定的。
为了加密数据的安全性,应经常改变密钥。
6 基于关系DBMS 的一种数据库加密实现方法前面已经说到数据库加密的特点和要求,基于以上的考虑,这种方法的设计思路是在DBMS 中引入一个加密子系统,该子系统提供和软、硬件加密模块的接口,完成加密定义、操作、维护以及密钥的管理、使用等各项功能,所有和加密有关的操作都需要在加密子系统中完成。
用户连接到数据库或进入DBMS 交互式处理环境,可以执行原有的各项功能。
但如果要执行和加密有关的操作,就需要通过命令、输入密码进入加密子系统。
需要说明的是:在实现数据库加密后,用户对表中加密属性列的访问,既需要加密子系统中的访问授权,也需要数据库访问控制中的授权。
下面就加密子系统的设置以及其他相关功能的实现及操作分别进行阐述。
6.1为用户设置加密子系统用户能够或被取消访问加密子系统,这需要由系统安全员在D B MS 的交互用户要访问加密子系统,必须先连接到数据库或进入DBMS交互式处理环境。
用户可以使用下列命令进入和退出加密子系统:set encrypt on on using{password}set encrypt off在加密子系统中,用户、系统安全员使用下面的命令更改用户加密子系统密码:set password {new_password} {passwordconfirm}set password {new_password} {passwordconfirm} for user_id6.2加密属性及密钥管理在数据库系统中引入~个新的对象cryptograph,用来指定加密需要的加密算法、密钥、密钥长度等加密属性。
用户根据要求创建自己需要的cryptograph对象,从而在创建表时可以为需要加密的属性列指定一个对象,确定加密时所需要的加密属性。
(1)对象创建。
使用下面的命令创建cryptograph对象:create cryptograph {cryptograph_name} with {algorithm_name} {lemgth} [interval] 参数length、interval指定密钥的长度、密钥有效期信息,对象的密钥由系统自动生成、加密后存储,用户无法直接获取。
创建对象的用户就成为它的所有者,有关对象的所有信息都存放在数据字典中。
(2)对象授权管理。
具有加密子系统访问能力的用户,能够在加密子系统中创建cryptograph对象,该用户就成为新建对象的所有者。
只有对象的所有者才能够修改、删除crytograph对象,才能将对象的使用权限授予其他的用户。
用户只有在获得crypfograph对象的使用权限之后,才能在属性列的定义中使用该对象,才能操作由该对象定义的属性列。
使用下列命令授予、撤消用户对数据库对象crytograph的使用权限:grand use on {cryptograph_name} to {user_id}revoke use on{cryptograph_name} from {user_id}要成功地撤消用户cryptogral幽对象的使用权限,必须保证该用户没有使用该对象定义任何表的属性列。