图书馆是重要的信息储藏库和交流平台,如何更方便、更安全地利用图书馆的资源已成为军队信息化建设的首要任务。以某师图书馆管理信息系统的开发为背景,研究了数据库技术和加密技术,应用改进的AES加密算法实现了对重要数据的加密,并采用身份验证、访问控制及审计跟踪等保证了系统的安全运行。
一、基于三层C/S的数据库加密应用系统的设计方案
三层C/S结构是将应用功能分为表示层、逻辑层和数据层三部分。这种划分是结构逻辑上的划分,如图1所示。
(1)数据表示层:是信息系统的用户接口部分,担负着用户和系统间的对话功能。其主要功能是实现用户交互和数据表示,为以后的处理收集数据,向第二层业务逻辑层请求调用核心服务处理,并显示处理结果。
(2)逻辑层(中间层):是系统的核心部分,负责将具体的业务处理逻辑编入程序中。
(3)数据层:负责管理对数据库数据的读写。可以是多个关系数据库,甚至可以是异构数据库。
大多数基于C/S模型的数据库的应用都是通过调用数据库编程接口(如ODBC)实现对远端数据库系统的访问,一般接口允许应用程序使用结构化查询语言(SQL)查询数据。本文旨在通过改造连接数据库系统和数据库应用程序之间的接口程序,完成加脱密功能和密钥管理等,设计思想如图2所示。
由于编程接口的互用性,程序开发与原数据库系统和数据库应用程序基本无关,因此系统设计简单,可靠性高,实用性强,并能够充分利用现有成熟数据库系统的一切优点。
ODBC( Open database connectivity)总体结构有4个组件:
(1)应用程序。执行处理并调用ODBC函数,提交SQL语句并检索结果。
(2)驱动程序管理器。根据应用程序加载并卸载驱动程序,处理ODBC函数调用,或把它们传送到驱动程序。
(3)驱动程序。处理ODBC函数调用,提交SQL请求到一个指定的数据源,并把结果返回到应用程序。
(4)数据源。包括用户要访问的数据及其相关的操作系统、DBMS及网络平台。大多数数据库系统设计的前台开发工具都提供了一些接口软件。
本文设计方法是对数据库访问流程进行改造。对查询类SQL语句得到的数据解密后显示在客户端,对接入类SQL语句将客户端提交的数据执行加密后,再提交数据库。实现时通过在数据库管理系统与数据库应用系统之间加入安全管理模块,完成以上的SQL语法分析、加解密、密钥管理等功能,也即在接口驱动程序(.dU)中增加一定的加密/解密功能。改造后的这一模块称为数据库加脱密引擎。
采用上述方式实现的数据库加密系统的特点:
(1)对数据库的最终用户完全透明。
(2)解决了最重要的数据库隐秘通道问题。即使黑客窃取了关键数据,仍然难以得到所需的信息,因为所有数据都经过加密处理。另外,数据库加密以后可以设定不需系统管理员见到的明文,大大提高了数据的安全性。
(3)客户端实现数据加密,网络上传送的是密文,增加了网络传输的安全性。
(4)完全独立于数据库应用系统,不需要改变数据库应用系统就能实现加密功能,省去修改原有应用系统的繁琐。
(5)在客户端进行数据加脱密运算,不会影响数据库服务器的系统效率,数据加脱密运算基本无延迟感觉。
(6)由于改动的是接口软件,针对不同的客户开发工具和服务端数据库管理工具,都可以设计专用的接口软件,用以屏蔽各类数据库,增强其扩展性。
(7)与应用程序无关,可以将加密的要求存入数据库中,当加密要求(加密字典)改变后,系统管理员只需重新执行加密修改的相应模块即可完成新的加密要求,具有一定的灵活性。
二、数据库加密原理和算法
1、数据库加密算法选择
加密算法一般分为两类,传统密码算法(又称对称密码算法)和公开密钥密码算法(也称非对称密码算法)。对称性加密算法的典型算法有DES、IDEA和AES等。较多采用改进的DES加密算法实现数据库加密功能。AES加密算法就是美国针对DES缺点提出的新一代加密标准,于2001年5月正式颁布使用来替代DES加密算法。加密算法是一种全球免费使用的分组加密算法。数据分组密钥长度可为128位、192位或256位。非对称密码算法的一个例子是RSA密码。
随着加密技术的发展,提出了许多直接应用于数据库加密的加密算法,如子密钥数据库加密、影子数据库和秘密同态技术等。这些研究理论在实践中还须要进一步完善。
加密算法中一个核心问题是密钥的管理。在传统密码应用中,双方所需的密钥通过另外的安全途径传送;而在数据库应用系统中,密钥的某些信息必须存放在机器中,如加密字段的数据密钥。对密钥的选取和存放存在安全问题。解决的方法之一是研制多级密钥管理体制。例如,在二级密钥管理体制中,一级密钥(也称主密钥)存储在安全区域,用它对二级密钥信息加密生成二级密钥(数据密钥),再用数据密钥对数据加密。
数据库加密机制中涉及到数据和密钥的加密。选用适当的加密算法可以在保证安全性的前提下提高数据库加解密效率,从而减小因采用加密后对系统造成的额外开销。AES加密算法和RSA加密算法是数据加密中比较优秀的算法,但仍在处理效率,密钥管理等方而存在着不足。AES加密算法和RSA加密算法优缺点分析见表1。本文在此基础上提出了一种将AES与RSA相结合的方法用以实现数据和密钥的加密。
对数据的加密采用的是AES加密算法,以提高数据加解密的速度。因为整个系统的安全性依赖于用户密钥的存放,所以采用RSA算法对密钥进行加密处理。既利用了AES私钥算法的快速性又保证了密钥的安全性。图3给出整个加密算法的选择过程。
2、AES加密算法的改进应用
应用于数据库加密系统的密码要满足:
(1)数据库加密以后,数据量不应明显增加;
(2)某一数据加密后,其数据长度不变;
(3)加密、解密速度要快,数据操作响应时间让用户能够接受。通过改变对分组密码AES加密算法传统的应用处理方法,使其加密后密文长度不变,就能满足以上几点要求。
AES是一种对二进制数据进行加密的算法,数据分组长度和密钥长度可独立选择,并由数据分组长度和密钥长度决定加密圈数N为10、12或14圈。加密算法过程如图4所示。
图4中的F为圈变换(包括S盒变换、行移位变换、列混淆变换、圈密钥变换),Ki为第i圈加密时所用的圈密钥,明文经N次圈变换之后加密成明文输出,当数据分组长度和密钥长度均为128位时,要加密的数据分成128位一组,按每行4个字节(1个字节8位)排成4行,称为一个状态。数据的写入和读出均按列优先顺序,以字节为单位操作。将明文数据分组后,对每一个分组都要进行10圈数加密,每一圈要进行如下变换:S盒变换BYTESUB、行移位变换SHIFTROW、列混淆变换MIXCOLUMN、圈密钥加变换ADDROUNDKEY,最后一圈要少做第3步列混淆变换。
加密算法的算法语言描述为:
AESENCRYPTION( STATE, KEY)
FOR( I= 0;1 < 10;1++ )
ROUND( STATE, EXPANDKEY[4 * I])
{
BYTESUB(STATE)
ADDROUNDKEY(STATE,ROUNDKEY[4*J])
}
FINAL ROUND( STATE,EXPAND KEY[4*J])
(BYTESUB( STATE)
SHIFTROW( STATE)
ADDROUNDKEY( STATE,ROUND KEY[4*J]))
}
经过加密出来的数据也是128位分一个组。如果明文分组的长度不是128位的整数倍时,最后一个明文分组的长度就小于128位,如果采用填充“OO"或其他数据,使其长度也为128位,加密后的数据就大于明文的长度。为使加密后的数据长度与明文数据长度一致,采用“密码挪用法”来解决。当待加密数据的长度为24码(即为192位)时,“密码挪用法加密”过程如图5所示。
第一整组(1-16码)加密后截取第9-16码的密文与尾部(17-24码)组成一个整组进行加密,加密所得密码接在前一组的第8个密码之后。其中,第9-16码实际上进行了二次加密,在解密时也应该进行二次解密,方案保证了128位分组加密,同时保证了数据库加密以后,数据长度不会变化。
采用AES加密算法实现数据的加密,输入宇段数据和数据密钥,运行函数:AES DECRYPT( DATA,KEY_ DATA),生成的密文存入数据库中;检索时执行函数AES ENCRYPT(DATA,KEY_DATA),解
密后的明文返回客户端。加密函数AES DECRYPT与解密函数AES ENCRYPT是一对互逆的算法。
小知识之C/S结构
C/S 结构,即大家熟知的客户机和服务器结构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是Client/Server形式的两层结构,由于现在的软件应用系统正在向分布式的Web应用发展,Web和Client/Server 应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。这也就是目前应用系统的发展方向。