随着计算机网络技术的发展和Internet技术的普及,Web系统结构得到广泛应用,特别是在一些企业信息管理与政府政务管理中,已成为主要的管理方式。Web系统数据存放在后台数据库中,其中部分信息数据是绝对机密的,它关系到了企业的发展与存亡,一旦这些机密数据被窃取或恶意篡改,这势必将给企业带来巨大的经济损失。而给Web系统数据库加密是保护系统关键数据的有效手段之一。

一、Web信息管理系统数据库加密技术的相关概念

1、口令加盐技术

在系统登录时,口令密钥作为用户登录时的主要信息存放,其安全性直接关系到了整个系统的安全性,对于口令的加密,是极为重要的。而传统的Hash函数加密法很容易遭受字典式攻击,对于一般性的字典式攻击方式,最常用的解决方式是对于原始数据进行加盐处理。所谓“加盐技术”是指在计算消息摘要时,加上一些字符,可以是固定的,也可以是随机的,然后带入公式,计算摘要,并保存起来。

2、中间件技术

中间件(middleware)是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源,管理网络通信。中间件处于操作系统软件与用户的应用软件的中间。它在操作系统、网络和数据库之上,应用软件的下层,可为处于自己上层的应用软件提供运行与开发的环境,帮助用户灵活、高效地开发和集成复杂的应用软件。

3、jCryption加密插件工作原理

jCryption是一个开源的jQuery加密插件。其工作原理是首先jCryption将表单数据序列化,并将表单数据转化为16进制值。当服务器端生成密钥对后,jCryption的加密脚本接收密钥对,并使用公钥将生成的16进制表单文件加密并发送至服务器端,服务器端收到后将其解密。

二、Web信息管理系统数据库加密系统的结构

1、加密系统的结构

原有的Web信息管理系统中,浏览器与Web服务器之间及Web服务器与数据库之间没有专门的体系和机制保证系统安全。该加密模型将加密系统放在中间层,通过加/减密模块和安全认证模块来保障数据库系统的安全,如图所示。

Web浏览器向Web服务器发送请求,Web服务器将请求的数据发送至加密中间件进行处理。如果数据需要加密存储时,加密中间件将数据加密并存放在数据库。如用户需要访问加密后的数据时,加密中间件将数据解密,并将解密后的数据发送给Web服务器。

2、加密算法的选取

加密系统选取加密算法的原则主要有两点。一是加密的安全性,二是加密速度。基于这两点考虑,本系统使用AES算法加密数据,使用RSA算法加密密钥。

3、加密粒度的选择

加密粒度是指数据库加密的最小单位。按照数据库的结构层次,对数据库信息可分为数据文件(表)、记录、字段(属性列)和数据项,对数据库信息的加密分别以文件、记录、字段和数据项作为加密基本单位。

基于表的加密即将数据库文件作为整体,用加密算法对整个数据库文件加密保证信息的真实性和完整性。但其加密方式过于粗糙,影响数据库执行的效率。

基于记录的加密是最常用的数据库信息加密手段,其基本思路是,在各自密钥的作用下,将数据库的每一个记录加密成密文并存放于数据库文件中。

基于记录的数据库加密的缺点是,在解密一个记录的数据时,无法实现对该记录中需要的字段进行单独解密。

基于字段(属性)的数据库加密,就是针对于所加密对象中的某个字段进行加密。

本方案,由于Web信息管理系统中并不是所有字段都需要加密,所以采用基于字段级密度加密。

三、Web信息管理系统数据库加密系统的实现

1、用户登录验证模块加密方案

用户登录模块主要是对系统中所登录的用户进行合法性验证。用户登录验证页面是用户进入系统的第一道防线,保证用户安全登录系统是整个加密系统中重要模块之一。用户登录模块使用了口令加盐技术。已加盐的口令摘要以MD5方式加密保存在数据库中。用户登录时,系统根据用户的用户名取得口令摘要,并根据口令摘要分离得到盐值。系统根据输入的口令和盐值计算出口令摘要,然后与存放在数据库中的摘要比对,如果比对一致则登录成功,否则失败。

2、信息管理系统表单加密方案设计

Web信息管理系统中,必然涉及到大量表单。使用HTML协议一般是不加密的,所有数据都是以明文的方式传输,因此表单数据加密就很重要。传统的表单数据加密方法为SSL加密,但这种方法需要在Web服务器端进行相关设置,操作麻烦。该系统采用开源jQuery插件jCryption加密form表单。调用jCryption的格式非常简单,假如表单id为a,那么使用jCryption加密表单的格式为:$("#a").jCryption();

3、加/解密引擎的设计与实现

加/解密引擎是整个数据库系统中最重要的模块,主要负责后台数据库的加密、解密。加/解密引擎主要由初始化模块、加/解密模块、语法分析模块及数据库连接模块组成。

(1)初始化模块初始化模块是加密系统启动时首先调用的模块,主要负责加密系统的初始化。

(2)加/解密模块加/解密模块主要负责数据库数据的加/解密处理。加密模块的实现原理是加密模块根据提供的SQL命令语法分析树搜索加密字典,加密字典将所加密数据的密钥信息返回,然后加密模块将密钥信息传给密钥管理模块取得密钥,从而加密模块根据密钥对相关信息进行加密。解密模块的实现原理是解密模块根据需要解密的信息从密钥管理模块中取得密钥,然后根据密钥对信息解密。

(3)语法分析模块语法分析模块的主要功能是将SQL命令进行语义分析,生成二叉树形式。

(4)数据库连接模块该模块负责加密引擎与数据库的连接工作。

3.1、加/解密引擎的实现原理:

首先对应用程序所传入的SQL语句进行语法分析,并通过分析解析出来SQL命令所要操作的表、相应的列以及对应的数据信息,然后再利用加密字典管理程序对加密字典进行查询,得出相应表的加密信息。如果该SQL命令中没有加密信息,直接对数据库进行操作;如果SQL命令中含有加密信息,需要从密钥生成与管理模块中取得密钥,通过加密引擎中的加密处理模块对数据信息进行加密,再在语法分析模块的作用下,生成相对应的密文SQL命令,最后,将密文SQL命令传入数据库连接模块,执行数据库操作。其实现步骤如下:

(1)对SQL命令进行语法分析,如果语法正确,转到步骤(2),进行步骤(2)处理;如果语法不正确,清除SQL命令缓冲区,返回错误,打印日志。

(2)判断是否为数据库加/解密引擎的内部控制命令?如果是,处理内部控制命令,然后转到步骤(7);如果不是,则转到步骤(3)。

(3)检查加/解密引擎是否处于关闭状态?如果是,则通知数据库连接模块,并等待;否则转到步骤(4)。

(4)连接密钥生成与管理模块,解析需要加/解密的字段,然后转入步骤(5)。

(5)SQL命令是否需要加密处理?如果是,则将SQL命令进行加密变换,替换原SQL命令,然后转入步骤(6);否则直接转入步骤(6)。

(6)将SQL命令转送数据库服务器处理。

(7)SQL命令执行完毕,清除SQL命令缓冲区。

4、密钥生成与管理模块

密钥生成与管理模块在加密系统中所起的作用非常重要,由于不同的人存取不同的文件或同一文件的不同部分,因此加密产生的密钥有可能很大,密钥间关系复杂,这样就给密钥管理带来很大困难。基于Web信息管理的结构,在密钥管理中,本文采用多级密钥管理方案。对某一数据进行加密后,系统会自动产生一个数据密钥,该字段用此密钥加密后以密文形式存放在数据库里。另外,为了保证非法用户窃取加密字段进行解密,根据多级加密的思想,再产生一个用户密钥对数据密钥进行加密,以此增强数据密钥的安全性。如果Web数据库系统中的数据安全级别比较高的话,可以将用户密钥保存在其他媒介中。

密钥及密钥相关配置信息都以表的形式存放在数据库里,各表描述如下:

(1)表login_user用于登录用户信息。字段有用户id和用户名。

(2)表encrypt_table用于存储加密表的信息。存储信息由加密表id,用户id表所有者,表数据库名等信息。

(3)表encrypt_field保存被加密表所设计的字段。存储的字段有字段名、字段数据类型及数据长度等。

(4)表iKeys用于存放密钥实体。存储的字段有密钥id,密文等。5)table_field用于表示表、列对应关系表。存储字段有加密表id、用户id、加密列id及密钥创建时间等。各数据表关系如图所示:

四、Web信息管理系统数据库加密方案的应用案例

某学院工资查询系统是其校内项目。该系统数据库主要有2个表,分别是工资表及职工信息表。储存有姓名、工资卡号、基本工资等信息。职工信息表主要存放的是职工的基本信息。在这两个表里面,工资表里面的字段如姓名、工资卡号、工资等信息是属于敏感信息,需要加密中间件加密。而职工的一些信息像出生年月、职称等属于普通信息,不需要加密中间件加密。敏感信息经加密中间件加密后,只有工资卡拥有者才能浏览工资信息。即使数据库管理员也不能浏览其他人的工资信息,这样就保证了校内工资信息的安全。系统登录模块使用了口令加盐技术。普通表单像如教师基本信息更新表单使用了jQuery插件jCryption进行加密。

目前Web信息管理系统数据库加密技术已在某学院校内项目“工资查询系统”中应用,取得了预期的效果,随着互联网的发展,我相信在不久的将来,Web信息管理系统数据库加密技术的应用前景会更加的广阔。

小知识之SQL

结构化查询语言(Structured Query Language)简称SQL,结构化查询语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统可以使用相同的结构化查询语言语言作为数据输入与管理的接口。结构化查询语言语句可以嵌套,这使他具有极大的灵活性和强大的功能。