书接上文数据库高安全—数据保护:数据动态脱敏,从数据动态脱敏方面对高斯数据库的数据保护技术进行了解读,本篇将从数据透明加密方面继续介绍GaussDB数据库的高安全性能。
5.2 数据透明加密
透明数据加密(Transparent Data Encryption,TDE),也简称透明加密,是指数据库对将要落盘的数据自动进行加密,读取的时候自动进行解密,同时外部用户或应用程序对数据使用过程中对整个加解密过程透明无感知。通过存储层的静态数据加密,可以防止攻击者绕过数据库认证机制直接读取数据存储中的敏感信息,即使磁盘文件被窃取,但磁盘中敏感信息已经加密,窃取者无法解密而得不到有效的用户数据,从而保证了数据的安全。
透明加密不保护传输中的数据,数据在内存中不进行加解密,可以有效的保证内存中数据的读写性能,数据只在落盘时候加密保存。
GaussDB提供的透明加密特性有以下几个优势:
-
精细的加密粒度:可以支持表级加密,在创建表时指定是否需要被加密,数据库可自动对表中数据进行加密存储。
-
安全的密钥存储方案:密钥通过外部KMS服务(华为云KMS、混合云KMS)进行托管,数据库通过RESTFUL API进行密钥创建和管理工作。数据的加密密钥的明文,缓存在内存中,使用哈希键值对做索引关系,保证密钥的查询效率,并且提供密钥明文定时清除机制保证密钥明文的安全性。数据加密密钥的密文会跟随数据的PAGE一起落盘存储,从而保证了数据加解密过程中的准确性和高效性。
-
灵活的密钥轮转方案:一个加密表对应一个数据密钥,当用户认为当前的加密表的密钥时间过长或者不再安全以后,可以使用密钥在线轮转功能,可以将当前加密表的数据加密密钥轮转到新的数据加密密钥。
(1)GaussDB透明加密架构
应用在使用透明加密表的过程中会触发GaussDB的透明数据加密功能:在对加密表做DML插入或者查询操作时,密钥管理模块负责获取数据加密密钥,并在内存中缓存密钥明文,磁盘数据模块负责将数据明文使用密钥明文加密为数据密文并附加密钥密文共同落盘存储;解密时通过读取磁盘上的PAGE信息中的密钥密文,从密钥管理模块获取密钥明文,并解密数据密文为数据明文。GaussDB透明数据加密整体架构如图1所示。
图1 透明加密架构图
(2)加解密流程
当用户启用透明数据加密功能并创建加密表时,数据库会向KMS服务发送API请求获取数据加密密钥的密文,并存入系统表PG_CLASS中。当往加密表中插入数据时,数据会先存在缓冲区管理器的BUFFER中,以明文的形式保存。当BUFFER中的内容需要刷盘时,先在缓存中查找是否有可用的密钥明文缓存,如果有则直接使用,如果没有,则向KMS发送API请求获取密钥明文并同时将明文插入缓存,最后使用密钥明文、随机生成的IV值、用户指定的加密算法对数据进行加密,并且将数据加密密钥密文和IV值插入数据页中,在落盘以后物理文件PAGE页就是数据密文、密钥密文及IV值的集合。而解密是相反的过程。
密钥管理模块
GaussDB透明加密使用的密钥管理模块(图2)包含两部分:一是GaussDB内部密钥管理者模块,二是外部密钥管理服务KMS。
图2 密钥管理模块
内部密钥管理者组件
主要负责数据加密密钥的创建、获取明文等控制行为,并且提供一系列密钥处理机制保证加解密过程的安全性和性能。密钥管理者是整个密钥管理模块的核心大脑,负责所有行为的统筹、执行与管理。
-
密钥管理:与KMS交互创建数据加密密钥,获取数据加密密钥明文密文。
-
密钥缓存:将数据加密密钥明文密文进行哈希键值对缓存。
-
密钥持久化:数据加密密钥密文、主密钥ID会被存入系统表中。