全加密功能是阿里云数据库的一项数据安全功能。在RDS PostgreSQL实例中开启并使用该功能,您可以对数据库表中的敏感数据列进行加密,这些列中的敏感数据将以密文进行传输、计算和存储。

功能介绍

传统加密技术往往只能保护数据在传输过程中或者在磁盘中存储时的安全,而全加密功能使用基于Intel SGX 安全增强型实例的可信执行环境技术对内存中的数据进行加密并进行计算,全程保护数据免受攻击者的窃取。

相比传统的加密方式,全加密功能为用户在RDS PostgreSQL数据库中存储敏感数据提供了更高的数据安全保护。
对比项 透明数据加密(TDE) SSL链路加密 云盘加密 数据库全加密(本功能)
加密方式 在数据被写入存储设备或存储服务时对数据进行加密。 在客户端和数据库实例之间对传输的数据进行加密。 针对RDS云盘版实例,阿里云免费提供云盘加密功能,基于块存储对整个数据盘进行加密。 在全链路(从客户端至数据库实例,含网络、内存和存储)中对数据进行加密。
明文数据可见范围 数据在参与计算前需要被解密,所以其在CPU、缓存和内存中是明文形式。 数据在数据库实例中(含内存和存储)均为明文。 数据在云盘之外时是明文。 数据全程为密文形式,仅在Intel SGX 安全增强型规格实例内参与计算时被解密为明文。
安全性 保护存储中的数据。 保护数据的通信不被窃听。 保护云盘中数据的安全。 保护全链路中的数据安全。
说明 Intel SGX 增强型规格采用Intel CPU的软件防护扩展(Software Guard Extensions,简称SGX)提供可信执行环境(Trusted Execution Environment,简称TEE)来保护被加密的数据及其处理过程。具体规格清单请参见RDS PostgreSQL主实例规格列表

加密原理

在RDS PostgreSQL实例中,您可以使用用户主密钥(Master Encryption Key,简称MEK)和用户数据密钥(Data Encryption Key,DEK)对数据库中的列进行加密,保护敏感数据的数据安全。
  • 用户数据密钥对选中的数据库列进行加密。如有多个列需要被加密保护,您可以使用一个或多个DEK分别对它们进行加密。数据密钥可以在您授权的情况下被第三方访问使用,但不能被获得。
  • 用户主密钥用于对用户数据密钥本身进行加密保护。请您妥善保管,在任何场景中都不应被第三方获得或访问。
秘钥关系
在全加密功能中,除数据所有者外的任何人员无法获得用户主密钥和用户数据密钥,从而无法对数据库中的加密列进行解密。
  • 对于数据所有者:拥有用户主密钥和数据密钥,可以在客户端一侧使用密钥对数据进行加密,可对数据库执行各类查询和事务,可以看到经过密钥解密的查询结果。
  • 对于数据库运维人员、云平台软件、DBA等内部角色:任何人无法获得用户主密钥,未经授权无法访问用户数据密钥。可对数据库进行维护或使用数据库的其它功能,但无法查看加密列的明文。

实现方案

全加密功能根据实例类型不同,可通过以下两种方案实现:
  • Intel SGX 安全增强型实例:全加密功能可以利用该规格为用户提供基于可信执行环境(Trusted Execution Environment,简称TEE)的数据安全保护。此时,全加密功能支持对密文数据进行所有的数据库操作。

    可信执行环境依赖Intel SGX 安全增强型规格提供对密文数据进行比较和其它常见计算,具体规格清单请参见RDS PostgreSQL主实例规格列表

  • 其它规格(非Intel SGX 安全增强型规格):全加密功能可以利用密码学方法提供数据安全保护,此时其能够支持的操作类型较少。

全加密功能可以部署在所有实例规格之上,但推荐您选择Intel SGX 安全增强型规格,以获得最完整的全加密功能支持。

Intel SGX 安全增强型规格实例与其它规格实例的功能对比如下:
对比项 Intel SGX 安全增强型规格 其它规格
数据定义语言(DDL) ✔️ ✔️
加密数据类型 ✔️
说明 支持7种加密数据类型。
✔️
说明 仅支持rnd_type和det_type两种加密数据类型。
加密算法 确定性加密算法(Deterministic Encryption) ✔️ ✔️
随机加密算法(Randomized Encryption) ✔️ ✔️
SQL查询与事务 对加密数据进行等值判断 ✔️ ✔️
说明 仅支持确定性加密的数据的等值比较,安全性较差。
对加密数据进行比较 ✔️
对加密数据进行其它计算(表达式求值、LIKE等) ✔️
功能支持(如JOINORDER BYGROUP BY等) ✔️ ✔️
说明 仅支持确定性加密的数据的EQUAL JOIN操作。
加密SQL查询性能优化 ✔️