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会被存入系统表中。

密钥定时清除:定时清理内存中缓存的密钥明文。

密钥在线轮转:支持用户触发数据加密密钥轮转。

密钥管理机制

透明加密特性使用三级密钥管理,密钥分为根密钥(RK)、主密钥(CMK)和数据加密密钥(DEK),CMK由RK加密,DEK由CMK加密,而数据由DEK加密,每一张表对应一个数据加密密钥DEK。根密钥(RK)和主密钥(CMK)通过KMS(Key Management Service)生成并加密存储,数据库通过RESTFUL API获取到用户需要的数据加密密钥(DEK)的密文和明文。获取到的DEK密文和明文会分别做持久化和缓存处理:密文持久化保证用户在系统表中可以看到加密表的密钥信息标识,缓存的密钥明文可以保证加密和解密过程快速获取到需要的密钥明文进行加解密操作。

posted @ 2025-05-29 09:25  喜酱喜酱  阅读(5)  评论(0)    收藏  举报