秘钥管理
功能描述
Vastbase在加密卡模式下,支持对加密卡秘钥进行管理,包括如下管理功能:
- 秘钥生成: 安全数据库产品能正确生成所用的各类秘钥。
- 秘钥导出: 支持导出各类秘钥。
- 秘钥导入: 支持导入各类秘钥。
- 秘钥备份: 支持对各类秘钥进行备份。
- 秘钥恢复: 支持对各类秘钥进行恢复。
- 秘钥销毁: 支持秘钥的销毁功能,销毁后加密卡将不能使用该秘钥。
Vastbase对上述功能提供了相应的内置函数,执行相关函数对应会产生审计信息,审计信息包含秘钥种类、用途、长度的审计信息。具体的内置函数信息如下表所示:
函数功能 | 函数名 | 参数 | 返回值 | 支持的秘钥类型 |
---|---|---|---|---|
秘钥生成 | cryptocard_generate_key | 秘钥长度(128,256)、秘钥索引、秘钥类型、用户口令 | 生成成功返回true,失败则返回对应的报错信息。 |
|
秘钥导出 | cryptocard_export_key | 秘钥索引、秘钥类型 | 导出成功显示当前秘钥信息,失败则返回对应的报错信息。 |
|
秘钥导入 | cryptocard_import_key |
|
导入成功返回true,失败则返回对应的报错信息。 |
|
秘钥备份 | cryptocard_backup_key | 备份文件名、备份pin密码 | 备份成功返回true,失败则返回对应的报错信息。 | 全类型 |
秘钥恢复 | cryptocard_restory_key | 备份文件名、备份pin密码 | 恢复成功返回true,失败则返回对应的报错信息。 | 全类型 |
秘钥销毁 | cryptocard_delete_key | 秘钥索引、秘钥类型(当前只支持内部秘钥) | 销毁成功返回true,失败则返回对应的报错信息。 | USER_KEK:用户秘钥加密秘钥。 |
前置条件
使用该功能必须配置光电安辰密码卡,并配置相关的系统环境变量,具体步骤如下:
1、配置光电安辰密码卡。
2、获取光电安辰的硬件动态库文件(libskf.so、libsdf.so),并将库文件拷贝到数据库实例所在目录下,使库文件和hwcipher.so处在同一目录(可自定义路径)。
3、在~/.bashrc文件中配置如下环境变量:
设置环境变量CRYPTDEV_LIBPATH为动态库所在路径(不需要包含动态库名称)。
设置环境变量CRYPTDEV_TYPE=gdaccard表示使用光电安辰密码卡。
示例
在函数中使用秘钥管理函数
1、服务器已安装配置光电安辰密码卡。
2、在~/.bashrc文件中配置环境变量。
vi ~/.bashrc
添加如下内容(CRYPTDEV_LIBPATH已实际路径为准):
export CRYPTDEV_TYPE=gdaccard
export CRYPTDEV_LIBPATH=/home/wzr1
3、重新加载配置文件。
source ~/.bashrc
4、打开postgresql.conf配置文件,修改参数GUC参数audit_enabled。
audit_enabled=on
audit_enabled
参数说明: 控制审计进程的开启和关闭。审计进程开启后,将从管道读取后台进程写入的审计信息,并写入审计文件。
取值范围: 布尔型
- on表示启动审计功能。
- off表示关闭审计功能。
默认值: off
5、启动数据库服务并连接数据库。
vb_ctl start
vsql -r
6、创建测试表并插入数据。
create table test (c1 int,c2 text,c3 text,c4 text);
insert into test values(128,'USER_KEK','12','aaa');
insert into test values(256,'USK_SM2');
insert into test values(11,'abcdefghigklmnop');
insert into test values(11,'Aa123456');
7、创建函数。
CREATE OR REPLACE FUNCTION func_crypto() return void
AS
type tp1 is varray(10) of text;
a tp1;
BEGIN
select cryptocard_generate_key(c1,c3,c2,c4) from test where c1=128 into a(1);
select cryptocard_export_key(11,c2) from test where c1=256 into a(2);
select cryptocard_import_key(2,'USER_KEK','1010101010101010') into a(3);
insert into test values(4,cryptocard_backup_key('./backup.txt','aaa'));
select cryptocard_delete_key(2,'USER_KEK')into a(4);
raise notice '%',a;
END;
/
8、调用函数。
select func_crypto();
返回结果如下所示: