鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

使能sealing key

机密虚拟机内提供硬件密钥封印(sealing key),每台服务器在出厂前会预置唯一、随机根密钥,即使相同的派生参数派生密钥结果也不同,本章节主要介绍如何使能硬件密钥封印功能。

本功能仅在cVM虚拟机内使能,Host侧不开放此功能。

  1. 部署sealing key组件。

    安装前请根据环境要求章节配置openEuler-24.03-LTS-SP2的yum源。

    1. 安装动态库和头文件。
      yum install -y virtCCA_sdk-devel
    2. 安装内核态驱动,并刷新内核模块依赖关系。
      yum install -y virtCCA_driver
      depmod
    3. 加载内核态驱动,并检查驱动是否成功加载。
      modprobe sealing_key
      lsmod | grep sealing_key
      • 若depmod刷新依赖关系失败,或modprobe无法自动加载sealing_key。可通过手动执行insmod的方法加载。执行下方命令查看sealing_key.ko的安装位置后再手动执行insmod进行加载。
        rpm -ql virtCCA_driver 
        insmod /path/to/sealing_key.ko
      • yum源需与当前虚拟机内核版本匹配,否则驱动将插入失败。若找不到匹配的源,可下载驱动源码基于当前内核编译。
        git clone -b master https://gitee.com/openeuler/virtCCA_driver.git
        cd virtCCA_driver/sealing_key/src
        make KERNEL_DIR=/path/to/kernel
  2. 在应用中通过如下接口获取sealing key。
    int get_sealing_key(SEALING_KEY_ALG alg, uint8_t* user_param, uint32_t user_param_len, uint8_t* sealing_key, uint32_t key_len);
    表1 参数说明

    参数名称

    说明

    alg

    • 入参,指定派生key时的算法。
    • 当前版本仅支持SEALING_HMAC_SHA256。

    user_param

    • 入参,缓冲区指针,用于存放用户参数,传入不同值,可派生不同密钥。
    • 支持NULL值,表示用户不传参。

    user_param_len

    • 入参,用户参数的长度。
    • 当前版本仅支持64字节长度或0。

    sealing_key

    • 出参,缓冲区指针,用于存放派生结果sealing key,长度需不小于32字节。
    • 当前版本派生的长度仅支持32。

    key_len

    入参,指定sealing_key的长度。

    参考代码示例如下。

    #include <stdint.h>
    #include <stdio.h>
    #include "sealing_key.h"
    
    int main(int argc, char *argv[])
    {
        uint8_t sealing_key[SEALING_KEY_LEN] = {0};
        uint8_t user_param[64] = {0};
    
        if (get_sealing_key(SEALING_HMAC_SHA256, user_param, 64, sealing_key, SEALING_KEY_LEN) != 0) {
            printf("failed to get sealing key\n");
            return -1;
        }
    
        for (int i = 0; i < SEALING_KEY_LEN; i++) {
            printf("%02x ", sealing_key[i]);
        }
        printf("\n");
    
        return 0;
    }
  3. 编译DEMO代码,并执行。
    gcc demo.c -o demo -lsealingkey
    ./demo