传统的数据库保护方式存在许多安全漏洞和缺点,为保证系统安全,本文设计了一种在现有的信息系统的基础上建立专用数据库加密应用系统,并设计了系统的各个模块,其特点如下:
a、所重要数据都是经过加密处理的,即使黑客窃取了关键数据,仍然难以得到所需的信息,另外,大大提高了数据的安全性。
b、客户端实现数据加密,网络上传送的是密文,增加了网络传输的安全性,系统完全独立于数据库应用系统,不需要改变数据库应用系统原有功能结构就能实现加密功能,而且加密、解密运算在客户端进行,不会影响数据库服务器的系统效率。
c、加密系统与应用程序无关,在加密要求(加密字典)改变后,系统管理员只需重新执行加密修改的相应模块即可完成新的加密要求。
一、系统设计原理与系统
大多数数据库应用(基于客户/服务器模型)通过调用数据库编程接口实现对远端数据库系统的访问,一般接口允许应用程序使用结构化查询语言(SQL)查询数据。本文的设计方案是改造连接数据库系统和数据库应用程序之间的接口程序,完成加密、解密功能,密钥管理等,改造后的接口程序位于应用程序和数据库管理系统之间,形成一种三层次的结构。
本设计方案实质上就是对正常的数据库访问流程进行改造,截获提交的SQL语句,在传送之前完成数据的加密处理,即将SQL语句中的明文换成密文重新组合SQL语句后提交,检索时,分解SQL语句,将加密字段解密后传送到客户端。实现时通过在数据库管理系统与数据库应用系统之间加入安全管理模块,完成以上的SQL语法分析、加解密、密钥管理等功能,也即在接口驱动程序(dll)中增加一定的加密/解密功能,称改造后的这一模块为数据库加密解密密引擎。
基于以上的设计思想,本系统主要分成两个功能独立的主要部件:
a、上文提到的数据库加密解密引擎,这是本系统的核心部件。
b、加密字典管理程序,用于定义应用系统的加密定义和定义修改,使该加密系统更具灵活性,不同的应用系统采用对应的加密定义。系统的体系结构如图1所示。
系统将用户对数据库信息的具体加密要求记载在加密字典上,即应用系统数据库中哪些字段需要加密以及采用的加密算法等等,这些是数据库加密系统的基础信息,核心部件数据库加密、解密引擎负责完成数据库信息的加密解密处理以及前端数据库客户访问驱动和后台数据库服务器的连接驱动。
二、数据库加密解密引擎
该引擎设计采用三大模块组成:加密解密处理、SQL语法分析和数据库接口。
1、加密、解密处理
该模块是数据库加密解密引擎的核心模块,其主要功能为加密解密引擎的初始化、SQL命令的加密转换、查询结果的脱密处理以及加脱密算法实现等等,其关键点在于截获提交的SQL语句,若换原SQL语句,重新提交给数据库管理系统;在查询时,若存在加密字段,将加密表脱密后提交给客户端,具体的加密算法可采用新发布的高级加密算法标准(AES),这种对称密钥算法较之以前采用的DES算法具有更高的安全保密性,具体处理过程如图2所示。
该模块与数据库接口的联系:客户端应用程序提交SQL命令,调用用户接口模块时被调用;加密解密处理中在需要访问后台数据库时,调用后台数据库接口模块提供的数据库服务。
该模块还用到了SQL语法分析模块提供的功能,其过程为将用户提交的SQL命令传递给“SQL语法分析模块”返回一棵树,用于加密解密语意分析,得到SQL'语句中的表名、字段名以及需要加密处理的输入数据。
为提高引擎的处理速度,设置加密字典缓冲区,将存放最近访问的数据库表的字典信息,不加密的表虽然不存在与之对应的加密字典数据,但也登记在加密字典缓冲区中,从而便于系统快速
判断一个表是否已加密。
2、SQL语法分析
本模块功能类似于该编译器的功能,将SQL命令转换成易处理的树形式,从树中提取出数据库加密解密处理模块所需的参数(表名、字段名、插入数据等等)。除此主要功能外,还包括由语法树转换成SQL命令的功能,主要子模块包括:
a、词法分析器,用于对SQL命令进行词法分析,分割成各个词法单位;
b、语法树生成器,用于将分析得到的词法单位生成一棵语法树;
c、语法树反向生成SQL命令,用于将经过加密变换后的语法树转换成新的soL命令;
d、语法错误处理,用于处理语法树生成中产生的错误。
3、数据库接口
模块主要包括两部分:前端数据库客户应用程序访问数据库加脱密引擎的接口函数和数据库加密解密引擎访问后台数据库服务器的接口函数。
客户端访问数据库加脱密引擎的入口点是前端数据库接口模块,用户通过建立的连接和SQL命令调用数据库接口模块提供的用户接口函数,对于不同的数据库应用编程接口,用户接口函数的定义是不同的。
当进行“加密解密处理模块”在需要数据库服务时,调用“后台数据库接口”提供的通用数据库驱动函数连接到数据源,取出用户所需的信息返回客户端,所以,数据库接口模块的工作实际上就是完成未加密前ODBC驱动程序的工作,只是在中间插入了加脱密处理模块,增加与加密解密模块的连接函数。处理过程为接受客户端的操作请求,传递给“加密解密处理模块”,代替“加密解密模块”去访问数据库服务器。
图3综合描述了加密解密引擎的工作流程。
三、加密字典管理程序
加密字典管理程序是数据库管理员定义加密数据项的工具,该部分包括创建数据加密字典、表加密、表解密、加密字典权限管理等功能,对于已有数据的数据库应用系统,在使用该加密系统时,需进行初始化操作,即添加加密定义,将原有需加密的数据从明文转化到密文,这个转化的加密解密功能在加密解密引擎中已有,它调用数据库加脱密引擎中的加脱密处理模块来完成。
加密字典管理程序是在数据库应用系统使用前由系统管理员来使用,普通用户不用关心。
该程序由用户注册、加密字典配置、加密定义修改、表信息检索、密文表配置、数据转化等模块组成,各模块之间的关系如图4所示。
以下说明各模块的设计。
用户注册模块。是数据库管理员启动加密字典管理程序后必须通过的身份验证模块,该模块防止未授权人使用加密字典管理程序,确保加密字典的安全,身份验证的方式采用DBMS通常使用的用户名和口令机制.为进一步增强安全性,也可以利用IC卡读写器或指纹识别器进行用户身份认证。
加密字典配置模块,用于完成数据库应用系统使用前加密字典的初始化工作,当加密解密引擎工作时,直接从缓冲区中调用加密字典数据,从而加快加密解密速度,提高系统运行效率。
加密定义与修改模块,用于处理数据库采用加密手段后,对原有的DBMS存在着某些影响,例如,数据库管理系统将会因为加密后的数据不符合定义的数据类型而拒绝插入,解决方法是另外建立密文表存放密文.凡是需要加密的数据都定义为计算机二进制数据类型,加密以后插入数据库的数据全部为二进制数据类型的数据,当用户检索时,加密系统自动脱密并转化成用户所需要的数据类型。这些加密时所需的信息必须通过 界面进行设置并保存在数据库中,而一般主键、外键、索引等字段信息则可以不用加密。
在解决以上问题时,该模块运行中还要使用“表信息检索模块”以及“密文表配置模块”提供的功能,该模块的处理过程如图5所示。
表信息检索模块,以函数的形式提供,功能为从数据字典中检索出某个表的各种信息,这些信息包括表名、表标识、字段定义、主键定义、外键定义、索引定义等等,函数输入为表名,输出为表的各种信息数据,若该表已有加密定义,则包括该表的加密定义。
密文表配置模块,用于为“加密定义修改模块”提供构造密文表、删除密文表、维护加密字典信息等功能。
数据转换模块,是专门为“加密定义与修改模块”服务的,对于一个已运行的应用系统来说,数据库中已存在大量业务数据,将应用系统实行加密系统处理时,首先要将原有的明文数据进行密文初始化,该模块就是来完成这个功能的,它主要包括表的加密、解密以及加密列变更三种需求下的数据转换工作。
小知识之SQL
SQL是高级的非过程化编程语言,它允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解其具体的数据存放方式。而它的界面,能使具有底层结构完全不同的数据库系统和不同数据库之间,使用相同的SQL作为数据的输入与管理。