全加密功能使用全球领先的安全技术和国际标准加密算法(含国密算法),是一种采取主动防御的数据库安全功能,即在运行过程中全程应用多项安全技术,以防止在各个环节中可能出现的数据泄漏。本文简要介绍全加密功能中使用的几项安全技术的工作原理。

密钥安全

用户主密钥(Master Encryption Key,简称MEK)是用户访问加密数据的根凭据,由用户在初始化全加密功能提供的全加密SDK时设置。
  • 如用户使用Intel SGX 安全增强型规格的实例,它将通过安全的信道分发给数据库端上的可信执行环境(TEE)内,该硬件环境和安全信道由全加密功能利用Intel SGX技术实现。

    TEE在内存中提供一块受保护的隔离区域,只有经过认证的数据库内核中的计算逻辑可以访问其中的内容(包括用户主密钥),并使用用户主密钥对数据进行加密或解密。在数据库端内的其它逻辑或云服务器上运行的任何其它程序(包括操作系统、容器软件等)都无法访问TEE中的数据。这样的机制保证了用户主密钥在数据库端的安全。

  • 如用户使用其它类型的实例,用户主密钥不会被上传至数据库实例,它仅会被用于在客户端一侧对数据进行加密或解密,数据库中所有被用户主密钥加密的数据都不会被以任何形式解密,将一直以密文形式存在。

建议您使用门限密码技术对用户根密钥进行分发和备份。门限密码技术可以将用户跟密钥分为n份,分别存储至不同的密钥管理服务、存储或备份服务中。在这n份子密钥中,任取大于等于m份(m<n)密钥即可还原出原始的根密钥。这样的机制保证在部分子密钥丢失或泄露后(数量少于 n-m),根密钥不会被泄漏且依然可通过其余子密钥还原。用户可按照自己的安全需求灵活选择m和n的取值。

阿里云还提供了更多密钥管理的应用及最佳实践,请参见密钥管理服务

加密算法

分组加密算法(Block Ciphers)是一种对称加密算法(加密和解密使用相同的密钥),它先将明文数据分为等长的数据块,再使用相同的加密算法和对称密钥对每一块分别进行加密或解密。

全加密功能支持两种国际标准分组加密算法:
  • AES(Advanced Encryption Standard,国际标准 ISO/IEC 18033-3:2005)
  • SM4(国家商用密码 SM4,国际标准 ISO/IEC 18033-3:2010/AMD1)

全加密功能需要客户提供的用户主密钥即为对称密码,需要被秘密保存,避免泄露。

从客户端到数据库服务端的全链路上,使用如下算法模式对数据进行加密。
加密算法工作模式 AES(128位) SM4(128位)
CTR(Counter Mode,计数器模式) ✔️ ✔️
GCM(Galois/Counter Mode,伽罗华计数器模式) ✔️
CBC(Cipher-block Chaining,密码分组链接) ✔️ ✔️
ECB(Electronic Code Book,电子密码本) ✔️ ✔️
说明 ECB模式的安全性相比其它模式较差,建议谨慎使用。

可信执行环境

全加密功能使用Intel SGX 增强型规格中Intel CPU的软件防护扩展(Software Guard Extensions,简称SGX)提供的可信执行环境(Trusted Execution Environment,简称TEE)来保护被加密的数据以及其处理过程。

Intel SGX 实现了一种名为Enclave的可信执行环境,其中存储了经过加密保护的代码和数据。
  • Enclave中的程序可以通过在CPU中动态解密的方式访问Enclave中的数据。
  • 系统中的其它所有程序(包括操作系统)都被SGX认为是不可信的,无法访问Enclave中的代码或数据。

全加密功能根据数据库的性能与安全需求,将数据库代码分为不被SGX信任的部分和可信的部分,只有可信的部分可以在Enclave中对加密保护的数据进行解密和计算,并将结果加密后返回。系统中其它所有程序无法访问Enclave中的代码或数据。