APP下载

面向密文数据库的中间件系统设计与实现

2019-01-07宋天煜

计算机应用 2018年12期
关键词:中间件密文密钥

宋天煜,杨 庚

(南京邮电大学 计算机学院、软件学院、网络空间安全学院, 南京 210023)(*通信作者电子邮箱airsty@163.com)

0 引言

针对数据机密性、完整性和可用性的保护是数据库安全的重要内容,对数据库安全的威胁主要包括两个方面[1]:一是对数据库系统的外部攻击,非法用户通过重放攻击或者利用数据库系统漏洞进入数据库,破坏隐私数据;二是来自数据库系统内部的攻击,具有合法访问数据库系统的用户,利用其权限探查、修改和泄露隐私数据。

为了保障数据库系统的安全性,将敏感数据加密后存入数据库中是一种有效的方法[2-3]。目前数据库加密主要在操作系统层、数据库管理系统(DataBase Management System, DBMS)内核层和DBMS外层这三种不同层次上实现:

1)操作系统层加密的本质是加解密和密钥管理都交给操作系统和文件管理系统操作,对于数据库系统完全是透明的。在安全性方面,由于操作系统不能对数据库中的数据按照表结构或者字段结构进行区分,因此不能提供不同的加解密算法和加密密钥;在效率方面,需要对存储的所有数据进行加密和解密,会大大降低数据库的处理能力。

2)DBMS内核层的加密的优点是所有的操作都和数据库的内核进行交互,能够实现数据库所有的管理功能。但是也有很大的缺点,首先因为很多数据库的内核不是开源的,改写源代码需要有数据库供应商的支持;其次加解密的操作都要在数据库服务器端进行,会加重服务器的负载。

3)DBMS外层实现加密的优点是所有加解密的操作都是在数据库的外层,不需要对数据库进行定制开发,并且不会加重数据库服务器的负担,但是加密后会对数据库系统的某些功能造成影响,同时对整个系统的响应产生一定的影响。

现有的三种层次的数据加解密服务都存在着一定的缺陷,为了使用不同加密算法对数据进行加密,实现与数据库管理系统的松耦合并且不影响系统的速度,研究者提出了数据库中间件[4]。其中数据库加密中间件可以部署在数据库客户端-服务器这种分布式应用之间,采用请求-响应的同步方式进行通信。目前提出的数据库加密中间件系统可以提供透明的数据加解密服务和独立的密钥管理机制;但是存在着数据传输效率不高,对数据库客户端工具没有很好地支持,以及对密文数据库用户没有进行安全的管理等不足。

在现有的数据库中间件的基础上,本文设计并实现一种面向密文数据库的中间件系统。本中间件系统设计了基于MySQL通信协议的密文中间件架构,相较于其他加密中间件使用Java数据库连接(Java DataBase Connectivity, JDBC)连接数据库,这种连接方式提高了对密文数据的传输效率,支持不同的数据库客户端工具,并支持不同用户使用多个客户端工具对密文数据库进行操作。同时,本中间件系统拥有对用户的认证功能,对数据使用者身份进行认证访问权限控制来防止其进行越权操作,并通过使用动态认证的方案有效防止非法用户通过重放攻击进入密文数据库。

1 相关工作

由于社会信息化和网络化的发展导致产生的数据爆炸式增长[5],对数据的保护变得越来越重要,特别是防止敏感数据被窃取、破坏和泄露成为当务之急,因此数据以明文的形式存储在数据库中已经不能满足用户对隐私保护的需求[6]。针对这一需求,数据管理厂商在产品中提供相应的安全功能,Oracle和MS-SQL Server两家厂商提供的安全功能都是在DBMS中加载加密包,通过扩展存储过程来调用系统加解密模块、密钥管理模块、密文索引模块等实现数据库的加密操作,这种加密方式实现起来比较简单,适合于对加密要求不高的用户使用。

通过分析数据库管理系统厂商提供的安全方案可以发现,使用加载软件包实现对数据的加密存在着以下四个缺点:1)密钥和密文保存在同一个服务器中,一旦数据库被非法侵入时十分危险的,并且密钥更新成本过高;2)数据库管理员(DataBase Administrator, DBA)可以轻易接触到密钥,也就存在访问敏感数据的可能性;3)无法对密文直接进行操作;4)对数据库用户没有进行安全管理。面对越来越复杂的数据安全环境,DBMS提供的数据加解密机制已经不能有效地满足用户对信息安全的需求。

为了保障密钥的安全,文献[7]基于混沌理论生成随机密钥,使用中国剩余定理对密钥进行分配,可以很好地保障主密钥的安全和降低密钥更新的成本。文献[8]中使用了独立的密钥管理模块来负责产生、分发和更新密钥,可以有效保障密钥的安全。文献[9]提出一种模块化的动态密码策略生成器(Dynamic Password Policy Generator, DPPG),可以为策略生成不同的安全指标,从而应对各种安全攻击。

针对无法对密文数据库直接进行操作的困难,可搜索加密(searchable encryption)便应运而生,并得到了研究者广泛研究和发展[10-13]。用户将明文数据加密后存储在服务器中,当需要检索数据时,用户将关键字的检索凭证发给服务器,服务器根据凭证在密文数据上直接检索,将含有关键字的文件返回给用户,用户使用解密算法对文件进行解密。但是以上的研究解决的是针对文本文件的检索并且会加重用户主机的负担。为了解决密文数据库中结构化数据的搜索问题,麻省理工学院(Massachusetts Institute of Technology, MIT)的研究员提出了CryptDB系统[14-15],该系统通过使用洋葱加密模型实现对密文数据直接进行结构化查询语言(Structured Query Language, SQL)操作,但是在洋葱模型对外层解密后,内层的数据将长时间无法得到保护。文献[16]在CryptDB的基础上设计并实现了任务分割的数据库加密系统——MONOMI,通过使用客户端/服务器的结构,将任务分成客户端和服务器端两部分,分析SQL语句后决定任务的分配,缓解服务器端的压力。

针对密文数据用户管理困难的问题,文献[17]基于密文策略属性基加密(Ciphertext-Policy Attribute-Based Encryption, CP-ABE)算法设计出一种密文访问控制机制,减少用户接触密钥生成、密钥发布等任务,可以有效防止非法用户破坏数据。文献[18]提出高效安全的访问控制方案DAC-MACS (Data Access Control for Multi-Authority Cloud Storage),可以对多个数据使用者进行访问控制和用户撤销。文献[19]提出一种基于用户行为认证的访问控制模型,通过结合时态信息和环境信息对用户行为建模,对用户行为进行认证,有效提高网络数据的安全性。文献[20]针对密文数据存储中多个数据拥有者的问题,通过对用户和认证服务器交换的信息不断更新,实现用户的动态认证,可以有效防止非法用户通过重放攻击进入数据服务器。

2 密文数据库中间件系统体系结构设计

DBMS厂商提供的数据库安全服务在密钥管理方面存在着不足,而已有的密文数据库中间件方案无法做到高效的数据传输和安全的用户管理。在此基础上,本文设计并实现了面向密文数据库的中间件系统,可以对密文数据库进行可搜索加密、数据的高效安全传输和对用户的安全管理。

面向密文数据库的中间件系统的体系结构如图1所示。中间件系统基于MySQL通信协议进行通信,它运行在用户主机上,是连接数据库客户端和数据库服务器的软件。用户对数据库进行访问时,首先需要在中间件进行动态认证和权限分析,认证通过后使用数据库客户端对服务器进行访问操作。中间件解析用户发送的SQL语句,加密敏感数据后发送给服务器,数据库服务器返回的密文结果由中间件系统解密后传给客户端。

图1 中间件系统体系结构Fig. 1 Middleware system architecture

2.1 数据传输模块

本中间件系统使用MySQL通信协议与密文数据库进行通信,因此数据传输模块的功能包括:一是完成与数据库客户端和服务器的MySQL握手连接;二是获取客户端与服务器之间传输的数据报文,解析报文获得需要加解密的信息。

1)完成MySQL握手连接。

中间件系统首先会接收到数据库服务器发送的握手包,然后将握手包发送给数据库客户端工具,客户端工具接收到握手包后将用户名和密码发送给中间件系统,中间件验证登录认证信息,如果合法则连接客户端和服务器端,否则连接失败。

2)解析数据报文。

数据库报文解析和修改过程如图2所示,中间件系统获取到包含数据报文的字节流后将其分解成报文长度、序号和消息体这三部分。中间件系统首先将消息体部分转化为字符串,获取到的字符串就是标准的SQL语句,然后使用加解密模块对SQL语句进行加密改写。完成改写后将SQL字符串转化为Byte数组,计算其长度并对报文长度进行更新,最后再将修改后的报文长度、序号和新的消息体重新组合成标准格式的数据库报文。

图2 数据库报文解析和修改Fig. 2 Database message parsing and modification

2.2 SQL语句改写模块

SQL语句改写模块的功能是对SQL语句进行解析,改写模块获得由消息体解析的SQL语句后,首先判断查询类型,如果是create、select、insert、update、delete这5种用户输入的SQL语句,就对SQL语句中明文数据进行加密,并对列名进行修改。下面通过一个例子说明,BenefitsCostSharing是美国医疗保险市场数据集中的一张表。若用户输入语句:

select name from BenefitsCostSharing where PlanId=20;

则经过SQL语句改写模块输出语句:

select c1_DEA from BenefitsCostSharing where c2_DEA=′Daefkes==′;

其中:“PlanId=20”属于等值匹配的操作谓词,解析函数调用加解密模块对明文数字20使用等值加密模型进行加密,得到密文“Daefkes==”;并且将列名id改为c2_DEA,代表在密文上将使用等值加密模型的列;select from部分的列名也将被改写为c1_DEA,表示从等值加密模型中获取密文。

2.3 加解密模块

该模块中包含了中间件系统的加解密算法,提供了对敏感数据的加密和解密功能。为了实现对密文数据的搜索功能,本中间件系统使用的加解密算法是基于CryptDB的洋葱加密模型的可搜索加密算法,用户可以在密文数据上直接进行SQL查询。

如图3所示,可搜索加密算法使用了三种加密模型:等值加密模型、保序加密模型和同态加密加密模型。

1)等值加密模型。

该模型使用两种结构,首先使用确定加密算法(Deterministic Encryption Algorithm, DEA)对明文数据进行加密生成内层密文,内层密文可以直接进行等值比较;然后使用随机加密算法(Random Encryption Algorithm, REA)对内层的确定加密密文再次进行加密,形成两层加密的结构。当需要对密文进行等值比较时,中间件系统首先将外层密文解密,完成等值操作后再对内层密文进行随机加密。使用两层加密结构不仅能保证数据的安全性,还能实现密文数据的等值比较。

图3 中间件系统中的加密模型Fig. 3 Encryption model in middleware system

2)保序加密模型。

该模型使用单层加密模型,使用保序加密算法(Order Preserving Encryption Algorithm, OPEA)[21]对明文进行加密,可以在不对密文数据进行解密的情况下直接比较顺序。

3)同态加密模型

该模型采用单层加密,使用同态加密算法(Homomorphic Encryption Algorithm, HEA)[22]进行加密,这种加密算法的特征是密文的加乘运算结果解密后与在明文上直接进行加乘运算结果相同,可以直接在密文上完成数据库操作中的求和以及求平均数操作。

2.4 用户管理模块

该模块主要实现三个功能,分别是数据使用者的权限判断、身份动态认证和用户身份的撤销与更新。为了保证对数据使用者的有效管理,中间件系统需要在数据库中创建用户权限表和用户认证表。

1)用户权限判断功能。

用户权限判断主要针对的是首次请求访问密文数据库的数据使用者,中间件系统进行用户权限判断之前首先要获取数据使用者的n个身份属性atti(0

2)用户动态认证功能。

如图4所示,用户动态认证包括以下6个步骤:

①数据使用者对密文数据库进行第i+1(i≥1)次访问,通过Eni=(ci⊕ti)ki对认证信息进行加密,将加密的认证信息Eni传递给中间件。其中:ki为加密密钥,ci表示数据使用者拥有的认证信息,ti表示数据使用者认证的次数,⊕表示异或操作。

②数据使用者通过ki+1=ki⊕H(ci⊕ti)对密钥进行更新,保存新的密钥ki+1,其中H(ci⊕ti)表示对ci⊕ti的哈希函数。

③中间件通过Dei=D(ki,Eni)对Eni进行解密,将Dei与用户认证表中的认证信息进行比较,如果不相同则提示数据使用者认证失败。

④中间件通过ki+1=ki⊕H(ci⊕ti+1)更新密钥,以及ci+1=H(ci⊕ti)生成新的认证信息ci+1,并对用户认证表中的信息进行更新。

⑤使用新密钥ki+1对ci+1进行加密,得到新的加密认证信息Eni+1=(ci+1⊕ti+1)ki+1,中间件将新的加密认证信息发送给数据使用者。

⑥数据使用者使用密钥ki+1对加密的认证信息Eni+1解密,保存新的认证信息ci+1。

数据使用者通过认证后,中间件系统为其在密文数据库中创建临时用户,临时用户的用户名为数据使用者的用户名userName,密码为新的认证信息ci+1,数据使用者通过用户名和密码进入密文数据库。

图4 用户动态认证流程Fig. 4 Flow chart of user dynamic authentication

3)数据使用者撤销与更新功能。

由于数据使用者在使用密文数据库的过程中并没有接触到密文数据库的任何密钥,所以在撤销和更新数据使用者时不需要对密文数据密钥进行大量的更新。当某一数据使用者被撤销或更新时,中间件系统只需要修改用户属性表和用户认证表中的信息。

2.5 密钥管理模块

密钥管理模块的功能包括:一是根据数据拥有者提供的信息生成主密钥,主密钥不仅作为等值加密模型的工作密钥,还用于用户认证的功能;二是对于加解密模型中保序和同态加密,在创建数据表的时候针对数值型的列产生相应的列密钥。面向密文数据库系统采用两种密钥管理方案。

1)数据拥有者主密钥产生方案。主密钥在数据拥有者创建数据表的时候生成,密钥产生方案为:

Kdom,c=KeyGen(DataOwnerMessagem, ColumnNamec)

其中:m是数据拥有者提供的信息;c是列名。密钥管理器通过用户提供的信息和列名动态生成一个工作密钥,用于等值加密算法。

2)对于保序加密和同态加密模型,密钥通过主密钥加密后成为二级密钥存储在数据库独立的表中,在中间件对数据进行加解密前,会从密钥表中获取密钥。

生成密钥后,将密钥保存在独立的密钥数据库中,以便在对数据进行加解密时使用。

3 系统实现及性能分析

3.1 系统实现

该系统编程语言采用Java,数据库为MySQL。

开发环境如下:1)硬件:处理器为Intel Core i5-5257U,内存为8 GB。2)软件:操作系统为macOS,Java开发环境为JDK1.8,MySQL版本为5.7。

实验硬件环境为:CPU为Intel Xeon E3,Memory为16 GB 1 333 MHz Dual Ranked;Disk为1 TB 3.5-inch 7.2 K RPM SATA II Hard Drive。

实验平台为:Ubuntu-12.04。

3.2 性能测试与分析

3.2.1 测试方案

实验使用的数据集是美国医疗保险市场数据,首先运行中间件系统,创建三张数据库表:第一张表T1包含10个int类型字段,第二张表T2包含10个varchar字段,第三张表T3包含5个int型字段、5个varchar字段。从美国医疗保险市场数据中选取相应数据改写生成SQL语句,加密存储完成后对数据进行操作并记录时间。测试的对象是分别使用MySQL通信协议和Java数据库连接(Java DataBase Connectivity, JDBC)的中间件系统。

3.2.2 测试结果以及分析

图5描述了中间件使用MySQL通信协议对三个不同类型数据库表执行insert语句的时间消耗。由于需要对int类型的数据进行保序和同态加密,所以10个int类型字段的表插入速度最慢,对varchar类型数据只要进行确定加密,所以执行完成时间是最少的,而混合着int类型和varchar类型的表插入速度在前两者之间。

图5 不同类型数据表执行insert语句时间消耗对比Fig. 5 Time consumption comparison for different types of dataTables to execute insert statement

数据库表中有5个int类型字段和varchar类型字段的情况下,对两种连接方式执行insert语句的时间消耗对比如图6所示。

图6 两种方式连接数据库时执行insert语句时间消耗对比Fig. 6 Time consumption comparison of executing insert statement with two ways of connecting to the database

图7描述了当插入数据量一定时,相比使用JDBC连接数据库方式,随着数据表中int类型的减少,使用MySQL通信协议连接的中间件完成操作消耗时间越少,且随着int类型数量的减小,两种连接方式消耗时间差距越来越大。

两种连接方式分别对数据库执行1 000条select、join等语句的时间对比如图8所示。由图8可知,相比于JDBC方式,使用MySQL通信协议连接在对数据库的操作时间消耗上有着较大的效率优势。

图7 insert语句操作中int类型数量占比对测试对象时间的影响Fig. 7 Influence of number of int types in insert statement operation on time of test object

图8 两种连接数据库方式执行SQL语句消耗时间对比Fig. 8 Time consumption comparison of executing SQL statement with two ways of connecting to the database

测试结果表明,使用MySQL通信协议连接数据库的中间件系统较使用JDBC连接方式而言,在对密文数据库进行操作时有着较为明显的速度优势,同时随着数据库表中数值类型数量的增多优势更加明显。

3.3 安全性分析

数据库面临的威胁一般来自这几个角色:数据库管理员、数据库合法用户,以及试图窃取数据库存储介质的非法用户。

3.3.1 数据库管理员

数据库管理员作为数据库系统的管理者,拥有访问其管理的数据的最高权限。数据经过中间件加密后存储在密文数据库中,查看这些信息需要解密操作。由于密钥和敏感数据存储在不同的数据库中,密文数据库管理员无法获得密钥对敏感数据进行解密。对于管理密钥数据库的管理员,密钥都是经过主密钥加密后以二级密钥的形式存储的,因此数据库管理员即使获得了密钥也无法对其解密。

3.3.2 数据库合法用户

由于中间件对用户权限进行了限制,合法用户只能访问密文数据库中在其权限范围之内的数据,即使他突破了访问限制,由于没有密钥,他也无法查看其他敏感数据。

3.3.3 试图窃取数据库存储介质的非法用户

非法用户想要使用中间件系统,首先需要进行身份认证。由于中间件系统使用了动态认证机制,即使非法用户获得了认证密码,每次合法用户认证完成后都会更新认证密码,并且能使用认证密码的数据库临时账户也会被销毁。如果非法用户想直接窃取数据,他必须成功同时窃取到密文数据库和密钥服务器中的存储介质,即使他窃取到了密钥,获得的也是二级密钥,无法对密文数据进行解密。而且在确定加密中加入了随机加密策略,因此除非非法用户使用中间件系统对数据进行解密,否则无法查看到敏感数据。

综上分析,经过中间件加密后的数据库可以有效地防止来自数据库内部和外部的攻击,并且对合法用户的权限也能有很好的限制。

4 结束

通过对明文数据库进行加密使其变为密文数据库是保证数据机密性的重要手段。本文提出了一种面向密文数据库的中间件系统的设计方案,通过在安全主机上部署中间件,可以实现密文数据库的可搜索加密操作。相较于其他的数据库中间件系统,该方案的特点在于:使用MySQL通信协议连接数据库客户端和服务器端,保证数据高效安全传输,并对数据库客户端工具有着更好的支持;动态用户认证机制可以有效防止非法用户的攻击;实现了密文数据库的可搜索操作。实验结果表明,所提中间件系统可以高效地进行数据加解密操作,表明该系统是有效的、可行的。

猜你喜欢

中间件密文密钥
一种支持动态更新的可排名密文搜索方案
幻中邂逅之金色密钥
幻中邂逅之金色密钥
群智感知网络环境下的一种高效安全数据聚合方案*
基于模糊数学的通信网络密文信息差错恢复
支持多跳的多策略属性基全同态短密文加密方案
密码系统中密钥的状态与保护*
我国自主可控中间件发展研究
创建KDS根密钥
以实力证明 用事实说话