一种数据库加密的实现方法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一种数据库加密的实现方案

徐胜超计算机学院 2003612100007

摘要:采用加密技术是现代社会保护敏感信息的一种较为有效和经济的手段. 在数据库中对数据进行加密保护其加密机制主要涉及加密算法、加密粒度、密钥生成和管理、查询操作的实施以及对系统性能的影响等五个方面问题,本文提出了一种数据库的加密方案,并结合该方案主要分析了这些问题。

关键词:数据库加密,加密算法,加密粒度,密钥

一般而言,数据库系统通过使用身份认证、访问控制、隐通道、审计等基本安全技术能够满足一般的数据库应用,但对于一些重要部门特别是军事部门,仅靠上述这些措施是难以完全保证数据的安全性。因此,有必要对数据库中存储的重要数据进行加密处理,以实现数据存储的安全保护。在数据库中对数据进行加密保护其加密机制主要涉及加密算法、加密粒度、密钥生成和管理、查询操作的实施以及对系统性能的影响等。

1.一种新的数据库系统加密方案

目前的数据库加密策略多为基于DBMS的加密,也就是将数据的加解密、密钥管理及安全认证都交由DBMS来执行。这种加密策略的优点是:由于所有的加解密及密钥管理工作都在后台进行,因此不会对前台的应用程序产生影响;目前很多大型的数据库产品都提供了数据加密功能。但是这种加密策略有一个最大的弱点:由于加密数据与加密密钥信息同时放在数据库中,因此对加密密钥的管理带来了极大的困难。对于攻击者来说,在通过数据库的账号和口令得到数据库中的加密数据信息的情况下,就有可能同时得到加密密钥信息,由于加密算法的保密性比较差,这样就极有可能导致系统数据的严重外泄。如果可以将加密密钥信息与加密数据信息分离,这样即使攻击者通过数据库的账号和口令得到了加密数据,但由于无法得到加密密钥信息,也就很难对系统数据造成真正的威胁。

基于以上考虑,可以对上述基于的加密策略进行DBMS改造。将数据的加解密、加密密钥的管理及相关的认证工作都放在DBMS以外执行,DBMS只负责加密数据的存储管理。以数据库三层体系结构为例,我们可以在应用程序服务器与数据库服务器之间增加一层:中心加密服务器。中心加密服务器完成系统所有的数据加解密、密钥管理及相关的认证工作。加密服务器完成数据的加密后,将加密数据信息送至数据库服务器。需进行解密时,数据库服务器将加密数据信息送至加密服务器进行解密。因此,在数据库服务器与加密服务器之间传输的是加密数据。这种数据库加密系统的体系结构图如图1-1所示。在上述数据库加密体系结构中,用户访问数据库的流程如下:

(1)客户端向应用服务器发出数据访问请求;

(2)应用服务器响应客户端的请求,要求用户输入访问数据库所需的用户密钥,进行客户

与加密服务器之间的身份认证;

(3)认证通过后,应用服务器将数据访问请求发送到加密服务器,加密服务器根据用户及数据访问请求,提取相应的数据库加密密钥并进行校验,如果校验未通过,则退出;如果校验通过,则从数据库服务器中提取密文进行解密;

(4)加密服务器将解密后的数据通过加密信道传输给应用服务器;

(5) 应用服务器将结果发送到客户端。

2.密码算法的选择

密码算法在早期有序列算法,移位算法等。按密码算法所用的加密解密密钥是否相同,

可分为对称密钥体制又称单密钥(加密解密密钥相同) 和公开密钥体制又称双密钥(加密解密密钥不同) 。如DES就是一种对称密钥算法,而RSA一种公开密钥算法。

图1-1本文加密方案的体系结构

选择合适的加密算法也是很重要的。加密强度应能满足系统安全需要,但要考虑加密结果是否符合数据约束条件,其存储会不会造成额外负担;对加密速度的要求则是不应该对系统性能产生明显影响,响应时间越短越好。同时,对应用系统的用户来说,数据库加解密过程应该是透明的,不能影响合法用户的正常操作。数据库加密要求加密效率要尽可能的高,而以RSA 算法为代表的公开密钥加密算法虽然加密强度较高,但算法复杂,效率较低,不能满足要求;相反以DES 算法为代表的对称密钥加密算法则是简单高效,适合进行数据库加密。

子密钥数据库加密算法是一种类似于DES的分组加密算法。本系统就使用这种算法来加密/解密。该算法的核心思路是根据数据库(特别是关系型数据库) 中数据组织的特点,在加密时以记录为单位进行加密操作,而在查询需要解密时, 则是以数据项为单位进行解密操作。两者所用的密钥是不同的, 加密所用的密钥是针对整个记录的密钥;而解密所用的密钥是针对该数据项的子密钥。关于子密钥的算法有很多这样的文章,比如文献[1],具体的算法所用的数据公式就不在这里叙述了。

3.加密粒度怎么样定义的

数据库系统的加密粒度可以分别选用以文件、记录、字段作为加密基本单位的方案。加密单位越小,适用范围越广, 但实现难度就越大。根据应用时具体要求的不同, 实现时应采用不同的方法。

把数据库文件作为整体, 用加密密钥和加密算法对整个数据库文件加密, 形成密文来保证数据的真实性和完整性。利用这种方法, 数据的共享是通过用户用解密密钥对整个数据库文件进行解密来实现的,但多方面的缺点极大地限制了这一方法的实际应用: 首先, 数据修改的工作将变得十分困难, 需要进行解密、修改、复制和加密四个操作, 极大地增加了系统的时空开销; 其次, 即使用户只是需要查看某一条记录, 也必须将整个数据库文件解密, 这样无法实现对文件中不需要让用户知道的信息的控制。因此, 这种方法只适用于能回避这些限制的应用环境。

一般而言, 数据库系统中每条记录所包含的信息具有一定的封闭性, 即从某种程度上

说它独立完整地存储了一个实体的数据。因此,基于记录的加密技术是最常用的数据库信息加密手段。这种方法的基本思路是: 在各自密钥的作用下, 将数据库的每一个记录加密成密文并存放于数据库文件中; 记录的查找是通过将需查找的值加密成密码文后进行的。然而基于记录的数据库保护有一个缺点, 就是在解密一个记录的数据时, 无法实现对在这个记录中不需要的字段不解密; 在选择某个字段的某些记录时, 如果不对含有这个字段的所有记录进行解密就无法进行选择。

基于字段的数据库加密, 就是以不同记录的不同字段为基本加密单元进行加密。该方法可以对数据库中单个数据元素进行加密。其优点在于具有最小的加密粒度, 具有更好的灵活性和适应性。其缺点是: 加解密效率低; 若用数据库密钥对单个数据元素重复加密, 对于密文搜索攻击是脆弱的; 若各字段的数据元素分别用不同的密钥加密, 则密钥个数=记录个数×字段个数,其量是非常惊人的, 实际上根本无法管理。

本方案中的加密粒度的定义是结合了记录和字段两种方式的优点,加密是对记录,解密是对字段。所以在子密钥加密算法中,数据库的更新、修改、增加和删除可以较方便地完成。

4.密钥的管理

密钥的管理是一个非常重要的问题,采用在数据库中建立系统表的方法来管理各类

密钥。我在数据库中建立下面一些表:

1) 数据类表(Data_class)

Dc_No; 数据类编号

Dc_describe; 数据类描述

Dc_para; 加密质数

2) 属性信息表(Sys_col)

Col_name; 属性名称

Col_Tname; 该属性所属的表

Col_type; 属性类型

Col_len ; 属性长度

Col_DC; 属性所属的数据类

3) 用户类表(User_class)

Uc_no; 用户类编号

UC_describe; 用户类描述

Uc_PWD; 用户类密钥(系统私钥加密)

4)用户表(Users)

User_ID ; 用户标识符

User_Describe ; 用户描述

User_Belong ; 用户所属用户类

User_Public ; 用户的公钥

5)用户类权限表(UC_rights)

UC_No ; 用户类编号

DC_No ; 数据类编号

Rights ; 用户类权限

有了上述各表, 就可以很好的管理密钥了,我们把访问密文数据库中数据都转化为表的操作了。

5.如何解决加密/脱密的时间开销与数据库查询效率之间的矛盾。

相关文档
最新文档