SQL Server是目前主流的中小型企业级数据库,它提供了用户注册、识别用户、DAC、审计等安全功能。然而,DBA(数据库管理员)具有至高无上的权力,比如他能够进行用户授权、资源分配与回收、设置系统安全策略等操作,它能够利用DBA的权限对数据库敏感信息进行随意查询与修改,这是很多应用系统中不被容许的行为。如果通过数据文件加密机制的设计与实现,就能够构建安全的SQL Server企业应用。

一、数据库文件加密系统的关键技术分析

数据库文件加密系统需要使用的基本技术有:字段加密、动态密钥管理、数据的合理处理以及用户使用透明处理。比较关键的技术有动态密钥管理和加密数据库的密文检索机制的实现。

1、数据库文件加密系统的动态密钥管理

密钥管理有许多不同的实现方法,其中基于转换表的密钥管理方案是一种比较好的方案。密钥转换表是通过密钥转换来实现的,其安全强度只依赖于加密算法的安全强度。

密钥转换是指合法用户在访问数据库中的某数据时,将自己的用户密钥作为一个参数送入密钥管理系统,系统利用转换函数得到数据密钥,从而实现数据库文件的加密和解密。我们可以构造数据库文件加密系统中的密钥转换表,实现数据库文件加密系统的动态密钥管理。

2、高效的数据库密文检索机制

对于加密后的数据库文件,由于密文数据不再保持明文数据原有的顺序关系,因此,当需要查询时,必须将涉及到查询条件的密文字段进行解密,或是将整个数据表解密得到明文数据,然后再进行查询。这种密文查询方式弊端很明显,系统开销很大。如何高效地对密文数据进行查询,成为一个全新的研究领域。目前已经有人提出了同态加密算法,实现机理是加密后的密文数据具有保序性,这样方便查询,但是攻击者可以通过这种保序的密文进行攻击,通过部分明文就能够攻破系统。

鉴于这种方法的不足,人们提出了密文索引技术,也就是将DBMS提供的索引功能进行改造,构造密文索引。这一般通过B+树来实现,通过开发的数据库文件加密系统将加密字段中的字段密文信息存入系统构建的密文索引树中。在明文数据库中,索引树中每个节点主要存放数据和指针两类信息,可将每个节点中的数据用其对应的密文代替,通过这种方式可以产生一棵密文数据库的密文索引树。用户在查询和数据检索时,先将密文索引树的根节点解密并与查询条件进行比较,通过比较决定下一个检索节点的所在的子树位置,通过这种方式一直检索下去,直到查询到所有满足条件的节点。使用这种方法,解密次数为密文索引树的深度,其查询数据比全表或是整个字段解密速度要快得多。

二、SQL Server数据库文件加密系统的实现方案

SQL Server数据库文件加密系统可以通过两种方法实现,这些方法都是在SQL Server数据库的基础上开发类似“外挂”系统的数据库文件加密系统来实现。

1、基于系统扩展存储过程实现的数据库文件加密方案

微软SQL Server 2000通过扩展存储过程访问数据库外部对象,例如SQL Server数据库应用程序能通过扩展存储过程读写操作系统文件,也能够通过扩展存储过程调用其它Win32应用程序,或是和他们交换数据。如采用扩展存储过程实现了一个简单的数据库文件加密系统,主要方法是通过VC开发的扩展存储过程调用系统加密和解密模块、密文索引模块、动态密钥管理模块等实现数据库文件加密系统,这种加密方式是通过SQL Server提供的功能来实现的,实现起来比较简单,开发周期短,适合于加密要求不高的企业用户使用。

但是这种加密方式有其天生的缺点——对数据库管理员留有攻击的缺口,因为系统扩展存储过程对系统管理员来说是可见的,系统管理员可以删除扩展存储过程让数据库文件加密系统无法工作,也可以进行强力攻击进行破解。

2、SQL Server数据库文件加密系统实现方案

(1)SQL Server数据库文件加密系统的系统结构,如图1所示。

SQL Server数据库文件加密系统如何设计

通讯和数据库文件加密系统的接口系统主要负责客户端和服务器的通信,以及为客户端应用程序提供系统接口。在这个模块中,要设计一种客户端和服务器端能够正确进行通讯的数据集,这种数据集要保证和SQL Server数据集兼容。

加密字典管理系统是数据库管理员定义数据库加密项的工具,它提供创建加密字典、删除加密字典、加密字典权限管理等功能,它利用数据库加密和解密引擎来完成数据的加加密和解密处理。

密钥转换表和密文索引配置管理系统主要功能是配置管理密钥转换表和密文索引机制。系统管理员可以通过该系统创建和删除密钥转换表,同时也可以对其进行配置。

密文索引系统能够根据构造密文索引树,是系统核心模块之一。

数据库加密和解密引擎位于用户应用程序和SQLServer之间,是数据库文件加密系统的核心部件,负责数据库文件的加密和解密处理,对应用户和开发人员是透明的。它由加密和解密处理模块、SQL解析模块、系统接口模块、密钥管理接口模块、密文检索接口模块和数据库接口模块组成。

加密和解密处理模块是对系统需要加密和解密数据进行加密和解密处理的模块,是系统的核心模块之一,它主要有系统加密和解密算法、内部专用命令处理模块、密钥转换表接口模块和SQL命令加载模块等组成。

语法分析模块的功能是将SQL语句转换成易处理的树形式的语法结构。该模块由词法分析器、语法分析器、语法错误处理、语法树转换成SQL命令等子模块组成。在进行语法分析时,先对SQL命令进行词法分析,分割成各个词法单位,再输入语法分析器,得到一棵语法树。语法分析模块还包括语法树反向生成SQL命令的功能函数,用于将经过加密变换后的语法树转换成新的SQL语句。

密钥管理接口模块和密文检索接口模块分别提供密钥管理系统和密文索引系统的接口。

数据库接口模块封装对SQL Server数据库的访问操作。该模块包含两部分接口,一是前端数据库客户访问数据库加密和解密引擎的接口函数,二是数据库加密和解密引擎访问后台数据库服务器的接口函数。

(2)SQL Server数据库文件加密系统插入数据和查询数据流程

SQL Server数据库文件加密系统如何设计

图2示意系统插入数据和查询数据时,系统是如何工作的,当用户要向数据库中插入数据时,用户应用程序通过通信接口系统向服务器发送SQL命令,服务器数据库加密系统首先解析用户的SQL命令并进行操作权限检查,完成后,系统将提取的用户数据进行类型转换,将其转换为二进制数据类型,当用户数据转换为二进制数据后,系统根据用户ID信息以及用户密钥查找密钥转换表,对数据文件加密,然后将密文二进制数据插入数据库中,同时将新节点插入密文索引树中。当用户发起查询时,系统进行密文检索,将检索的密文解密,并构造返回数据集,通过通信和系统接口模块发送给用户程序。

3、SQL Server数据库文件加密系统实现动态模型图

根据以上分析与设计,我们可以得到SQL Server数据库文件加密系统实现的动态数据模型图如图3所示。

SQL Server数据库文件加密系统如何设计

从图3中我们可以清楚地看到对数据库文件访问的整个过程,这个过程和“SQL Server数据库文件加密系统插入数据和查询数据流程”是一致的。这样,我们就实现了 SQL_Server数据库文件更高安全性的加密。

小知识之同态加密

同态加密是基于数学难题的计算复杂性理论的密码学技术。对经过同态加密的数据进行处理得到一个输出,将这一输出进行解密,其结果与用同一方法处理未加密的原始数据得到的输出结果是一样的。