设为首页收藏本站优领域

优领域

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
优领域 优领域 IT领域 数据库 其它数据库 查看内容

应用于数据库安全保护的加解密引擎系统

2014-5-21 09:22| 发布者: dzly| 查看: 296| 评论: 0|原作者: 王茜1,朱志祥2,史晨昱1,张磊1

摘要: 针对系统业务数据安全存储问题,采用加解密引擎服务对应用端发送数据进行加密,根据用户ID 来识别不同用 户的传输命令,利用用户私有的KEY 进行加密存储。该方案在云计算平台下具有保护用户数据存储安全、隔离数据的功 能。当应用端用户查询已加密数据时,加解密引擎服务端根据用户ID 读取缓存区用户密钥,解密数据返回给应用端明文 数据。当加解密系统和第三方应用进行集成时,加解密引擎将载入用户定义的加密算法、加密矢量等信息,按照用户自身 的密钥加密敏感数据,可保证用户敏感数据存储安全并隔离不同用户的业务数据。

  0 引言
  信息化应用系统都需要关系型数据库支撑,这些数据库中存储了一些敏感信息,对这些敏感数据添加安全保护措施就是一个最为急迫的需求[1-4]; 传统的信息系统中,大量的数据存储在关系型数据库中,如银行、电信等行业数据库中存储了大量的个人数据,对这些敏感数据增加安全措施,防止数据泄露是数据安全的重要方向[5- 9]; 同时随着云计算日益发展,现在信息化应用系统越来越多地使用云计算的方式对外提供信息服务,在云计算多租户模式下,不同的用户共用一套业务系统,不同租户之间的数据安全、数据隔离问题就成了一个需要解决的问题[1 0-12]; 因此,建立应用于数据库安全保护和数据隔离的加解密引擎系统设计变得极为迫切。
  1 系统架构
  图1 为文中提出的加解密引擎系统的总体架构。


  在该体系架构中,第三方应用首先需要加载加解密引擎统一数据库连接( UDBC) 驱动包,所发送的SQL 请求再通过Socket 发送到加解密引擎系统中,加解密引擎服务中心经过解析SQL 请求语句,根据加解密引擎规则管理部分预先读取的规则判断该SQL 是否需要加密( 即使加密算法、密钥转换明文为密文) ,判断需要加密时通过密钥管理组件中密钥获取接口读取该用户自身的密钥值,结合用户预先添加的加密规则进行加密。当用户请求查询密文数据时,加解密引擎解析SQL 请求判断是否包含需要解密的字段,如果包含则同样使用密钥访问接口、规则读取接口和加密算法规则逆向解密数据。
  图1 系统架构图
  2 加解密引擎服务
  加解密引擎服务实现了对应用端发送命令中需要加密字段的加密,并且根据USERID 来识别不同用户传输的命令,使用用户私有的KEY 进行加密存储。并在云计算平台下起了保护用户数据安全存储、隔离数据的功能。当应用端用户查询已加密数据时,加解密引擎服务端根据用户ID 读取缓存区用户密钥,解密数据返回给应用端明文数据。
  2. 1 加密组件
  加解密引擎服务的核心部分是对符合规则的字段数据按照用户设置的用户标识ID、加密算法、加密密钥以及加密矢量进行加密运算生成密文,最终将密文推送给数据库系统进行密文存储。如何将加密规则和用户提交的请求命令进行匹配是加密组件应解决的核心问题。为此将用户信息、加密规则、密钥库对象分别进行封装成一系列对象进行处理,在应用端完成提交表名和列解析后剥离出数据库所有字段,依次使用加密规则、用户信息进行过滤,对符合规则的列进行加密; 对不符合规则的列将不加密。
  通过配置相关属性文件可以将加密组件添加到EDEServer 中,在实际应用中将这一个组件打成了一个JAR 包,可以按照项目实际需求进行增加或移除。
  加密组件的数据来源于第三方应用系统,用户添加UDBC( 统一数据库连接) 将数据库操作命令以字符流传输到加解密引擎服务端后,再由读取流读取数据流并进行序列化后转化为命令请求对象,加密组件以命令请求对象为参数进行构造、过滤、查询、加密处理。
  将最终的密文以TCP 的形式通过数据驱动程序发送到数据库中完成密文存储。
  另外加密组件使用内存数据库或缓存对象操作规则,通过密钥管理接口实现读取密钥index、验证密钥有效性、注销密钥等操作。
  解析组件通过递归的方式解析出最终不含子查询命令的语句,将列名、表名、数据库名作为参数传递到加密方法中。
  加密算法根据所传递的列名、表名、数据库名参数和缓存规则库的规则进行对比,如果不符合缓存规则该类不进行加密,使用break 语句直接跳出; 如果符合规则,加密方法通过调用密钥管理库的密钥读取接口获取该列的密钥,并将该密钥存储到缓存库中,以供解密使用。


  2. 2 解密组件
  加解密引擎服务的另一核心部分是对符合规则的数据按照用户标记ID、加密算法、密钥以及加密矢量进行解密运算生成明文,最终将明文送到第三方应用系统中,供显示或做进一步业务处理。
  如何将加密规则和用户提交的请求命令进行绑定是解密组件应解决的核心问题。为此系统将用户信息、加密规则、密钥库封装成一系列对象后进行处理,在应用端完成提交表名和列解析后剥离出数据库所有字段,依次使用加密规则、用户信息进行过滤,如果符合加密规则则对该列进行解密; 如果不符合规则,则该列不进行解密。
  在并发访问加解密引擎系统时,大数据量密文的解密返回可能需要消耗较长时间,应用界面将处于等待状态,这样会使得用户体验效果较差,这个问题可以通过部署多实例进行处理,或者利用单实例多线程进行处理。
  同样,通过配置相关属性文件也可将解密组件添加到EDEServer 中,在实际应用中将这一个组件打成一个JAR 包,可按照项目实际需求进行增加或移除。
  用户通过数据库操作命令将数据库存储的密文读取到加解密引擎服务中,解密组件将命令请求对象作为参数进行构造、过滤、查询、解密处理,将最终的明文以TCP 形式、通过数据驱动程序发送到第三方应用系统中。
  2. 3 用户数据隔离保护
  加解密引擎系统根据用户ID 获取用户自身密钥来加密业务数据,不同用户所使用的密钥不同,使得用户使用应用系统产生的业务数据最终都是密文存储,即使使用自身密钥也无法进行解密,从而防止了内部用户窃取、访问数据。
  另外加解密引擎系统增加了用户管理模块,支持信用的注册、审核、操作审计等功能,对用户实现分权限、分角色、分组管理,实现了对业务数据访问控制的安全,阻挡了非法用户对应用系统的操作。
  3 技术实现
  在标准的JDBC 接口基础上,加解密引擎系统对原有的JDBC 访问接口和类进行了二次封装和重写,这一部分在加解密系统中称为UDBC( 统一数据库连接) ,UDBC 和驱动层程序工作在不同层面( 如图1 所示) ,应用程序添加不同的数据驱动使用UDBC 与数据库系统进行通讯。在第三应用需要添加UDBC 的驱动URL、驱动JAR 即可,UDBC 屏蔽了不同数据库驱动地址、SQL 请求的差异性。
  1) 统一数据库连接模块是基于JDBC 驱动的数据库连接驱动的二次开发,包括继承了一些驱动类、实现了Connection 等接口,通过加载该驱动,客户端将数据发送至引擎模块,经过加解密处理后最终入库。
  2) 加解密引擎服务主要是对SQL 表达式的解析采用递归算法,逐层对SQL 语句是否符合加解密规则进行判断,如果符合加密或者解密规则进入加密或解密流程。解析过程采用迭代方式将返回字段与规则中定义的字段进行对比,以判断是否需要进行解密处理。
  3) 解密部分提供密钥对的提取、摘要加密、时间戳等服务,与密钥服务之间的通讯以及数据加密或解密算法,算法包括了MD5、Base64 等。
  4) 作为校验加密数据,加解密引擎系统可以配置明文的校验数据库。
  4 应用案例
  采用某个市级人口库系统作为集成对象,将加解密引擎的统一数据库系统连接驱动包添加到该人口库系统中,修改该应用的数据库驱动URL、数据库主机信息等,使得人口库系统能够适配上加解密引擎系统,然后再配置加解密引擎系统的数据库连接部分,使加解密引擎系统能够与数据库系统进行适配,应用案例实现过程如图2 所示。
  5 结束语
  加解密系统和第三方应用进行简易的集成后,加解密引擎将载入用户定义的加密算法、加密矢量等信息,并按照用户自身的密钥加密敏感数据,最终将密文数据存储到原有的数据库中,保证用户敏感数据的存储安全,由于不同用户所使用的key 不相同,从而隔离了不同用户的业务数据。
  
  

网站统计|优领域|优领域 ( 粤ICP备12011853号-1 )  

GMT+8, 2019-10-18 23:04 , Processed in 0.099867 second(s), 12 queries .

Copyright © 2008-2014 优领域

回顶部