开发者
我要评分
获取效率
正确性
完整性
易理解
在线提单
论坛求助

使能镜像密钥封印

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

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

  1. 部署image key组件。

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

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

    参数名称

    说明

    alg

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

    user_param

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

    user_param_len

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

    image_key

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

    key_len

    入参,指定image_key的长度。

    参考代码示例如下。

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