您现在的位置:首页>>安全学院>>专利技术
安全学院

(中安威士免费公开)CN200910080857-一种支持密文索引的数据库透明加密方法

说明书

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

  技术领域

  本发明属于信息安全技术领域,涉及一种对数据库中的字段进行透明加密,并实现高效条件查询的方法。

  

背景技术

  在信息系统中,数据库应用十分广泛。数据库系统作为信息的聚集体,存储着系统中最有价值信息的数据,是计算机信息系统的核心部件,其安全性至关重要,因而越来越多的基于数据库的信息系统希望对敏感数据进行加密以保障其安全性。目前,国内现有的数据库系统绝大多数由国外进口,由于技术出口法律的限制,支持密文查询的安全数据库系统却不对中国出口。因此,针对现有的数据库系统,亟需开发一种支持密文查询的数据库加密技术。

  当对数据库进行加密之后,数据之间原有的偏序关系将会丧失,因而无法通过原来的索引机制来加快对密文数据的条件查询,这极大的影响了数据库的使用效用。为了解决这一问题,现在一般采用同态加密和密文索引的方法。该方法是密文和明文保持相同的偏序关系,从而实现条件查询。但这种加密方法强度较弱,容易被破解,而且由于索引文件不是数据库的一部分,数据库管理系统无法对其实现事务管理,难以保证数据库与索引文件之间的一致性。

  专利200510130907.0中公开了一种利用辅助数据结构实现了数据库的快速密文查询方法,该方法需要在数据库前面部署中间件系统,以捕获SQL语句,并需要自己维护索引数据,在实现过程中存在很大难度。

  

发明内容

  本发明的目的是为解决不支持字段加密的商业数据库系统的加密保护文杰,提出一种支持密文索引的数据库透明加密方法,能够对敏感字段选用多种加密算法进行加密,在数据库系统内部建立高效的密文索引,实现对加密字段的条件查询。

  本发明是采用下述技术方案实现的。

  一种支持密文索引的数据库透明加密方法,基于数据库系统的视图和触发器机制实现。其中,视图是一个虚拟表,它在向请求者返回数据之前填充数据;触发器是一个嵌入到数据库中的程序,在满足触发条件时自动执行。通过使用视图和触发器为用户透明的提供自动加密和解密。在查询数据时,在填充视图的过程中解密数据。当新数据插入到表中或者修改数据时,利用触发器进行数据的加密和密文索引的维护。

  为实现透明数据加密,对原表进行改造。改造过程包括表改名、约束禁用、索引删除、视图和触发器创建等过程。具体步骤如下:

  (1)原始表改名,并在改名后的原始表上添加RAW类型密文字段

  由于数据加密后,数据类型发生变化,原始字段已经不能用来存放密文,所以必须新增RAW类型的字段保存加密后的密文。

  (2)禁用约束

  由于数据加密后,原始约束条件失效,而且为了保护数据的安全,原始字段内容已被清空。因此,必须删除建立在敏感字段上的约束。拥有主键和外键约束的字段不能被选取作为加密字段,因此对于敏感字段上的唯一性约束、非空约束和值约束,均需要被禁用。

  (3)删除索引

  由于数据转换为密文后,索引将失效,因此,如果敏感字段本身有索引,必须将其删除。

  (4)加密敏感数据

  如果原表中有记录,调用加密算法将敏感数据进行加密,并将密文保存到相应的新增密文字段中,同时清空原始字段的数据内容。如果该字段需要实现密文索引,则建立密文索引,然后进行步骤(5);若不需要实现密文索引,则直接进行步骤(5)。

  实现密文索引的方法为:基于数据库的表和SQL语言,建立辅助的实现密文索引数据结构以及查询和维护算法。利用数据库系统的索引扩展机制,实现密文索引的调用和维护。

  在密文索引机制中应包括:一个对原表记录ID的索引,用于根据该ID实现快速解密得到明文;一个根据明文实际取值的偏序保持算法,用于实现快速的范围查询。其中,实现密文偏序关系的索引结构采用具有索引功能的数据结构,例如AVL树、B+树或B-树等。

  数据库系统的索引扩展机制为公知的扩展索引,如Oracle的扩展索引,或者IBM的扩展索引。这些扩展索引机制,允许用户为特定的字段自定义索引方法。

  由于密文索引以表的形式存储于数据库中,且由触发器自动维护,从而自动实现了多用户的数据同步和事务机的提交和回滚机制。

  (5)创建视图

  创建一个与原表同名的视图,该视图取原表的所有字段,其中,敏感字段用解密函数代替。

  (6)创建触发器和存储过程

  在视图上建立instead of类型的插入、删除和修改事件的触发器。在触发器中,调用加密算法将敏感数据加密,并把密文保存在表中的密文字段中。如果原表有约束,为了保持数据完整性,则使用SQL语言实现约束;

  (7)实现扩展索引接口。

  对原表进行上述改造之后,表中的数据分为敏感数据和非敏感数据两类。其中,敏感数据以密文的形式存放在表中,而非敏感数据则以明文的形式存放。由于视图名与原始表名相同,用户对表的操作都会作用在视图上。当用户查询数据时,视图能够自动调用解密函数将密文数据解密,并将明文数据返回给用户;当用户修改数据时,用户在视图上的操作都能够由instead of触发器完成。从而实现了对敏感数据的透明加密和解密。

  有益效果

  本发明提供的方法对比已有技术,具有如下优势:

  1、加解密过程完全透明。基于视图和触发器实现敏感数据的自动解密和加密,加密和解密过程对于基于数据库的应用程序来说是完全透明的。这种特性可以使得应用程序在开发阶段不用考虑数据库加密的问题,在系统发布之后再进行数据库的透明加密改造而不用重新编译应用程序。

  2、高效密文索引。实现高效的密文索引数据结构及算法,从而可以高效的实现对密文字段的条件查询。

  3、事务支持。由于加密机制和密文索引机制都是在数据库内部通过触发器实现的,从而透明的支持事务的提交和回滚机制,并且在多个用户之间自动的实现了数据同步。

    

具体实施方式

  下面结合附图和实施例对本发明方法做详细说明。

  下面详细描述中以实例的方式给出了许多具体细节,以确保对本发明实例的透彻理解。但是,对于知道本领域基本常识的人,能够理解没有这些具体细节,本发明的实施例也能实现。另外,没有详细描述众所周知的方法、过程、部件和电路,以避免本发明的实现变得不清楚。

  实施例

  假设存在表T,其包含字段:{F1,F2,…,Fi,…,Fn}。需要对表T的中的字段Fi进行透明加密。Fi的数据类型为R,该字段具有索引I以及约束C,需要实现密文索引。

  步骤一、对原表T进行改造,具体步骤如下:

  (1)将表T重命名为T1,其包含字段为:{F1,F2,…,Fi,…,Fn,Fn+1}。其中,Fn+1用于存储字段Fi的密文信息,类型为RAW;

  (2)删除Fi上的约束C;

  (3)删除Fi上的索引I;

  (4)调用加密算法,将T1中的Fi进行加密变换,并将密文存放到Fn+1中,并将Fi的值置为NULL;为密文字段Fn+1建立索引数据结构,并将现有的密文插入到该结构中。

  索引的数据结构和算法采用平衡二叉树。平衡二叉树又叫AVL树,其特征为:它的左子树和右子树都是平衡二叉树,且左右子树的深度之差的绝对值不超过1。其结构如图1所示。该树的数据结构用表实现,而不是使用高级编程语言的数据结构实现。查找和维护算法由SQL语言实现,而不是使用高级程序设计语言实现。在图1中,每个节点上存储的数据是加密存储的,不会泄露明文的内容以及偏序关系。

  通过建立树信息表和节点信息表这两个辅助表以实现图1所示的AVL数据结构。

  树信息表如图2所示,用于存储针对每棵AVL树的信息。该表可被多个敏感字段公用,每个AVL树为该表的一条记录。每个AVL树的信息包括:

  FIELD_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. 当查找条件为“Fi=KEY”:根据键值的大小,按照平衡二叉树的查找方法,找到符合条件的节点并返回该节点的RECORD_ID;

  2. 当查找条件为“Fi>KEY”:根据键值的大小,按照平衡二叉树的查找方法找到比当前值大的最小值节点,然后遍历返回比键值大的所有节点的RECORD_ID;

  3. 当查找条件为“Fi>=KEY”:根据键值的大小,按照平衡二叉树的查找方法找到比当前值小的最大值节点,然后遍历返回比键值大或者相等的所有节点的RECORD_ID;

  4. 当查找条件为“Fi<KEY”:根据键值的大小,按照平衡二叉树的查找方法找到比当前值小的最大值节点,然后遍历返回比键值小的所有节点的RECORD_ID;

  5. 当查找条件为“Fi<=KEY”:根据键值的大小,按照平衡二叉树的查找方法找到比当前值大的最小值节点,然后遍历返回比键值小或者相等的所有节点的RECORD_ID;

  6. 当查找条件为“KEY1<Fi<KEY2”:找到比KEY1大的最小值,比KEY2小的最大值节点。遍历返回所有满足条件的节点的RECORD_ID;

  7. 当查找条件为“KEY1<= Fi <=KEY2”:找到比KEY1小的最大值,比KEY2大的最小值节点。遍历返回所有满足条件的节点的RECORD_ID;

  8. 当查找条件为“KEY1< Fi<= KEY2”:找到比KEY1大的最小值,比KEY2大的最小值节点。遍历返回所有满足条件的节点的RECORD_ID;

  9. 当查找条件为“KEY1<= Fi< KEY2”:找到比KEY1小的最大值,比KEY2小的最大值节点。遍历返回所有满足条件的节点的RECORD_ID;

  由于节点的键值是加密存储的,所以在以上的查找过程中,在每个节点上需要先进行解密,再进行键值的比较。

  基于该AVL树的索引维护过程为:

  Insert:按照“=”的条件查询到需要插入节点在AVL树中的位置,然后在节点信息表中插入一条记录。由于AVL树要求树的平衡性,因此需要根据需要对树进行旋转和修改该节点的平衡因子,以及树的高度信息。

  Delete:按照“=”的条件找到表中的节点进行删除,并且根据需要对树进行旋转以保证树的平衡性。以及更新树的高度信息。

  Update:先删除旧节点后插入新节点。

  (5)基于表T1建立名为T的视图,包含的字段为:{F1,F2,…,Fi-1,decrypt(Fn+1),Fi+1,…,Fn}。其中decrypt(Fn+1)为使用密文字段Fn+1作为参数的解密函数,返回其对应的明文值;

  (6)创建instead of类型的insert、delete和update触发器。在触发器中实现数据操作时对明文的加密、密文索引的维护。并实现原有的约束C;

  (7)实现扩展索引接口,在检索过程中实现对Fn+1字段的条件查询。


Copyright © 2016 中安威士(北京)科技有限公司 版权所有 京ICP备14001844号-1