GaussDB高安全—全密态数据库

打印 上一主题 下一主题

主题 972|帖子 972|积分 2916

书接上文GaussDB高安全—数据保护,从数据透明加密方面解读了GaussDB数据库的高安全能力,本篇将从软硬融合全密态、端侧加密引擎、端侧密钥管理、轻量化语法剖析等四方面继续介绍GaussDB数据库的高安全性能。


6  全密态数据库   

全密态数据库是指对应用能够提供透明的加解密能力,在数据库系统中将数据的全生命周期以密文形式进行处理,同时密钥掌握在授权用户手中的数据库管理系统。当数据拥有者在客户端完成数据加密并发送给服务端后,即使攻击者借助系统脆弱点窃取用户数据时仍旧无法获得有效、有代价的数据信息,从而起到保护数据隐私的能力。
由于整个业务数据流在数据处理过程中都是以密文形态存在,因此通过全密态数据库可以实现如下优势:


  • 数据安全:数据产生后即刻加密,保护数据在传输、处理、存储、同步和备份等过程中的全生命周期安全。
  • 管理可信:由授权用户掌握密钥,进行数据解密及验证,符合要求后,才可获得明文数据,而其他任何人员,包括操作系统、数据库的管理及运维人员都无法打仗到明文数据。
  • 法律合规:随着数据安全法律法规相继发布,密评、等保、分类分级等要求出台,对数据全生命周期的保护有了更严格的要求。
全密态数据库的总体架构示意图如图1 密态数据库总体架构所示,其完备形态包括纯软方案和软硬结合两种方案。纯软密态查询在数据库服务侧全程存储密文,通过暗码学算法在密文空间直接查询运算,保障数据隐私不泄漏。而软硬融合全密态则通过秘密盘算,借助可信实验环境(安全硬件隔离或逻辑隔离明文盘算空间),通过访问控制,实现盘算及数据对外“不可见”,防止数据泄漏。两种方案都必要客户端加解密驱动的密钥管理、语法剖析及加解密盘算。    


图1 密态数据库总体架构

纯软密态等值查询
纯软密态查询在数据库服务侧全程存储密文,通过暗码学算法在密文空间直接对密文进行查询运算,保障数据隐私不泄漏。软件方案可以不依靠于硬件能力,也不必要在服务侧获取密钥对数据进行解密,直接依靠于可直接查询和操作密文的暗码学算法。
全密态数据库支持使用AEAD_AES_256_CBC_HMAC_SHA_256、AEAD_AES_128_CBC_HMAC_SHA256、AES_256_GCM、AEAD_AES_256_CTR_HMAC_SHA256和国密算法SM4_SM3算法来加密数据库中的数据。同时,其还支持确定性加密和随机加密算法,此中,仅确定性加密支持密态等值查询。

如下,以AEAD_AES_256_CBC_HMAC_SHA_256算法为例,为给定的明文值盘算密文值。    
密钥派生
用户在创建CEK密钥时,ENCRYPTED_VALUE为用户指定的密钥口令,密钥口令长度范围为28 ~ 256个字符。28个字符派生出来的密钥安全强度满足AES128。若用户必要用AES256,密钥口令的长度必要39个字符。如果不指定,则会主动天生256bit的密钥。
  1. CREATE COLUMN ENCRYPTION KEY column_encryption_key_name WITH VALUES ( CLIENT_MASTER_KEY = client_master_key_name, ALGORITHM = algorithm_type[, ENCRYPTED_VALUE = encrypted_value] );
复制代码
在确定性加密中,加解密驱动使用HKDF派生算法,根据root_key和硬编码密钥材料,派生出iv_key、enc_key、mac_key三个密钥。


图2

产生初始化向量(iv)
对于“确定性加密”,使用HMAC-SHA-256算法,输入iv_key和明文数据,产生对应明文数据的初始化向量值。
对于“随机加密”,初始化向量值是由RAND_bytes随机天生的。
1.盘算AES_256_CBC加密密文,使用PKCS7填充
  1. aes_256_cbc_ciphertext = AES-CBC-256( enc_key , iv , plaintext ) with PKCS7 padding
复制代码
2.使用HMAC-SHA-256盘算mac值
  1. mac = HMAC-SHA-256( mac_key , algorithm_version_byte + iv + aes_256_cbc_ciphertext )
复制代码
3.串联密文值,得到存储到数据库的列加密值
  1. ciphertext = version_byte + cek_oid + mac + algorithm_version_byte + iv + aes_256_cbc_ciphertext
复制代码
密态加密算法的数据膨胀如{REF _d0e354 \r \h \* MERGEFORMAT |图2-2}所示,不同的加密算法的数据膨胀率不一致,AEAD_AES_256_CBC_HMAC_SHA256 = AEAD_AES_128_CBC_HMAC_SHA256 = SM4_SM3 > AES_256_GCM > AEAD_AES_256_CTR_HMAC_SHA256。

算法膨胀率与数据大小有关,数据越大膨胀率越低。若数据类型为int8,单个明文数据大小为8 bytes, AEAD_AES_256_CBC_HMAC_SHA256、AEAD_AES_128_CBC_HMAC_SHA256、SM4_SM3算法单个数据大小为74 bytes, AES_256_GCM算法单个数据大小为46 bytes,AEAD_AES_256_CTR_HMAC_SHA256算法单个数据大小为34 bytes。

推荐使用AEAD_AES_256_CTR_HMAC_SHA256 和 AES_256_GCM加密算法。


图3 加密算法膨胀对比图          

6.1 软硬融合全密态

软硬融合全密态功能是在密态等值查询的基础上,结合硬件秘密盘算技能,进一步实现密文数据的多种盘算和查询功能,包括大小比较、数学运算、聚集函数盘算等操作,丰富并美满密态数据库的功能,提升语法支持度。硬件方案重要依靠利用可信实验环境(Trusted Execution Environments,TEE)技能。该类技能通过在服务器上构建一个隔离且安全的容器环境Enclave,保证Enclave内盘算和数据的秘密性,从而可以安全地对密文进行解密后直接在明文上进行盘算。使得攻击者即使在数据运行态也难以获取用户真实信息,从而提供更全面、更完备的数据隐私和安全的保护,总体架构如{REF _fig1378822025018 \r \h \* MERGEFORMAT |图4}所示。    
目前的软硬融合全密态,暂未适配任何的安全硬件能力,仅作为密态等值查询的一个逃生通道使用,同时为将来升级到安全硬件方案做预备。在该逃生通道中,会将密钥传输到数据库中,在内存中对数据进行解密,从而实现密文字段的多种盘算、查询功能,包括范围查询、排序等操作。


图4 软硬融合全密态架构图

密钥传输安全通道
软硬融合全密态必要将密钥传输到可信实验环境TEE中,而密钥传输安全通道可以通过使用RSA非对称加密算法和ECDH密钥协商算法对密钥传输通道进行保护。在每次密钥传输前,服务端的内存加解密模块天生RSA私钥和公钥,分别用于签名和客户端验签;客户端驱动和内存加解密模块使用ECDH协商出传输密钥。客户端驱动使用协商出来的传输密钥对数据密钥(CEK)进行加密并传输到服务端。待加密密钥传输完成后,销毁ECDH密钥和RSA密钥。    
内存加解密模块运算框架
目前的软硬融合全密态,暂未适配任何的安全硬件能力,仅作为框架为将来升级到安全硬件方案做预备。在安全硬件方案中,数据传入TEE后,可以安全地对密文进行解密后直接在明文上进行盘算。而内存加解密模块运算框架则是在数据传到内存中,对密文进行解密后直接在明文上进行盘算。内存加解密模块运算框架重要包括两个部分,第一部分是运算内存管理,第二部分是密文运算算子调用。运算内存管理使用session级别变量,在密钥传输之前创建运算内存,在用户清理密钥或者session退出时,会主动清零该内存。密文运算在语法剖析的时间识别并标记运算算子为密文算子,在函数实验的时间根据具体的运算类型调用运算函数并返回结果。
密文运算算子
在内存加解密模块运算框架中,必要调用不同运算算子实验不同的运算,目前软硬融合全密态仅支持数据排序和范围查询功能。在内存加解密模块中的实验流程包括:解密数据、进行盘算、返回盘算结果。如果盘算结果是布尔值,则不必要加密;如果是字符串、数值类型,则必要对返回值进行加密后再返回。
6.2 端侧加密引擎

纯软密态查询和软硬融合全密态两种方案都必要客户端加解密驱动进行密钥管理、语法剖析及加解密数据。
全密态数据库的焦点是数据库在客户端发送SQL语句前剖析用户输入的SQL语句,识别出已定义的敏感数据并主动对数据进行加密,客户端驱动接收到查询结果后,对结果中的密文数据进行主动化解密及处理。如{REF _d0e482 \r \h \* MERGEFORMAT |图5}所示,使用全密态数据库时,用户/应用程序向客户端驱动输入明文SQL语法,客户端驱动主动剖析并加密敏感数据,然后发送密文SQL语法到服务端,服务端实验密文查询并将结果返回到客户端驱动,然后由客户端驱动主动解密密文结果并将明文结果返回给用户/应用程序。    
全密态驱动在客户端进行语句处理,重要分为三个模块:密钥管理、语法剖析、加解密驱动。


图5 客户端加解密流程

6.3 端侧密钥管理

客户端必要主动对SQL语句加密,对查询结果解密,自然必要一些额外的辅助信息,即密钥及加密字段元信息。例如:哪些字段是加密的,加解密数据时应该对应哪个加解密密钥,数据加解密密钥对应哪个主密钥等。
在全密态数据库中,通过实现三层密钥机制来保护密钥在客户端的安全存储、使用、导入、导出,减少因密钥破坏导致的数据丢失。
如{REF _d0e524 \r \h \* MERGEFORMAT |图6}所示,主密钥由外部密钥管理模块管理,列加密密钥由主密钥加密后存放在数据库服务端。当必要对列加密密钥进行加解密时,客户端加解密驱动会访问外部密钥管理模块。    


图6 密钥管理模块

密钥管理模块的形态可以是各种各样的,包括密钥云服务、密钥工具、密钥组件和暗码机等。目前,全密态数据库支持4种外部密钥管理方式,如{REF _d0e533 \r \h \* MERGEFORMAT |表1}所示。
表1 密钥管理支持类型

类型
名称
提供方
部署位置
接口类型
功能
工具
gs_ktool
GaussDB
数据库驱动侧
下令行下令、C动态库
创建、删除、查询、备份主密钥等
云服务
huawei_kms
华为公有云
公网
网页、restful接口
创建、删除、查询主密钥等,使用主密钥加解、解密
云服务
his_kms
华为IT服务
内网
网页、restful接口
创建、删除、查询主密钥,使用主密钥加解、解密
全密态数据库的密钥及加密字段元信息储存在服务端的系统表中,在使用的时间会预加载到客户端的缓存。下面逐一介绍具体的配置信息存储位置。

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


  • 加密列的标识信息:rel_id和column_name。
  • 加解密处理信息:包括加解密密钥、加密之前的类型和加密之后的类型。
  • 辅助信息:如加密列创建的时间。
具体各个字段的含义如下:
表2 GS_ENCRYPTED_COLUMNS字段

名称
类型
形貌
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等。
  • 列加密密钥处理信息:包括对应的主密钥等。
  • 辅助信息:如创建时间、属主、访问权限等。
具体各个字段的含义如下:    
表3 GS_COLUMN_KEYS字段

名称
类型
形貌
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等。
辅助信息:如创建时间、属主和访问权限等。

主密钥是由密钥管理服务或者密钥工具天生并使用,服务端并不存储主密钥,仅帮忙客户端储存主密钥相关的标识信息、配置信息和形貌信息。

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

名称
类型
形貌
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
主密钥创建的时间。
6.4 轻量化语法剖析

在全密态数据库中,客户端侧增加了一个轻量级的剖析器,该剖析器复用了服务端原有的剖析器。用户/应用程序输入SQL语法后,客户端剖析器进行词法和语法剖析,会得到一棵语法树,使得驱动可以“明白”SQL语句,从而判定出必要加密的明文数据。
客户端加解密驱动通过遍历语法树,根据加密列信息,识别到语法树中必要处理的数据节点。提取出数据节点中的明文数据,使用列密钥进行加密并使用密文更换节数据点内的数据。然后将修改后的语法树进行逆剖析,再通过语法树,天生SQL语句,然后发送给服务端。


图7 语法剖析及加解密示意图

以上内容从软硬融合全密态、端侧加密引擎、端侧密钥管理、轻量化语法剖析等四方面解读了GaussDB全密态数据库,下篇将从防篡改用户表布局、用户汗青表、全局区块表布局、篡改校验算法等方面介绍GaussDB的防篡改属性。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

没腿的鸟

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表