GaussDB数据透明加密-内部密钥管理者组件

内部密钥管理者组件

主要负责数据加密密钥的创建、获取明文等控制行为,并且提供一系列密钥处理机制保证加解密过程的安全性和性能。密钥管理者是整个密钥管理模块的核心大脑,负责所有行为的统筹、执行与管理。

密钥管理:与KMS交互创建数据加密密钥,获取数据加密密钥明文密文。

密钥缓存:将数据加密密钥明文密文进行哈希键值对缓存。

密钥持久化:数据加密密钥密文、主密钥ID会被存入系统表中。

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

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

密钥管理机制

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

密钥缓存机制

GaussDB透明数据加密的密钥管理模块了提供了一个进程级别的缓存进行密钥缓存以提升查询密钥明文的效率,一个GaussDB进程下启用一个进程级别动态哈希表进行数据加密密钥的明文和密文的缓存处理,key是密文,value是明文,每次通过密文查询明文,因为密文是持久化保存的,在数据加解密模块的存储层BUFFER中没有明文信息时,可以快速的从密钥哈希表中获取到密钥的明文,减少访问KMS的次数从而提升加解密效率。

密钥定时清除机制

根据密钥管理的安全标准要求:“数据加密密钥的密文可以落盘存储,密钥的明文不可以明文落盘存储,只能在内存中使用,并且要保证定时清除”。为了兼顾安全与性能,GaussDB会短期缓存密钥,并提供了定时清除机制来保证其安全性。在每一次缓存密钥密文明文对的同时会生成一个时间戳,每隔一个小时,会清除一次密钥缓存,从而减少密钥泄露风险。

密钥持久化机制

GaussDB将透明加密相关信息持久化到系统表PG_CLASS中的reloptions字段中,信息包括:数据加密密钥密文,主密钥ID,加密算法以及是否使能透明加密开关标识。用户可以在查看加密表时看到加密表相关信息。密钥持久化更重要的作用在于:当向加密表插入新数据生成PAGE页面时,若缓存中没有密钥密文,则可直接从系统表中获取,不需要再与KMS进行交互。

密钥在线轮转机制

密钥可更新才能更好保证密钥使用的安全。密钥使用时间越长,攻击者花费精力去破解它的诱惑也越大,这使得密钥被破解的风险也越大;如果密钥已经泄露,那么密钥被使用的时间越久,损失越大。为消除以上风险,GaussDB透明数据加密技术支持数据密钥在线轮转,同时也支持主密钥的轮转,从而提升密钥使用的安全性。

密钥在线轮转当前支持用户触发,给用户最大的选择权,当用户认为某个加密表的密钥不安全或者时间久了,就可以指定该表进行密钥在线轮转操作。进行密钥轮转操作后,系统表中的密钥密文会被更新;对于更新密钥后产生的新数据页,使用新的密钥进行加密,对于旧的数据页,如果没有读取到数据页,不处理旧的数据页,如果读取到数据页,使用旧密钥进行解密,然后再使用新密钥加密。密钥轮转时不会改表加密算法。

外部密钥管理服务KMS

除了内部的密钥管理者模块外,透明加密特性依赖外部密钥管理服务(Key Management Service,KMS)来进行密钥的托管。上文中已经提到过,透明加密特性使用三级密钥管理,密钥分为根密钥(RK)、主密钥(CMK)和数据加密密钥(DEK),数据由DEK加密,而DEK由CMK加密,CMK由RK加密。RK和CMK在外部KMS创建并进行加密存储,当创建数据加密表时,由内部数据管理者模块通过网络或其他途径向KMS发送请求创建DEK,获取DEK明文和密文,用于数据的加密和解密。当密钥在线轮转触发时,密钥管理者模块重新申请DEK,使用新DEK对表进行加密和解密。

目前大部分的云服务均提供KMS服务,当前GaussDB支持的外部KMS服务有:华为云KMS、混合云 KMS。KMS会为应用程序提供访问接口,数据库使用RESTFUL接口访问KMS。访问KMS前需要进行身份认证,目前,华为云KMS支持账号与密码认证、AKSK认证两种方式。

华为云密钥管理服务KMS

GaussDB华为云密钥管理服务(Key Management Service,KMS),是一种安全、可靠、简单易用的密钥托管服务,可以使用密钥的全生命周期管理(创建,查看,启用,禁用等),数据加密密钥的管理(仅限API)等功能,保护密钥的安全。KMS通过使用硬件安全模块HSM(Hardware Security Module)保护密钥的安全,所有的用户密钥都由HSM中的根密钥保护,避免密钥泄露。KMS对密钥的所有操作都会进行访问控制及日志跟踪,提供所有密钥的使用记录,满足审计和合规性要求。

更加具体的华为云KMS服务介绍可参考https://support.huaweicloud.com/productdesc-dew/dew_01_0001.html

使用场景

当创建的数据表中包含敏感数据,为了防止敏感数据静态泄漏可以使用透明加密功能。但需注意有使用约束,见特性约束章节。

特性约束

规格

密钥管理:支持华为KMS(公有云KMS混合云KMS)

加密算法:支持AES_128_CTR(默认算法)、SM4_CTR

密钥轮转:支持轮转数据密钥

加密表转换:支持将加密表转换为非加密表,支持将加密表转换而来的非加密表重新转换为加密表

存储引擎:支持Astore、Ustore表

约束

GaussDB密钥管理:需保证每个数据库节点与KMS之间网络通畅。

GaussDB特性开关:如果已创建加密表并向加密表中写入数据,在关闭透明加密后,无法对加密表进行读写操作。

加密表转换:加密表转换为非加密表时,数据库不对新数据进行加密,但仍保留系统表和数据文件中的加密信息。非加密表转换为加密表时,要求非加密表保留加密信息。

GaussDB物化视图:不支持加密物化视图。

索引、xlog、系统表:仅支持加密加密表数据文件,不支持加密其他可能含有部分加密表数据的文件,包括索引文件、xlog文件、PG_STATISTIC系统表文件和core文件等。

region:不支持单集群跨region的多副本主备同步,不支持单集群跨region的扩容,不支持跨region的备份恢复、集群容灾和数据迁移场景。

备份恢复:不支持细粒度备份恢复。

数据膨胀:与非加密表相比,加密表数据文件中存储了加密信息,额外存储空间占用在5%以内。

依赖关系

GaussDB透明加密特性依赖外部密钥管理服务提供密钥管理功能

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