VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

秘钥管理

功能描述

Vastbase在加密卡模式下,支持对加密卡秘钥进行管理,包括如下管理功能:

  • 秘钥生成: 安全数据库产品能正确生成所用的各类秘钥。
  • 秘钥导出: 支持导出各类秘钥。
  • 秘钥导入: 支持导入各类秘钥。
  • 秘钥备份: 支持对各类秘钥进行备份。
  • 秘钥恢复: 支持对各类秘钥进行恢复。
  • 秘钥销毁: 支持秘钥的销毁功能,销毁后加密卡将不能使用该秘钥。

Vastbase对上述功能提供了相应的内置函数,执行相关函数对应会产生审计信息,审计信息包含秘钥种类、用途、长度的审计信息。具体的内置函数信息如下表所示:

函数功能 函数名 参数 返回值 支持的秘钥类型
秘钥生成 cryptocard_generate_key 秘钥长度(128,256)、秘钥索引、秘钥类型、用户口令 生成成功返回true,失败则返回对应的报错信息。
  • USK_SM2:用户SM2签名秘钥。
  • UEK_SM2:用户SM2加密秘钥。
  • USER_KEK:用户秘钥加密秘钥。
  • 秘钥导出 cryptocard_export_key 秘钥索引、秘钥类型 导出成功显示当前秘钥信息,失败则返回对应的报错信息。
  • USK_SM2:用户SM2签名秘钥。
  • UEK_SM2:用户SM2加密秘钥。
  • USER_KEK:用户秘钥加密秘钥。
  • 秘钥导入 cryptocard_import_key
  • 用户加密秘钥:秘钥索引、秘钥类型、秘钥原码
  • ECC秘钥:秘钥索引、秘钥类型、用户口令、输入公钥X、输入公钥Y、输入私钥K
  • 导入成功返回true,失败则返回对应的报错信息。
  • USK_SM2:用户SM2签名秘钥。
  • UEK_SM2:用户SM2加密秘钥。
  • USER_KEK:用户秘钥加密秘钥。
  • 秘钥备份 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();
    

    返回结果如下所示: