一种基于SGX的通用数据库的数据保护系统及方法与流程

文档序号:13282784阅读:2903来源:国知局
一种基于SGX的通用数据库的数据保护系统及方法与流程

本发明属于数据库技术领域,尤其涉及一种基于sgx的通用数据库的数据保护方法,保护了多应用程序场景下应用程序的数据机密性,及数据完整性,保护了应用程序数据不受外部攻击者、恶意数据库管理员和恶意应用程序的恶意攻击和篡改。对于不支持用户隔离和访问控制的轻量级数据库,本发明依然可实现对数据机密性和数据完整性的保护。



背景技术:

数据库是现代计算系统中的重要组成部分。特别是处在恶意软件和网络攻击猖獗的时代,数据库安全成为需要解决的一个重要问题。数据库的存储安全问题,敏感数据的防窃取和防篡改问题越来越引起人们的重视。业内简单使用对称加密方案加密数据表,在解决方案中,数据处理仍然需要以明文形式执行,使数据裸露在外。在密文中实现数据操作,利用多重加密方案,提出的系统几乎不能实现数据的密文操作,所以不能提供严格的安全保证,通常可能会被某些特定的攻击者所影响。例如在cryptdb这个公开的项目中,通过组合不同的加密方案来保证mysql数据的机密性,这些加密方案包括确定性加密(det),订单保留加密(ope),部分同态加密(phe)等。特权保留加密方案(例如det和ope)为攻击者提供了一个线索,使他们能够将加密数据恢复为明文,甚至已经有人对cryptdb中加密的数据进行了明文恢复。

综上所述,现有技术存在的问题是:目前保证安全的加密方案存在以下问题:不能提供严格的安全保护;不支持原有的很多计算功能;单纯基于密码学的方法性能较差。



技术实现要素:

针对现有技术存在的问题,本发明提供了一种基于sgx的通用数据库的数据保护系统及方法。

本发明是这样实现的,一种基于sgx的通用数据库的数据保护方法,所述基于sgx的通用数据库的数据保护方法包括:初始化阶段和执行阶段;

所述初始化阶段具体包括:

步骤一,远程认证及密钥共享;

步骤二,应用程序将向数据库引擎发送数据密钥及其id:idi;并使用共享密钥sk进行加密,sk是步骤一中sgx远程认证(基于dh交换的协议)后生成的共享密钥,加密方法要求使用sk进行的对称加密即可;

步骤三,数据库引擎在接收到idi和ki后将其进行记录。

所述执行阶段包括:

步骤一,应用i使用ki计算即将发送的消息eki(sqlstmts)||idi的消息验证码maci(使用主流mac计算方法均可)。

步骤二,应用i将消息eki(sqlstmts)||idi以及maci发送到数据库引擎;

步骤三,在数据库引擎中,它将根据接收的idi查找秘钥ki;

步骤四,数据库引擎利用查找到的ki计算发送来的消息的消息验证码macd,与接收到的maci进行对比,以验证消息的完整性,若两者相同则消息在发送途中未被篡改,消息完整。

步骤五,数据库引擎使用ki解密数据库请求语句以及请求语句所请求使用的数据库,根据数据库请求语句使用ki计算数据表t的macti,读取数据表中该表拥有者j在建表时或修改表时所记录的使用其秘钥kj计算的mactj,对比macti和mactj,若两者相同则数据表未被攻击者所篡改,且该应用程序i拥有读取、修改的该表t的权利;

步骤六,数据库请求语句在数据库enclave中的以明文执行;

步骤七,其执行结果将用ki加密并发送回应用程序,数据库表的任何更新也将以加密格式写回数据库中进行存储并且重新计算数据表的mac值写回数据库文件。

进一步,所述初始化阶段的步骤一具体包括:应用程序使用数据库服务,选择对称密钥作为其数据密钥;执行远程认证程序验证数据库引擎的完整性;远程认证验证数据库引擎的完整性,确保应用程序连接的数据库引擎未被修改;远程认证在应用程序i和数据库enclave之间使用共享密钥;数据在双方之间用sk进行加密传输。

本发明的另一目的在于提供一种所述基于sgx的通用数据库的数据保护方法的基于sgx的通用数据库的数据保护系统,所述基于sgx的通用数据库的数据保护系统包括:

初始化阶段模块,用于实现远程认证及密钥共享,向数据库引擎发送数据密钥及其id:idi,在接收到idi和ki后将进行记录,根据应用程序的id选择正确的数据密钥;

执行阶段模块,用于实现需要执行的每个数据库请求语句,使用数据密钥ki进行加密,应用i使用ki计算即将发送的消息eki(sqlstmts)||idi的消息验证码mac;应用i将消息eki(sqlstmts)||idi以及maci发送到数据库引擎;在数据库引擎中,它将根据接收的idi查找秘钥ki;数据库引擎验证所发消息的完整性,利用查找到的ki计算发送来的消息的消息验证码macd,与接收到的maci进行对比,以验证消息的完整性,若两者相同则消息在发送途中未被篡改,消息完整;使用数据密钥ki对消息进行解密;数据库引擎根据消息验证数据库文件的完整性,使用ki解密请求语句所请求使用的数据库,根据数据库请求语句使用ki计算数据表t的macti,读取数据表中该表拥有者j在建表时或修改表时所记录的使用其秘钥kj计算的mactj,对比macti和mactj,若两者相同则数据表未被攻击者所篡改,且该应用i拥有读取、修改的该表t的权利;数据库请求语句在数据库enclave中的以明文执行;其执行结果将用ki加密,并计算结果的mac值后一同发送回应用程序,数据库表的任何更新也将以加密格式写回数据库中进行存储并且重新计算数据表的mac值写回数据库文件。

本发明的另一目的在于提供一种上述基于sgx的通用数据库的数据保护方法的数据库,包括数据库引擎为sqlite。

本发明的另一目的在于提供一种上述基于sgx的通用数据库的数据保护方法,其特征在于,数据库引擎与应用模块分布于同一台主机的本地模式。

本发明的另一目的在于提供一种上述基于sgx的通用数据库的数据保护方法,其特征在于,数据库引擎与应用模块分布于不同主机的远程模式。

本发明的优点及积极效果为:本发明保护了多应用程序场景下应用程序的数据机密性,及数据完整性,保护了应用程序数据不受外部攻击者、恶意数据库管理员和恶意应用程序的恶意攻击和篡改。图6显示了cryptsqlite与两个基准相比的执行时间,这两个基准分别是支持加密的sqlite和不支持加密的sqlite,cryptsqlite的执行时间均高于这两个基准;与不支持加密的sqlite相比,cryptsqlite的执行时间为其2.40到15.36倍;与支持加密的sqlite相比,cryptsqlite的执行时间较长,为其1.58到4.54倍,平均性能开销为131%。图7描述了在cryptsqlite查询中花费的时间的详细组成,额外的性能开销包括cryptsqlite内的加密和解密操作以及其他与sgx相关的时间开销,如ecall/ocall调用开销,图7显示了加密和解密操作在执行时间中占很大比例。cryptsqlite为未优化的实例,进一步的优化将会提高其性能。

附图说明

图1是本发明实施例提供的基于sgx的通用数据库的数据保护系统结构示意图;

图2是本发明实施例提供的基于sgx的通用数据库的数据保护方法初始化阶段流程图。

图3是本发明实施例提供的基于sgx的通用数据库的数据保护方法执行阶段流程图。

图4是本发明实施例提供的使用sqlite为具体数据库引擎实现的原型系统示意图。

图5是本发明实施例提供的cryptsqlite与两个基准相比的执行时间示意图。

图6是本发明实施例提供的cryptsqlite的tpc-h语句执行时间示意图。

图7是本发明实施例提供的cryptsqlite查询中花费的时间细目示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

下面结合附图对本发明的应用原理作详细的描述。

如图1所示,本发明实施例提供的基于sgx的通用数据库的数据保护系统包括:初始化阶段模块1和执行阶段模块2。

初始化阶段模块1,用于实现远程认证及密钥共享,向数据库引擎发送数据密钥及其id:idi,在接收到idi和ki后将进行记录,根据应用程序的id选择正确的数据密钥。

执行阶段模块2,用于实现需要执行的每个数据库请求语句,使用数据密钥ki进行加密,应用i使用ki计算即将发送的消息eki(sqlstmts)||idi的消息验证码maci;应用i将消息eki(sqlstmts)||idi以及maci发送到数据库引擎;在数据库引擎中,它将根据接收的idi查找秘钥ki;数据库引擎验证所发消息的完整性,利用查找到的ki计算发送来的消息的消息验证码macd,与接收到的maci进行对比,以验证消息的完整性,若两者相同则消息在发送途中未被篡改,消息完整;使用数据密钥ki对消息进行解密;数据库引擎根据消息验证数据库文件的完整性,使用ki解密请求语句所请求使用的数据库,根据数据库请求语句使用ki计算数据表t的macti,读取数据表中该表拥有者j在建表时或修改表时所记录的使用其秘钥kj计算的mactj,对比macti和mactj,若两者相同则数据表未被攻击者所篡改,且该应用i拥有读取、修改的该表t的权利;数据库请求语句在数据库enclave中的以明文执行;其执行结果将用ki加密,并计算结果的mac值后一同发送回应用程序,数据库表的任何更新也将以加密格式写回数据库中进行存储并且重新计算数据表的mac值写回数据库文件。

如图2所示,本发明实施例提供的基于sgx的通用数据库的数据保护方法初始化阶段发放具体包括:

步骤1,远程认证及密钥共享;

步骤2,应用程序将向数据库引擎发送数据密钥及其id:idi;并使用共享密钥sk进行加密;

步骤3,数据库引擎在接收到idi和ki后将进行记录,根据应用程序的id选择正确的数据密钥;

步骤2具体包括:假设应用程序希望使用数据库服务,将选择对称密钥作为其数据密钥;执行远程认证程序来验证数据库引擎的完整性;远程认证是sgx定义的标准协议,远程认证的目的是验证数据库引擎的完整性,确保应用程序连接的数据库引擎未被修改;远程认证最终将在应用程序i和数据库enclave之间使用共享密钥(sk);数据可以在双方之间用sk进行加密传输。

在初始化阶段之后,确保了应用程序i连接到经过验证的数据库引擎。并且确定了使用数据库引擎和应用程序i进行协商的数据密钥ki来加密数据、数据库请求语句和请求的执行结果。

如图3所示,本发明实施例提供的基于sgx的通用数据库的数据保护方法执行阶段包括:

步骤1,应用i对数据引擎发送数据库请求;

步骤2,在数据库引擎中,它将根据接收的idi查找秘钥ki;

步骤3,数据库引擎验证所发消息的完整性;

步骤4,使用数据密钥ki对消息进行解密;

步骤5,数据库引擎根据消息验证数据库文件的完整性;

步骤6,数据库请求语句在数据库enclave中的以明文执行;

步骤7,其执行结果将用ki加密并发送回应用程序,数据库表的任何更新也将以加密格式写回数据库中进行存储,并更新其mac值。

所述执行阶段具体包括:

步骤1,应用i使用ki计算即将发送的消息eki(sqlstmts)||idi的消息验证码mac(使用主流mac计算方法均可)。

步骤2,应用i将消息eki(sqlstmts)||idi以及maci发送到数据库引擎;

步骤3,在数据库引擎中,它将根据接收的idi查找秘钥ki;

步骤4,数据库引擎利用查找到的ki计算发送来的消息的消息验证码macd,与接收到的maci进行对比,以验证消息的完整性,若两者相同则消息在发送途中未被篡改,消息完整。

步骤5,数据库引擎使用ki解密数据库请求语句以及请求语句所请求使用的数据库,根据数据库请求语句使用ki计算数据表t的macti,读取数据表中该表拥有者j在建表时或修改表时所记录的使用其秘钥kj计算的mactj,对比macti和mactj,若两者相同则数据表未被攻击者所篡改,且该应用程序i拥有读取、修改的该表t的权利;

步骤6,数据库请求语句在数据库enclave中的以明文执行;

步骤7,其执行结果将用ki加密并发送回应用程序,数据库表的任何更新也将以加密格式写回数据库中进行存储,并且重新计算数据表的mac值写回数据库文件。

如图4所示,本发明实施例使用sqlite为具体数据库引擎实现的原型系统并且使用远程模型,即数据库引擎和应用在不同主机上,使用sqlite3.8.4开发了cryptsqlite的原型系统。cryptsqlite采用英特尔sgxsdk1.7实现,主机操作系统是linuxubuntu14.04;cryptsqlite分为两个组件:可信sqliteenclave和不可信的sqlite代理;通过使用ecall和ocall实现两个组件之间的内部通信;在sqlite代理中,请求处理程序用于接收从应用程序发送的sql请求;远程认证模块作为代理在初始化阶段即完成sgx远程认证。sqlite引擎在sqliteenclave中,安全地执行sql语句;密封钥匙用于保护应用程序的数据密钥。远程认证的核心功能是在应用模块中认证服务器通信进行远程认证和提供数据密钥。

接口实现:鉴于sqlite架构的高度模块化设计,采用sqlite与外部环境之间的两种边界来处理由应用程序发出的sql请求的sql接口、os接口。使用os调用来支持查询,例如将记录存储到内存中。基于sgx编程模型,为了使sqlite适应于enclave,两种类型的接口应以ecall和ocall形式的边缘例程来实现;边缘例程的概念用于桥接不受信任的sqlite代理和可信sqliteenclave;具体来说,ecall作为可信任代理来满足不受信任区域的调用,使其调用enclave中的某些功能,而ocall作为代理来调用enclave中不可信区域的功能。

sql接口和os接口的实现细节如下:

sql接口。考虑到安全性,本发明仅暴露了通过ecalls的包装界面sqlite3exec。它将sql语句(创建,查询,更新,删除等)传递给sqlite引擎,并将结果返回给请求处理程序。

操作系统界面。本发明在os界面中实现了ocall功能来委托操作系统调用。本发明实施了29个委托的ocall功能来委托29个操作系统的调用。

数据库加密:数据库加密是以页的粒度来执行的,页是表中存储记录的基本结构。属于不同应用程序的表使用特定于应用程序的密钥进行加密。具体来说,本发明实现了sqlite3codecattach中使用的钩子函数(hookfunction),将编解码功能附加到加密/解密表页面。编解码器功能使用sgxsdk库sgxtcrypto实现。对于每一页,本发明使用128位ctr模式的aes加密方案进行加密/解密。

密钥:应用数据密钥{ki|1≦i≦n}由运行sqlite的enclave的密封秘钥保护。在初始化阶段,由sqliteenclave和应用程序i协商的应用程序数据密钥ki,在插入数据库之前由sgx指令egetkey提供的密钥加密。在执行应用程序发出的sql请求之前,通过使用密封密钥对数据密钥ki进行解密来得到用作应用表的透明解密/加密的当前密钥kcur。只有运行特定sqlite的扩展才能访问密封密钥,所以数据密钥被安全地保护。

将对使用sqlite为具体数据库引擎实现的本发明的原型系统cryptsqlite的性能和sqlite本身的性能进行对比分析。

下面结合实验对本发明的应用效果作详细的描述。

本发明建立符合图5的实验环境。并使用数据库基准测试tpc-h来测试其的性能。

1、环境设置

本发明设置了符合图5的实验环境。具体来说,本发明使用hp台式机作为应用程序主机,一台lenovothinkpadt460笔记本电脑作为数据库主机。数据库主机和应用主机与100/1000m以太网相连。应用主机配备了4核3.2ghzintelcorei5-6500cpu和4gb内存。数据库主机配有4核2.5ghzinteli7-6500ucpu,支持sgx版本1和8gb内存。两台主机的操作系统都是linuxubuntu14.04。基于sqlite3.8.4开发,使用英特尔sgxsdk1.7。

2、评估

本发明使用tpc-h来测试该实现案例的性能。通过将比例因子设置为1并从tpc-h基准测试的22个查询中选出16个来进行测试,数据库大小1gb。在这次测试中,本发明预先将加密数据上传到数据库主机。这些查询从应用程序主机发送到数据库主机。完成查询后,查询结果将发送回应用程序。根据执行阶段设计,查询语句和语句执行结果分别为sql请求和sql返回结果。

本发明使用sqlite3.8.4的两个设置分别和该发明所实现的原型系统进行了性能测试对比。第一个是不支持数据加密的原始sqlite,因此不提供任何数据保护。第二个准是启用数据加密的原始sqlite,然而,在执行过程中,仍然需要在主存储器上解密数据,从而将应用程序数据暴露给了攻击者。图6显示了cryptsqlite与两个基准相比的执行时间。结果表明,cryptsqlite的执行时间高于两个基线。与没有加密的原始sqlite相比,cryptsqlite的执行时间要高于2.40和15.36之间的因子。与原来的sqlite加密相比,cryptsqlite的执行时间较高,在1.58和4.54之间。与加密的原始sqlite相比,cryptsqlite的平均性能开销为131%。

图7描述了在cryptsqlite查询中花费的时间细目。可以看出,额外的性能开销包括cryptsqlite内的加密和解密操作以及其他与sgx相关的成本,如ecall/ocall调用开销。该图显示加密和解密操作在执行时间中占很大比例。

下面结合安全性分析对本发明的应用原理作进一步的描述。

本发明的数据库加密系统的目标是确保攻击者无法检索表数据的明文、数据库查询请求语句以及其他应用程序的数据库查询请求的返回结果。在本发明的安全模型中,定义了三种攻击者,即外部攻击者、恶意数据库管理员和恶意应用程序。

(1)如果外部攻击者想要获取或篡改明文表数据,数据库查询请求和受信任的应用程序i的数据库查询结果,则她需要打破数据库enclave或获取数据密钥ki。由于本发明假设该数据库加密引擎不包含已知的漏洞,sgxenclave可确保攻击者无法访问数据库enclave,所以攻击者无法观察或篡改数据库引擎中执行的计算。数据密钥ki仅在数据库引擎和应用程序i中显示。因为本发明假设这两个组件都是可信的,所以ki不会被暴露给攻击者。

(2)如果外部攻击者对表数据或者传输消息进行错改,这时本发明需要进行完整性验证。在初始阶段进行的远程认证可以保证数据源的有效性和可信性,在执行阶段的数据加解密保证数据被窃听者获取也能防止窃听者得知数据的内容,要做到数据的安全传输,还需要确定收到的数据没有经过窃听者的篡改,这就涉及到数据的完整性校验。

(3)想要校验消息的完整性,引入:消息验证码。消息验证码是一种与秘钥相关的单项散列函数。密文的收发双方在初始化阶段共享一个秘钥。密文发送者(应用程序发送sql语句或者数据库引擎enclave发送sql执行结果)将密文的mac值随密文一起发送,密文接收者通过共享秘钥计算收到密文的mac值,这样就可以对收到的密文做完整性校验。当篡改者篡改密文后,没有共享秘钥,就无法计算出篡改后的密文的mac值。gmac就是利用伽罗华域(galoisfield,gf,有限域)乘法运算来计算消息的mac值。

(4)sgx所提供的两个加解密服务分别为aes-ctr和aes-gcm两个算法,这两种算法都属于对称加密算法,其中gcm可以提供对消息的加密和完整性校验,gcm中的g就是指gmac,c就是指ctr,另外,它还可以提供附加消息的完整性校验。

(5)恶意数据库管理员只能对加密的应用程序数据进行操作,但不知道解密密钥(即数据密钥)。在没有解密密钥的情况下从密文中恢复明文是计算上不可行的。因此,恶意数据库管理员无法获取应用程序数据的明文。恶意应用程序m可能希望访问其他应用程序i的数据。

(6)如果m执行重播攻击,即记录i发出的sql请求,然后发送到数据库引擎m那么他将获得请求结果。即使m获得请求结果,没有ki,m仍然不能获得查询结果的明文。

综上所述,本发明数据库加密系统可以保护每个应用程序的数据机密性。该系统将硬件支持与加密方案相结合,具体来说,硬件上本发明采用第六代英特尔cpu引入的新功能,英特尔软件防护扩展(sgx),以确保在安全环境下执行明文计算。加密方案上,本发明利用对称加密来保护硬盘上存储的数据。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1