无论是当前通用数据脱敏方案,还是数据透明加密方案,其所解决的都是部分状态或部分流程下的数据隐私安全。数据库攻击者可通过其他不同的攻击技术手段在数据以明文存在的阶段或处于内存中的时候抓取数据流信息,从而达到获取数据隐私数据的目的。如果数据在整个生命周期过程中都能够处于加密的形态,且密钥掌握在用户自己手中。则数据库用户可有效的防止数据隐私安全泄露。
全程加密技术就是在这种场景下诞生的。其核心是使得数据从用户手中进入到数据库系统后一直处于加密状态,用户所关心的数据分析过程也在密态状态下完成。在整个数据分析处理过程中,即使用户数据被攻击者窃取,由于密钥一直掌握在客户自己手中,攻击者也无法获得相关的信息。目前该技术处于研发阶段,对应产品尚未向客户发布。
openGauss数据库分成三个阶段来实现完整的全程加密功能。
第一阶段是客户端全程加密能力,系统在客户端提供数据加解密模块和密钥管理模块,在这种设计思路下数据在客户端完成加密后进入数据库,在完成处理分析返回结果的时候在客户端完成解密功能,客户端全程加密的缺陷在于只能支持等值类查询。
在第二阶段,将在服务端实现基于密文场景的密文查询和密文检索能力,使得数据库具备更加强大的处理能力。
第三阶段openGauss将构建基于可信硬件的可信计算能力。在此我们将基于鲲鹏芯片来构建数据库的可信计算能力。在可信硬件中,完成对数据的解密和计算。数据从可信硬件进入到真实世界后,将再加密成密文返回给客户。
一个完整的openGauss数据库全程加密方案架构如图11-7所示。

图11-7 openGauss 全程加密示意图
首先来介绍openGauss客户端全程加密方案,我们也称之为客户端列加密方案(Client Column Encryption,CCE)。在该方案中,首先应该由用户来指定对哪一列数据进行加密,通过在指定的属性列后面加上关键字“encrypted”来进行标记,如下述语法所示:
CREATE TABLE test_encrypt(creditcard varchar(19) encrypted);
为了有效保证加密数据的安全性并支持数据的密态查询,在内核中我们选用确定性AES算法,具体来说其加密算法为:
AEAD_AES_256_CBC_HMAC_SHA_256。整个方案中使用双层密钥方案,第一层根密钥用户向密钥管理中心获取,作为根密钥(master key)。第二层为数据加密密钥,也称之为工作密钥。工作密钥通过根密钥加密后存放在服务器端。在加密列创建完成后,如果没有工作密钥,则系统会单独为该列创建一个工作密钥。不同的属性列可以通过创建语法指定并共享列加密密钥。
为保证整个系统的安全性,加密工作密钥的加密算法强度应高于使用工作密钥加密数据的强度。在openGauss数据库中,我们使用RSA-OAEP算法来加密工作密钥,而根密钥仅存放在客户端。密钥层次关系如图11-8所示。

图11-8 全程加密方案密钥管理方案
由于采用确定性加密算法,对于相同的明文,所获取的密文也是相同的。在这种机制下,客户端全程加密可有效的支持等值查询,我们只需要将对应的查询条件中的参数按照对应属性列的加密算法进行加密,并传给服务端即可。一个完整的客户端全程加密逻辑流程如图11-9所示。在流程图的客户端部分,我们需要优先检查相关信息的有效性。

图11-9 客户端加密方案查询流程图
客户端全程加密方案是非常简单易懂的,通过确定加密机制保障结果的正确性和完整性。但对于日益复杂的查询任务来说,客户端全程加密方案是远远不够的。因为客户端全程加密仅仅能满足那些等值查询的查询任务,如等值条件查询、分组、连接操作等等。对于那些更为复杂的数据搜索,比较查询、范围查询等等,则需要更为复杂的密态查询算法或服务端可信硬件方案。
事实上,密文查询算法和检索算法在学术界一直都是热点的研究方向,如OPE(Order Preserve Encryption)/ORE(Order Reveal Encryption)算法、SSE(Symmetric Searchable Encryption)算法等。openGauss将针对排序、范围查询、模糊检索实现纯软件态的密文查询和密文检索。纯软方案的缺陷在于由于在密文状态下进行运算,会导致系统整体性能变慢。为了支持密态计算,需要密文在计算完成后解密的结果与明文计算所获得的结果相同。全同态加密是最行之有效的算法,可有效解决数据在密文形态下的加法和乘法计算,而不暴露相关明文信息。但是全同态加密最大的问题在于其性能过于低效,以至于没有一款商业数据库支持该能力,哪怕是部分同态加密能力,如加法同态或者乘法同态。
在第三阶段,openGauss将提供基于可信硬件的密态计算能力。其核心是数据以密文形态进入服务端可信硬件中并完成所需要的密文计算。可信硬件将系统内核分为安全世界和非安全世界。数据计算完成后再以密文形态返回给非安全世界,并最终返回给客户端。目前通用的Intel芯片和ARM芯片均提供了相类似的功能。在Intel芯片中,该隔离区域被称之为SGX(Software Guard Extensions)。SGX是一个被物理隔离的区域,数据即使以明文形式存放在该物理区域内,攻击者也无法访问。在ARM架构中,与其类似的功能被称之为Trust Zone,基于Trust Zone,人们可以构建可信操作系统(Trusted OS),然后可以开发相对应的可信应用。基于可信计算环境,用户可以解密这些数据进行各类数据库查询操作。当数据离开这些环境后,数据则以密文形态存在,并返回给客户再进行解密。从而起到保护数据隐私的目的。




