RDS PostgreSQL支持透明数据加密(Transparent Data Encryption,简称TDE),对数据文件进行实时加密和解密,保护用户数据隐私,本文介绍透明数据加密的基本概念和加密原理。
什么是透明数据加密
透明数据加密指对数据文件执行实时I/O加密和解密。通过在数据库层执行静态数据加密,阻止可能的攻击者绕过数据库直接从存储中读取敏感信息。经过数据库身份验证的应用和用户可以继续透明地访问应用数据(不需要更改应用代码或配置),而尝试读取表空间文件中的敏感数据的OS用户以及尝试读取磁盘或备份信息的未知用户将不允许访问明文数据。
透明:数据在使用过程中无感知,数据在写入磁盘时自动加密,在数据被读取时自动解密。
数据加密:使用密钥管理服务(Key Management Service,简称KMS)提供的服务密钥或您上传至KMS的自定义密钥,对数据文件进行加密。
说明TDE加密使用的密钥由KMS产生和管理,RDS不提供加密所需的密钥和证书。
RDS PostgreSQL支持Aliyun_AES_256和Aliyun_SM4两种类型的KMS密钥。
透明数据加密的优势
阿里云RDS PostgreSQL透明数据加密具有以下优势:
表级、索引级加密粒度:支持对表级别、索引级别进行TDE加密和解密。
批量对象加密解密:支持表中所有索引批量加密和解密,支持数据库内所有表批量加密和解密。
性能损耗低:开启TDE功能后,性能影响小,常规业务场景下加密的表性能损耗约4%。
TDE加密解密原理
名词解释
加密密钥(Key Encryption Key,简称KEK):可使用KMS服务密钥或用户自定义密钥(Customer Master Key,简称CMK),用于保护数据密钥。
数据密钥(Data Encryption Key,简称DEK):由数据库生成,用于加密或解密数据。
加密解密流程
所有加密解密操作均在内存中进行,内存中的数据是明文,磁盘中的数据是密文,这可以避免因磁盘被盗而产生的数据泄露问题,同时数据库的使用方式保持不变,没有适配成本。
数据库启动时会从KMS获取KEK,从而解密DEK,解密后的DEK存放在内存中,用于写入数据或读取数据时进行加密或解密。