一种支持密文索引的数据库透明加密方法

文档序号:6484152阅读:247来源:国知局
专利名称:一种支持密文索引的数据库透明加密方法
技术领域
本发明属于信息安全技术领域,涉及一种对数据库中的字段进行透明加密, 并实现高效条件查询的方法。
背景技术
在信息系统中,数据库应用十分广泛。数据库系统作为信息的聚集体,存 储着系统中最有价值信息的数据,是计算机信息系统的核心部件,其安全性至 关重要,因而越来越多的基于数据库的信息系统希望对敏感数据进行加密以保 障其安全性。目前,国内现有的数据库系统绝大多数由国外进口,由于技术出 口法律的限制,支持密文查询的安全数据库系统却不对中国出口。因此,针对 现有的数据库系统,亟需开发一种支持密文査询的数据库加密技术。
当对数据库进行加密之后,数据之间原有的偏序关系将会丧失,因而无法 通过原来的索引机制来加快对密文数据的条件查询,这极大的影响了数据库的 使用效用。为了解决这一问题,现在一般采用同态加密和密文索引的方法。该 方法是密文和明文保持相同的偏序关系,从而实现条件查询。但这种加密方法 强度较弱,容易被破解,而且由于索引文件不是数据库的一部分,数据库管理 系统无法对其实现事务管理,难以保证数据库与索引文件之间的一致性。
专利200510130卯7.0中公开了一种利用辅助数据结构实现了数据库的快速 密文查询方法,该方法需要在数据库前面部署中间件系统,以捕获SQL语句, 并需要自己维护索引数据,在实现过程中存在很大难度。

发明内容
本发明的目的是为解决不支持字段加密的商业数据库系统的加密保护文 杰,提出一种支持密文索引的数据库透明加密方法,能够对敏感字段选用多种 加密算法进行加密,在数据库系统内部建立高效的密文索引,实现对加密字段 的条件查询。
本发明是采用下述技术方案实现的。
一种支持密文索引的数据库透明加密方法,基于数据库系统的视图和触发器机制实现。其中,视图是一个虚拟表,它在向请求者返回数据之前填充数据; 触发器是一个嵌入到数据库中的程序,在满足触发条件时自动执行。通过使用 视图和触发器为用户透明的提供自动加密和解密。在查询数据时,在填充视图 的过程中解密数据。当新数据插入到表中或者修改数据时,利用触发器进行数 据的加密和密文索引的维护。
为实现透明数据加密,对原表进行改造。改造过程包括表改名、约束禁用、 索引删除、视图和触发器创建等过程。具体步骤如下
(1) 原始表改名,并在改名后的原始表上添加RAW类型密文字段 由于数据加密后,数据类型发生变化,原始字段己经不能用来存放密文,
所以必须新增RAW类型的字段保存加密后的密文。
(2) 禁用约束
由于数据加密后,原始约束条件失效,而且为了保护数据的安全,原始字 段内容已被清空。因此,必须删除建立在敏感字段上的约束。拥有主键和外键 约束的字段不能被选取作为加密字段,因此对于敏感字段上的唯一性约束、非 空约束和值约束,均需要被禁用。
(3) 删除索引
由于数据转换为密文后,索引将失效,因此,如果敏感字段本身有索引, 必须将其删除。
(4) 加密敏感数据
如果原表中有记录,调用加密算法将敏感数据进行加密,并将密文保存到 相应的新增密文字段中,同时清空原始字段的数据内容。如果该字段需要实现 密文索引,则建立密文索引,然后进行步骤(5);若不需要实现密文索引,则 直接进行步骤(5)。
实现密文索引的方法为基于数据库的表和SQL语言,建立辅助的实现密 文索引数据结构以及査询和维护算法。利用数据库系统的索引扩展机制,实现 密文索引的调用和维护。
在密文索引机制中应包括 一个对原表记录ID的索引,用于根据该ID实
现快速解密得到明文; 一个根据明文实际取值的偏序保持算法,用于实现快速 的范围査询。其中,实现密文偏序关系的索引结构采用具有索引功能的数据结 构,例如AVL树、B+树或B-树等。数据库系统的索引扩展机制为公知的扩展索引,如Omde的扩展索引,或 者IBM的扩展索引。这些扩展索引机制,允许用户为特定的字段自定义索引方 法。
由于密文索引以表的形式存储于数据库中,且由触发器自动维护,从而自 动实现了多用户的数据同步和事务机的提交和回滚机制。
(5) 创建视图
创建一个与原表同名的视图,该视图取原表的所有字段,其中,敏感字段 用解密函数代替。
(6) 创建触发器和存储过程
在视图上建立instead of类型的插入、删除和修改事件的触发器。在触发器 中,调用加密算法将敏感数据加密,并把密文保存在表中的密文字段中。如果 原表有约束,为了保持数据完整性,则使用SQL语言实现约束;
(7) 实现扩展索引接口。
对原表进行上述改造之后,表中的数据分为敏感数据和非敏感数据两类。 其中,敏感数据以密文的形式存放在表中,而非敏感数据则以明文的形式存放。 由于视图名与原始表名相同,用户对表的操作都会作用在视图上。当用户查询 数据时,视图能够自动调用解密函数将密文数据解密,并将明文数据返回给用 户;当用户修改数据时,用户在视图上的操作都能够由instead of触发器完成。 从而实现了对敏感数据的透明加密和解密。
有益效果
本发明提供的方法对比已有技术,具有如下优势-
1、 加解密过程完全透明。基于视图和触发器实现敏感数据的自动解密和加 密,加密和解密过程对于基于数据库的应用程序来说是完全透明的。这种特性 可以使得应用程序在开发阶段不用考虑数据库加密的问题,在系统发布之后再 进行数据库的透明加密改造而不用重新编译应用程序。
2、 高效密文索引。实现高效的密文索引数据结构及算法,从而可以高效的 实现对密文字段的条件查询。
3、 事务支持。由于加密机制和密文索引机制都是在数据库内部通过触发器 实现的,从而透明的支持事务的提交和回滚机制,并且在多个用户之间自动的 实现了数据同步。


图1是本发明实施例的用于密文索引的AVL树的结构示意图2是本发明实施例的AVL树的信息表;
图3是本发明实施例的AVL树的节点信息表。
具体实施例方式
下面结合附图和实施例对本发明方法做详细说明。
下面详细描述中以实例的方式给出了许多具体细节,以确保对本发明实例 的透彻理解。但是,对于知道本领域基本常识的人,能够理解没有这些具体细 节,本发明的实施例也能实现。另外,没有详细描述众所周知的方法、过程、 部件和电路,以避免本发明的实现变得不清楚。
实施例
假设存在表T,其包含字段{FiJ^...^...^^需要对表T的中的字段R 进行透明加密。Fi的数据类型为R,该字段具有索引I以及约束C,需要实现密 文索引。
步骤一、对原表T进行改造,具体步骤如下
(1) 将表T重命名为Tp其包含字段为{F1,F2,...,Fi,...,Fn, Fn+1}。其中, Fn+1用于存储字段Fi的密文信息,类型为RAW;
(2) 删除Fi上的约束C;
(3) 删除Fi上的索引I;
(4) 调用加密算法,将Ti中的Fi进行加密变换,并将密文存放到Fn+1中, 并将Fi的值置为NULL;为密文字段Fw建立索引数据结构,并将现有的密文 插入到该结构中。
索引的数据结构和算法采用平衡二叉树。平衡二叉树又叫AVL树,其特征 为它的左子树和右子树都是平衡二叉树,且左右子树的深度之差的绝对值不 超过l。其结构如图l所示。该树的数据结构用表实现,而不是使用高级编程语 言的数据结构实现。查找和维护算法由SQL语言实现,而不是使用高级程序设 计语言实现。在图1中,每个节点上存储的数据是加密存储的,不会泄露明文 的内容以及偏序关系。
6信息表这两个辅助表以实现图1所示的AVL数据 结构。
树信息表如图2所示,用于存储针对每棵AVL树的信息。该表可被多个敏 感字段公用,每个AVL树为该表的一条记录。每个AVL树的信息包括 F正LD—NAME:敏感字段名,用于记录原表中的敏感字段; ROOT_ID:索引树的根结点在原表中的记录ID,被加密后存储; FIRST一ID:叶子第一个节点在原表中的记录ID,用于实现遍历,被加密后 存储;
HEIGHT:树的高度。
节点信息表如图3所示。AVL树中的每个节点包括信息 DATA:节点的键值,即敏感字段的密文; LID:左侧孩子节点在原表中的记录ID,被加密后存储; RID:右侧孩子节点在原表中的记录ID,被加密后存储; RECORD—ID:节点在原表中的记录ID,用于实现基于原表的记录ID进行 快速数据检索;
BL:当前节点平衡因子。 基于该AVL树的査询过程为
如果使用原表记录ID作为査询条件,则直接在节点信息表中以字段 RECORD—ID为条件进行査找;
如果使用字段的值作为查询条件,则根据检索的条件分别处理,具体如下-
1) 当查找条件为"F尸KEY":根据键值的大小,按照平衡二叉树的査找方 法,找到符合条件的节点并返回该节点的RECORD—ID;
2) 当查找条件为"F戶KEY":根据键值的大小,按照平衡二叉树的查找方 法找到比当前值大的最小值节点,然后遍历返回比键值大的所有节点 的RECORD JD;
3) 当查找条件为"F^-KEY":根据键值的大小,按照平衡二叉树的査找 方法找到比当前值小的最大值节点,然后遍历返回比键值大或者相等 的所有节点的RECORD_ID;
4) 当查找条件为"F-KEY":根据键值的大小,按照平衡二叉树的查找方 法找到比当前值小的最大值节点,然后遍历返回比键值小的所有节点的RECORD_ID;
5) 当查找条件为"F^-KEY":根据键值的大小,按照平衡二叉树的查找 方法找到比当前值大的最小值节点,然后遍历返回比键值小或者相等 的所有节点的RECORD—ID;
6) 当查找条件为"KEYKF^KEY2":找到比KEY1大的最小值,比KEY2 小的最大值节点。遍历返回所有满足条件的节点的RECORD—ID;
7) 当查找条件为"KEY1《Fi <=KEY2":找到比KEY1小的最大值,比 KEY2大的最小值节点。遍历返回所有满足条件的节点的 RECORD—ID;
8) 当査找条件为"KEYK Fi<= KEY2":找到比KEY1大的最小值,比 KEY2大的最小值节点。遍历返回所有满足条件的节点的 RECORD—ID;
9) 当查找条件为"KEYK^ Fi< KEY2":找到比KEY1小的最大值,比 KEY2小的最大值节点。遍历返回所有满足条件的节点的 RECORD—ID;
由于节点的键值是加密存储的,所以在以上的查找过程中,在每个节点上 需要先进行解密,再进行键值的比较。 基于该AVL树的索引维护过程为
Insert:按照"="的条件查询到需要插入节点在AVL树中的位置,然后在节 点信息表中插入一条记录。由于AVL树要求树的平衡性,因此需要根据需要对 树进行旋转和修改该节点的平衡因子,以及树的高度信息。
Delete:按照"="的条件找到表中的节点进行删除,并且根据需要对树进行 旋转以保证树的平衡性。以及更新树的高度信息。
Update:先删除旧节点后插入新节点。
(5) 基于表T,建立名为T的视图,包含的字段为 (F!,F2,…,Fi.!,decrypt(Fnw),Fw,…,F^。其中decrypt(F^)为使用密文字段Fn+1作为 参数的解密函数,返回其对应的明文值;
(6) 创建instead of类型的insert、 delete和update触发器。在触发器中实现 数据操作时对明文的加密、密文索引的维护。并实现原有的约束C;
(7) 实现扩展索引接口,在检索过程中实现对Fw字段的条件查询。
权利要求
1、一种支持密文索引的数据库透明加密方法,其特征在于包括以下步骤(1)原始表改名,并在改名后的原始表上添加RAW类型密文字段;(2)禁用约束;拥有主键和外键约束的字段不能被选取作为加密字段,敏感字段上的唯一性约束、非空约束和值约束,均需要被禁用;(3)若敏感字段本身有索引,将其删除;(4)加密敏感数据;如果原表中有记录,调用加密算法将敏感数据进行加密,并将密文保存到相应的新增密文字段中,同时清空原始字段的数据内容,如果该字段需要实现密文索引,则建立密文索引,然后进行步骤(5);若不需要实现密文索引,则直接进行步骤(5);(5)创建视图;创建一个与原表同名的视图,该视图取原表的所有字段,其中,敏感字段用解密函数代替;(6)创建触发器和存储过程;在视图上建立instead of类型的插入、删除和修改事件的触发器,在触发器中,调用加密算法将敏感数据加密,并把密文保存在表中的密文字段中;如果原表有约束,使用SQL语言实现约束;(7)实现扩展索引接口。
2、 如权利要求l所述的一种支持密文索引的数据库透明加密方法,其特征在于在步骤(4)中,实现密文索引的方法为基于数据库的表和SQL语言,建立辅助的实现密文索引数据结构以及查询和维护算法,利用数据库系统的索引扩展机制,实现密文索引的调用和维护;在密文索引机制中应包括 一个对原表记录ID的索引,用于根据该ID实现快速解密得到明文; 一个根据明文实际取值的偏序保持算法,用于实现快速的范围查询,其中,实现密文偏序关系的索引结构采用具有索引功能的数据结构。
全文摘要
本发明属于信息安全技术领域,涉及一种支持密文索引的数据库透明加密方法。本发明方法基于数据库系统的视图和触发器机制实现,通过使用视图和触发器为用户透明的提供自动加密和解密。在查询数据时,在填充视图的过程中解密数据。当新数据插入到表中或者修改数据时,利用触发器进行数据的加密和密文索引的维护。其中,实现密文索引的方法为基于数据库的表和SQL语言,建立辅助的实现密文索引数据结构以及查询和维护算法;利用数据库系统的索引扩展机制,实现密文索引的调用和维护。该方法对于基于数据库的应用系统是完全透明的,部署基于本发明的数据库安全增强系统以后,不需要对现有的应用系统做改变,且能够保证较高的密文检索的效率。
文档编号G06F17/30GK101504668SQ20091008085
公开日2009年8月12日 申请日期2009年3月24日 优先权日2009年3月24日
发明者代六玲, 张晗立, 奇 李, 顶 杜, 涛 梁, 汤继良, 胡金武, 陈合春 申请人:北京理工大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1