(南湖实验室大数据研究中心,嘉兴 314000)
0 引言
在数字时代,数据已经成为了基本生产要素,因此数据安全共享必将是未来发展趋势之一[1]。数据的整个生命周期包含存储、流转、使用三个状态。在敏感数据存储、流转方面,业界已经有着成熟完善的技术支撑,例如各类加密算法(对称加密、非对称加密、哈希算法等)、传输层安全性协议等。而敏感数据在使用层大多以明文形式存在,极易遭受内存层面的攻击。如何对敏感数据安全处理成了待解决的难题。隐私计算的兴起,为这个难题提供了一个解决方法。
隐私计算中主流技术有联邦学习、多方安全计算和可信执行环境(Trusted Execution Environment,TEE)[2-3]。其中,联邦学习与多方安全计算基于密码学进行软件级的保护,分别侧重于多方数据的联合计算、机器学习的模型训练等。而TEE为芯片层级的隐私计算技术,由芯片直接形成可信的执行环境来保护数据不被泄露。目前,主流的TEE解决方案包括基于X86指令集架构的Intel SGX和基于ARM指令集架构的TrustZone[4]。Intel SGX[5]的出现推动了基于芯片级别隐私计算的发展,与传统的TEE不同,Intel SGX支持远程认证技术,使得在远端运行应用的执行环境的可信性可以验证,而不只局限于单机黑盒。得益于基于芯片的硬件特性,在应用程序层面与底层逻辑解耦,应用程序无需修改自身代码,直接调用底层逻辑,可在不改变已部署应用的原有架构的前提下,实现隐私计算来保护数据。Intel SGX比较多地运用在保护Linux容器[6]和云[7]。RSIC-V是基于精简指令集(RSIC)[8]原则的开源指令集架构(ISA)。国内的许多家厂商也开发了基于国产芯片的安全扩展,目前处于领先地位的是海光和飞腾。海光基于海光CPU推出了安全虚拟技术CSV[9],飞腾基于飞腾CPU推出了飞腾PSPA(Phytium Security Platform Architecture)。
2022年,YANNICK等[10]为了使Fabric运行在安全的执行环境,结合Intel SGX,提出了E-Fabric。E-Fabric拥有更好的安全保障,增加了8%的延时,降低了4%的吞吐,整个网络的性能下降了6%。2019年,王冠等[11]提出了基于Intel SGX的Hadoop KMS安全增强方案,安全增强带来的性能损耗为10.08%。工业物联网也在快速向Intel SGX靠拢。2021年,王冠等[12]提出了基于Intel SGX的Kerberos安全增强方案,保证密钥保存和运行在Enclave中。2021年,刘忻等[13]提出了基于Intel SGX的IIoT身份认证协议。2020年,罗杭光等[14]提出的无线传感器网络中实时数据接入的轻量级三因素方案相比,性能方面有小的损失,但是有更加强大和有效的安全性。
目前,数据安全的问题日益突出,特别是数据库的安全。数据库是当今社会中重要的存储软件之一。语义安全加密可以为存储的数据和传输的数据提供强大而且有效的保护。但是,数据在进行处理的时候,是以明文的方式存储在内存中。2016年,Poddar R等[15]基于语义安全加密提出了Arx的数据库框架,使用了ArxRange和ArxEq。ArxRange实现范围查询和限制顺序查询;ArxEq实现等式查询。CryptDB[16]、Monomi[17]和Seabed[18]使用属性保护的方式进行加密,在加密的情况下能够对数据进行查询处理。微软的Always Encrypted[19]和谷歌的Encrypted Bigque Client[20]都使用了这种加密方式。但是这种加密的方式会产生信息泄露的问题[21-23]。于是,Christian、Priebe等[24]基于Intel SGX实现了新的数据库EnclaveDB,有较低的开销(TPC-C高达40%)却有强大的安全性。
本文将芯片级的隐私计算和数据库结合,保证数据库拥有安全运行环境。数据库增加30%左右开销的同时,保证了数据库的安全。本文的主要贡献表现在以下两个方面。
(1)提出了一种基于隐私计算的数据库全生命周期保护方法,在Intel SGX的Enclave安全容器中进行敏感操作,不依靠第三方服务。
(2)实现Intel SGX兼容MySQL和SQLCipher。MySQL在Intel SGX的环境中运行;SQLCipher在Intel SGX安全环境中进行加解密和数据库操作。
1 背景知识
1.1 海光CSV
海光CSV是基于海光CPU自主研发的安全虚拟化技术,并且采用了国密算法实现。龙蜥8.4操作系统已经支持了CSV。CSV虚拟机通过海光CPU对内存进行加解密。CSV虚拟机具有以下几个特点。
(1)计算资源的隔离。对于每一台CSV虚拟机,都有各自独立的内存和密钥。同时使用海光芯片中的安全管理模块,保证CSV虚拟机之间资源互不干涉。
(2)启动过程可度量。 海光CPU的安全模块能将虚拟文件和度量值进行对比,保证虚拟文件的安全,防止篡改。
(3)虚拟机身份的认可。每一颗海光CPU中都有唯一的芯片密钥,在制作芯片的时候已经烧录了。用户可以使用芯片密钥对芯片和CSV虚拟机的合法性进行评估。
1.2 飞腾PSPA
飞腾公司推出了基于飞腾芯片的飞腾PSPA处理器安全架构标准。飞腾PSPA标准分为10个模块:密码加速引擎;密钥管理;可信启动;可信执行环境;安全存储;固件管理;量产注入;生命周期管理;抗物理攻击;硬件漏洞免疫,涉及到了硬件软件,支持各种算法运用,各方面的安全都能进行防护。
1.3 Intel SGX
Intel(R) Software Guard Extensions(Intel(R) SGX)是Intel架构新的扩展, 在原有架构上增加了一组新的指令集和内存访问机制。Intel SGX使用扩展的指令,调用应用程序,实现一个名为Enclave的容器。Enclave容器所在的内存空间的地址是被保护的。整个被保护的地址空间是由Intel芯片进行管理,操作系统没有权限访问这些地址空间。所以,Enclave容器能够为数据和代码提供一个安全的环境,即使是超级管理员也无法进行访问。Enclave容器在保护数据和代码机密性的同时,也会进行度量操作,保证应用完整性。Intel SGX关键技术如下。
(1)认证
Intel SGX在进行初始化的时候,会自动启动两个由Intel自己编写的Enclave,即SGX Launch和SGX Quoting Enclave。SGX Launch和SGX Quoting Enclave主要通过使用EINIT 和 EREPORT两个指令对在同一个环境下其他Enclave容器的身份认证。Enclave容器之间可以通过本地认证和远程认证确认信任的关系。在同一台物理机上,使用本地认证;在不同的物理机上,使用远程认证。
一个Enclave通过图1中所示的EREPORT指令向另一个目标Enclave证明其身份。SGX指令生成一个认证报告(REPORT),该报告加密地将Enclave提供的信息与Enclave基于度量和基于证书的身份绑定。加密绑定是通过一个MAC标签来完成的,该标签使用的对称密钥只在目标飞地和SGX实现之间共享。EREPORT指令从当前Enclave的SECS中读取当前身份信息,并使用它来填充报表结构。
图1 DCAP认证形式
就认证本身而言,远程证明仅是向用户保证远程执行的Enclave是可信的。除了这种保证之外,用户还需要创建一个安全通道,以便与远程 Enclave进行可信通信,用于透明地将密钥或其他敏感信息提供给远端的Enclave。Intel SGX中的远程认证有两种形式,分别为EPID和DCAP。EPID适用于客户端机器,而DCAP适用于数据中心环境。EPID大多数的活动部件都是固定的,与Intel提供的服务强相关,而DCAP是一种在不依赖Intel基础架构的情况下启动Enclave的方法,且适用于服务器环境。
如图1所示,第一步在Enclave中的应用程序打开文件/dev/attestation/user_report_data来写入;第二步后台软件调用硬件指令EREPORT来生成SGX报告;第三步在生成SGX报告后,应用程序读取另一个特殊文件/dev/attestation/quote;第四步,后台软件与引用飞地进行通信来接受SGX引用;第五步,引用飞地与供应认证飞地(Provisioning Certification Enclave,PCE)通信;第六步,PCE使用另一个称为Intel 供应认证服务(PCS)的Intel服务来获取身份证明的信息:SGX机器的证明证书和证书撤销列表。此外,每次新的SGX引用到达时,最终用户都不需要咨询Intel的Web服务。相反,最终用户会定期获取DCAP 证明证书并将它们缓存在本地机器上(步骤 0)。当SGX的Quote到达时,用户将Quote 中嵌入的证书与这些缓存的证书进行比较(步骤9)[25]。
(2)数据密封
Intel SGX是一项为了保护数据安全而诞生的新技术。当Enclave进行实例化之后,所有的数据会运行在内存之中。当Encalve实例关闭的时候,因为只是运行在内存中,所以会被清除,导致数据丢失。Intel官方为了能够将数据库保存下来,推出了数据密封技术(Sealing)。每一个Enclave中都有唯一的密钥,Intel SGX使用这个密钥对Enclave中的数据进行加密的操作,加密完成后的数据会存放在磁盘上,数据就不会因为Enclave实例关闭导致数据丢失。Intel将这些加密和解密操作分别称为密封和解封。数据密封是将Enclave实例中的数据加密保存下来。数据解密是将已经加密的数据放在同一个Enclave实例中解密或者是同一平台下的Enclave实例中解密。这两种解密的方式分别对应了两种密封的方式: Enclave Identity(安全区认证)和Signing Identity(签名认证)。
Enclave Identity由 MREnclave的值表示,它是 Enclave日志(测量值)的加密哈希。每一个Enclave构建和初始化都不相同。所以每一个MREnclave都能唯一地标识一个Enclave。由Enclave Identity密封的数据,只能由同一个Enclave解封。相同的Enclave不同版本,构建和初始化Enclave的过程是不一样的,所以MREnclave的值也是不一样的。Enclave Identity密封的数据不能在同一个Enclave不同版本下进行解封。Signing Identity 密封的数据能够在同一个Enclave不同版本下进行解封。如果数据是处于同一个平台,由Signing Identity 密封的数据都能够进行解封。
1.4 SQLCipher数据库
SQLite是一个轻量级的数据库,广泛运用于嵌入式的领域。SQLCipher是SQLite数据库的扩展,能够让使用者更加方便地使用加密数据库。SQLCipher加密使用SQLite内部的256 bit AES进行加密。SQLite编解码器使用回调的方法保证在数据写入和读取存储之前进行加密的操作。因此,SQLCipher的加密是非常安全的。SQLCipher中的页面分成不同的块。每次进行加密或者是解密的时候,只是对相对应的块进行操作,不会对所有的块全部进行操作,这样使SQLCipher的加解密效率大幅度提升[26]。
1.5 MySQL数据库
MySQL数据库是一个免费的开源关系型数据库。与其他的大型数据库(如Oracle、DB2、SQL Server等)相比,MySQL略有不足。但是MySQL的性能能够满足中小型企业的使用。MySQL是开源的数据库,企业能够通过修改源码,优化MySQL,得到适合企业的数据库。
1.6 Gramine
Gramine[25]是一个轻量级库操作系统,旨在以最低的主机要求运行单个应用程序。Gramine可以在隔离的环境中运行应用程序,其优势可与在虚拟机中运行完整的操作系统相媲美——包括应用程序定制、易于移植到不同的操作系统以及进程迁移。
Gramine在任何平台上都支持原生的、未经修改的Linux二进制文件。目前,Gramine在Linux和Linux平台上的Intel SGX Enclave上运行。
在不受信任的云和边缘部署中,用户希望将整个应用程序与基础设施的其余部分隔离开来。Gramine支持这种应用程序的运行方式。Gramine通过Intel SGX将未经修改的应用程序引入机密计算。Gramine可以通过最少的移植工作来保护应用程序免受恶意入侵。
Intel通过Gramine实现了一些使用Intel SGX的例子,在提升安全的同时,小幅度增加开销。
2 系统设计
2.1 加密数据库
加密数据库(Encrypted SQL)意味着数据库能够对数据库中保存的数据进行加密操作。本文提到的MySQL和SQLCipher就是加密数据库(Encrypted SQL)。SQLCipher通过一段密钥对数据库进行加密解密,保证数据安全保存,依靠账号密码对数据库访问进行限制。MySQL通过账号密码限制数据库的访问,用事务的特性保证数据正确,不同的数据库引擎适应不同的使用环境。
2.2 密钥管理服务器
密钥管理服务器(Key Manager Server,KMS)服务用于对Secret Key的存储和管理,通过远程认证,为目标APP配置Secret Key,并提供接口用于对Key的维护、升级、重置等操作。KMS主要包含的部分如图2所示。
2.2.1 加密数据库SQLCipher
SQLCipher基于SQLite,可以将其看作SQLite的一个分支,它继承了SQLite轻量、高性能的特点,同时提供加密扩展,为存储数据提供可靠的加密层保护。参考官方介绍,其中几个特点适合当前KMS。
图2 总体结构
(1)快速性能,在许多操作中加密的开销仅为5%~15%。对加密数据进行操作之后,加密算法会对数据库进行加密,加密开销占整个操作开销很小的一部分。
(2)数据库文件中的数据100%加密。所有存储在数据库的数据都是处于加密的状态。
(3)良好安全实践(CBC模式、HMAC、密钥派生)。各种安全的方案,使用户得到很好的体验。
(4)零配置和应用程序级加密。SQLCipher不需要复杂的配置就能使用。整个程序在运行的过程中是加密的。
(5)由同行评审的OpenSSL加密库提供的算法。所有的加密算法都通过实践的检验。
(6)可配置加密程序。加密的程序并不是固定的,可以通过配置的方式进行更改。
2.2.2 KMS远程认证
远程认证的证书链如图3所示。
KMS接收来自客户端或者数据库服务端申请Secret Key请求,对于认证合法的客户端或者是数据库服务端,将向其发送Secret Key。具体的工作流如图4所示。
(1)客户端或者数据库服务端生成密钥对,并将公钥通过控制台页面提交到KMS。
(2)KMS根据上传公钥生成客户端证书,客户端或者数据库服务端下载该证书,同时下载服务器根证书。
(3)将服务器根证书和客户端证书导入到客户端或者数据库服务端。
(4)客户端或者数据库服务端(通过有权限的管理人员)在控制台页面请求KMS,生成Token,该Token由KMS签发,用于进一步验证和访问控制。
图3 证书链
(5)将Token导入到客户端或者数据库服务端。
(6)启动客户端或者数据库服务端,在初始阶段向KMS发起Https请求,双方各自对对方证书进行验证(双向验证)。
(7)第6步验证成功后,KMS对Token进行验证,验证成功后,向客户端或者数据库服务端发送Secret Key。
2.3 系统介绍
本文使用SQLCipher数据库和MySQL数据库作为实例实现整个系统。本方案中将加密数据库对外共享定义为两种形式:第一种,在可信机器上部署数据库服务器,通过远程连接访问;第二种,数据库以加密文件的形式存储在本地机器当中,共享时分享整个或部分加密数据库文件。
本方案的系统模型如图5所示,由两个实体(数据提供方和数据使用方)、三个部分(加密数据库(Encrypted SQL)、密钥管理服务器(Key Manager Server,KMS)、搭载含有SGX功能的机器(SGX Worker)模型定义)组成。
第一步,将加密数据库运行在Enclave中。
第二步,让运行在Enclave中的应用去访问加密数据库。
图4 工作流程
图5 系统的运行流程
3 运行过程与分析
系统的运行流程主要可以分为系统初始化、密钥生成和管理以及数据流转三个阶段。
3.1 Intel SGX启动SQLCipher
Gramine是Intel公司的一个软件扩展,主要是为了简化Intel SGX的使用。本文以SQLite作为模板进行SQLCipher的编写。Gramine实例的编写主要的文件有两个Makefile和manifest.template。首先将Makefile中的SQLite改为SQLCipher,然后将manifest.template中程序的入口改为SQLCipher。使用Intel SGX进行编译完成之后,在SQL文件中添加解密的代码。SQLCipher基于Intel SGX运行SQL文件的时候,在安全区里面完成数据库的解密并进行数据库的操作。
3.2 Intel SGX启动MySQl
与Intel SGX启动SQLCipher的流程相差不大,将Makefile和manifest.template两个文件进行修改,保证Intel SGX启动MySQL时,将MySQL的运行进程运行在Intel SGX的安全环境中。同时,将MySQL的文件作为信任的文件,保证数据的交互能够正常进行。
3.3 试验分析
3.3.1 试验环境的描述
试验的操作系统是Ubuntu20.04, CPU是Intel(R) Xeon(R) Gold 6330N CPU @ 2.20 GHz,总内存是377G,剩余的内存是243G。在试验中使用的各个软件的版本SQLCipher 3.39.2、SQLite 3.31.1、MySQL 8.0.29-0ubuntu0、Python 3.8.10、Intel SGX和Gramine 1.2。所有的试验数据由Python生成,通过命令行进行操作。
3.3.2 SQLCipher对比试验
在整个系统中,为了保证数据库的数据安全,SQLCipher会放入Intel SGX的安全区中。对于正常的系统环境中,在CPU环境中使用SQLCipher进行数据库的存储,不放入Intel SGX中。所以两个系统环境中,主要的差距是在数据库运行环境。因此,本文做了在Intel SGX安全区中的SQLCipher和普通环境下的SQLCipher的对比试验。在两个数据库中插入相同的数据,对比所消耗的时间。本次试验使用的数据量分别是50 万、100 万、150 万和200 万。基于Intel SGX的SQLCipher数据如表1所示。
表1 基于Intel SGX的SQLCipher
不基于Intel SGX的SQLCipher数据如表2所示。
表2 不基于Intel SGX的SQLCipher
两方对比的折线图参见图6。
图6 SQLCipher两方数据的对比
从图6可以看出,在使用相同的数据进行插入操作的时候,基于Intel SGX的SQLCipher和不基于Intel SGX的SQLCipher的各类操作消耗的时间相差在8 s左右。数据操作的规模越大,由Intel SGX产生的性能损失比例越小。
3.3.3 MySQL对比试验
MySQL在Intel SGX中运行与普通的环境下运行进行对比,不基于Intel SGX的SQLCipher如表3所示。
表3 不基于Intel SGX的MySQL
基于Intel SGX的MySQL的数据如表4所示。
表4 基于Intel SGX的MySQL
本文从SELECT、UPDATE和INSERT三个方面进行数据对比(见图7、图8、图9)。
图7 MySQL SELECT的数据对比
图8 MySQL UPDATE的数据对比
图9 MySQL INSERT的数据对比
从图7、图8、图9可以看出,基于Intel SGX的MySQL比不基于Intel SGX的MySQL多消耗30%左右的时间。Christian Priebe等[24]提出EnclaveDB,消耗40%性能换取数据库在安全的环境中运行。基于Intel SGX的MySQL更优于基于Intel SGX的EnclaveDB 。
3.3.4 试验总结
从试验可以看出,基于Intel SGX的数据库与正常环境下的数据库相比,损耗的性能和数据库的类型有关系。基于Intel SGX的SQLCipher性能损耗主要原因是每次对数据库进行操作的时候,都需要启动Intel SGX;基于Intel SGX的MySQL的性能损耗主要原因是Intel SGX对数据库的IO限制。两种数据库在Intel SGX的环境下,性能损失在可接受的范围内。基于Intel SGX的数据库环境能够支持对于数据库操作量不大的项目使用。
4 结束语
本文提出了一种基于隐私计算的数据库全生命周期保护方法,能够在没有第三方服务器的情况下完成各个数据库服务器的认证,保证数据在应用端和服务端之间进行存储、流转、使用的安全性。现有的Intel SGX应用方案在进行远程认证的时候,需要Intel公司的服务器进行第三方认证,但是本文提出的基于隐私计算的数据库全生命周期保护方法,在没有联网的情况下,同样可以保证数据的安全性。本文通过试验验证了Intel SGX能够适配MySQL数据库和SQLCipher数据库,损耗也在应用可以接受的范围内。本文提出的基于隐私计算的数据库全生命周期保护方法目前基于Intel SGX硬件实现,未来将扩展到ARM TrustZone、AMD SEV、海光CSV等平台,并与基于Intel SGX的实现进行对比验证。