问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

GaussDB高安全—端侧密钥管理

创作时间:
作者:
@小白创作中心

GaussDB高安全—端侧密钥管理

引用
1
来源
1.
https://www.cnblogs.com/yuan-er/articles/18777130

GaussDB作为一款高性能的国产数据库产品,在数据安全方面采用了先进的全密态数据库技术。本文将详细介绍GaussDB的端侧密钥管理机制,包括三层密钥体系的架构设计、密钥存储方式以及相关的系统表结构。

在全密态数据库中,为了确保数据在传输和存储过程中的安全性,客户端需要自动对SQL语句进行加密,并对查询结果进行解密。这一过程需要依赖一些额外的辅助信息,主要包括密钥及加密字段元信息。例如,系统需要知道哪些字段是加密的,加解密数据时应该对应哪个加解密密钥,以及数据加解密密钥对应哪个主密钥等。

为了解决这些问题,GaussDB采用了三层密钥机制来保护密钥在客户端的安全存储、使用、导入和导出,从而减少因密钥损坏导致的数据丢失风险。

三层密钥机制

如图6所示,主密钥由外部密钥管理模块管理,列加密密钥由主密钥加密后存放在数据库服务端。当需要对列加密密钥进行加解密时,客户端加解密驱动会访问外部密钥管理模块。


图6 密钥管理模块

密钥管理模块的形态可以是各种各样的,包括密钥云服务、密钥工具、密钥组件和密码机等。目前,全密态数据库支持4种外部密钥管理方式,如表1所示。

类型
名称
提供方
部署位置
接口类型
功能
工具
gs_ktool
GaussDB
数据库驱动侧
命令行命令、C动态库
创建、删除、查询、备份主密钥等
云服务
huawei_kms
华为公有云
公网
网页、restful接口
创建、删除、查询主密钥等,使用主密钥加解、解密
云服务
his_kms
华为IT服务
内网
网页、restful接口
创建、删除、查询主密钥,使用主密钥加解、解密

密钥及加密字段元信息存储

全密态数据库的密钥及加密字段元信息储存在服务端的系统表中,在使用的时候会预加载到客户端的缓存。下面逐一介绍具体的配置信息存储位置。

加密列信息 GS_ENCRYPTED_COLUMNS

GS_ENCRYPTED_COLUMNS系统表记录了全密态数据库中表的加密列的相关信息,每条记录对应一条加密列信息。有了加密列的配置信息,客户端在处理数据的时候,根据缓存中的加密列信息,判断SQL语句中的字段是否需要加密。该系统表记录如下信息:

  • 加密列的标识信息:rel_id和column_name。
  • 加解密处理信息:包括加解密密钥、加密之前的类型和加密之后的类型。
  • 辅助信息:如加密列创建的时间。

具体各个字段的含义如下:

名称
类型
描述
rel_id
oid
加密列所在表的oid,本处oid是指数据库内对象的唯一标识符。
column_name
name
加密列的名称。
column_key_id
oid
对该列进行加解密使用的列加密秘钥oid。
encryption_type
tinyint
加密类型,取值及其含义如下: 1:即确定性加密。该类型时,相同的明文对应的密文也相同。 2:即随机加密。该类型时,同样的明文每一次加密得到的密文都不一样。
data_type_original_oid
oid
加密列的原始数据类型的oid。
data_type_original_mod
integer
加密列的原始数据类型的typmod信息。模式信息一般记录了变长字符串的长度,数值类型的精度等,是数据类型的一部分。
create_date
timestamp with time zone
创建加密列的时间。

列加密密钥 GS_COLUMN_KEYS

GS_COLUMN_KEYS系统表记录密态等值特性中列加密密钥的相关信息,每条记录对应一条列加密密钥的信息。列加密密钥具体的数据储存在另一个系统表 GS_COLUMN_KEYS_ARGS中,该表以KV键值对的形式储存了列加密密钥的密文和指定的算法等。该系统表记录如下信息:

  • 列加密密钥的标识信息:oid和column_key_name等。
  • 列加密密钥处理信息:包括对应的主密钥等。
  • 辅助信息:如创建时间、属主、访问权限等。

具体各个字段的含义如下:

名称
类型
描述
oid
oid
列加密密钥的唯一标识符。
column_key_name
name
列加密密钥(CEK)的名称。
column_key_distributed_id
oid
根据列加密秘钥的schema名和密钥名计算出的hash值,标识符。
global_key_id
oid
列加密密钥对应的主密钥oid。
key_namespace
oid
包含此列加密密钥(CEK)的命名空间oid。
key_owner
oid
列加密密钥(CEK)的所有者oid。
create_date
timestamp with time zone
创建列加密密钥的时间。
key_acl
aclitem[]
创建该列加密密钥时所拥有的访问权限。

客户端主密钥 GS_CLIENT_GLOBAL_KEYS

GS_CLIENT_GLOBAL_KEYS系统表记录了密态等值特性中客户端加密主密钥的相关信息,每条记录对应一个客户端加密主密钥。主密钥具体的数据储存在系统表 GS_CLIENT_GLOBAL_KEYS_ARGS中,该表以KV键值对的形式储存了主密钥对应的加解密算法、主密钥对应的KMS套件名称以及对应加解密套件的密钥标识符。该系统表记录如下信息:

  • 主密钥的标识信息:oid和global_key_name等。
  • 辅助信息:如创建时间、属主和访问权限等。

说明:

主密钥是由密钥管理服务或者密钥工具生成并使用,服务端并不存储主密钥,仅协助客户端储存主密钥相关的标识信息、配置信息和描述信息。

具体各个字段的含义如下:

名称
类型
描述
oid
oid
客户端主密钥的唯一标识符。
global_key_name
name
加密主密钥(CMK)名称。
key_namespace
oid
主密钥所属schema的oid。
key_owner
oid
主密钥的所有者oid。
key_acl
aclitem[]
主密钥指定的访问权限。
create_date
timestamp without time zone
主密钥创建的时间。
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号