南大通用GBase 8c全密态加密之客户端主密钥说明

原文链接:https://www.gbase.cn/community/post/4151
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。

南大通用GBase 8c数据库具有全密态数据库特性,用以解决数据库服务端数据生命周期的隐私保护,使得数据在传输、计算、存储等各个环节中始终处于密文状态。全密态数据库特性能够保护数据全生命周期的隐私安全,无论处于何种状态,攻击者都无法获取有效信息。适用于金融、医疗、政务等对数据敏感的应用场景。全密态数据库目前支持两种连接方式:默认gsql客户端连接和jdbc远程连接。全密态数据库有两种密钥,即客户端主密钥CMK和数据加密密钥CEK。创建CEK依赖于CMK,即创建CMK之后才能创建CEK。

实现流程为:

  1. 在客户端识别密钥之后对数据进行加密,并存储到数据库中;
  2. 在创建了客户端主密钥CMK和数据加密密钥CEK之后,就可以使用CEK创建加密表;
  3. 插入数据;
  4. 在读取数据时使用密钥进行解密,从而确保即使数据被攻击也无法直接读取数据内容。

下文将对南大通用GBase 8c全密态数据库的密钥做简要说明。

(1)客户端主密钥

语法格式

CREATE CLIENT MASTER KEY client_master_key_name WITH (KEY_STORE = key_store_name, KEY_PATH = "key_path_value", ALGORITHM = algorithm_type);	

参数说明

  • client_master_key_name

该参数作为密钥对象名,在同一命名空间下,需满足命名唯一性约束。

取值范围:字符串,需符合标识符的命名规范。

  • KEY_STORE

指定管理CMK的密钥工具或组件;取值:目前仅支持localkms。

  • KEY_PATH

KEY_STORE负责管理多个CMK密钥,KEY_PATH选项用于在KEY_STORE中唯一标识CMK。取值类似:“key_path_value”。

  • ALGORITHM

该参数用于指定加密算法的类型。创建数据加密密钥CEK时受此参数影响,使用该参数指定的加密算法进行加密。取值范围:RSA_2048、RSA_3072和SM2。

注意事项

gsql客户端连接数据库服务器时,需使用‘-C’参数,打开开关即可使用本语法。

密钥存储路径:默认情况下,localkms将在$LOCALKMS_FILE_PATH路径下生成/读取/删除密钥文件,用户可手动配置该环境变量。但是,用户也可以不用单独配置该环境变量,在尝试获取$LOCALKMS_FILE_PATH失败时,localkms会尝试获取$GAUSSHOME/etc/localkms/路径,如果该路径存在,则将其作为密钥存储路径。 密钥相关文件名:使用CREATE CMK语法时,localkms将会创建四个与存储密钥相关的文件。

(2)数据加密密钥

语法格式

CREATE COLUMN ENCRYPTION KEY column_encryption_key_name WITH(CLIENT_MASTER_KEY = client_master_key_name, ALGORITHM = algorithm_type, ENCRYPTED_VALUE = encrypted_value);

参数说明

  • column_encryption_key_name

该参数作为密钥对象名,在同一命名空间下,需满足命名唯一性约束。

取值范围:字符串,要符合标识符的命名规范。

  • CLIENT_MASTER_KEY

指定用于加密本CEK的CMK。

取值为:CMK对象名,该CMK对象由CREATE CLIENT MASTER KEY语法创建。

  • ALGORITHM

指定该CEK将用于何种加密算法。

取值范围为:AEAD_AES_256_CBC_HMAC_SHA256、AEAD_AES_128_CBC_HMAC_SHA256和SM4_SM3;

  • ENCRYPTED_VALUE(可选项)

该值为用户指定的密钥口令,密钥口令长度范围为28 ~ 256个字符。28个字符派生出来的密钥安全强度满足AES128。若用户需要用AES256,密钥口令的长度需要39个字符。如果不指定,则会自动生成256比特的密钥。

说明: 由于SM2、SM3、SM4等算法属于中国国家密码标准算法,为规避法律风险,需配套使用。如果创建CMK时指定SM4算法来加密CEK,则创建CEK时必须指定SM4_SM3算法来加密数据。

(3)全密态密钥CMK和CEK使用示例

--在服务端创建路径
[gbase@gbase ~]$ mkdir -p $GAUSSHOME/etc/localkms/

--配置环境变量
[gbase@gbase ~]$ vim ~/.bashrc
----添加一行:
export LOCALKMS_FILE_PATH=$GAUSSHOME/etc/localkms/
----“:wq”保存并退出
--配置环境变量生效

[gbase@gbase ~]$ source ~/.bashrc

以全密态模式登录数据库:

[gbase@gbase ~]$ gsql -d postgres -p 15400 -C

在数据库中:

--创建客户端秘钥
CREATE CLIENT MASTER KEY another_cmk WITH (KEY_STORE = localkms, KEY_PATH = "another_path_value", ALGORITHM = SM2);
 
--创建列加密秘钥
CREATE COLUMN ENCRYPTION KEY another_cek WITH VALUES (CLIENT_MASTER_KEY = another_cmk, ALGORITHM  = SM4_SM3);
 
--创建加密表
CREATE TABLE creditcard_info (id_number    int, name         text encrypted with (column_encryption_key = another_cek, encryption_type = DETERMINISTIC),
credit_card  varchar(19) encrypted with (column_encryption_key = another_cek, encryption_type = DETERMINISTIC));
 
--插入数据
INSERT INTO creditcard_info VALUES (1,'joe','6217986500001288393');
INSERT INTO creditcard_info VALUES (2, 'joy','6219985678349800033');
 
--查询数据(普通模式(不指定-C)和全密态模式(指定-C)下分别执行)
select * from creditcard_info;

在全密态模式下,直接查询返回插入数据:

 在普通模式下,执行查询显示加密数据:

(4)字段加解密

除上述语法之外,南大通用GBase 8c数据库还支持系统函数用于对字段进行加解密操作,说明如下:

  • gs_encrypt_aes128(encryptstr,keystr)

描述:以keystr为密钥对encryptstr字符串进行加密,返回加密后的字符串。keystr的长度范围为8~16字节,至少包含3种字符(大写字母、小写字母、数字、特殊字符)。

返回值类型:text

返回值长度:至少为92字节,不超过4*[(Len+68)/3]字节,其中Len为加密前数据长度(单位为字节)。

示例:

postgres=#  SELECT gs_encrypt_aes128('张三','Asdf1234');
                                       gs_encrypt_aes128
----------------------------------------------------------------------------------------------
 yDFbNa2auMXyIyh0fmh7/8GFDyKwEsyzXUzMWhX0feY6MH4LxHq4VYmfMNEtAHLB2KFmAn1/9Eo1Oxa3dnATOySSNbU=
(1 row)
  • gs_decrypt_aes128(decryptstr,keystr)

描述:以keystr为密钥对decrypt字符串进行解密,返回解密后的字符串。解密使用的keystr必须保证与加密时使用的keystr一致才能正常解密。keystr不得为空。

返回值类型:text

示例:

postgres=# SELECT gs_decrypt_aes128('yDFbNa2auMXyIyh0fmh7/8GFDyKwEsyzXUzMWhX0feY6MH4LxHq4VYmfMNEtAHLB2KFmAn1/9Eo1Oxa3dnATOySSNbU=','Asdf1234');
gs_decrypt_aes128
-------------------
张三
(1 row)

原文链接:https://www.gbase.cn/community/post/4151
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。

  • 17
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值