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

本功能仅在cVM虚拟机内使能,Host侧不开放此功能。
- 部署sealing key组件。
安装前请根据环境要求章节配置openEuler-24.03-LTS-SP2的yum源。
- 安装动态库和头文件。
yum install -y virtCCA_sdk-devel
- 安装内核态驱动,并刷新内核模块依赖关系。
yum install -y virtCCA_driver depmod
- 加载内核态驱动,并检查驱动是否成功加载。
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
- 若depmod刷新依赖关系失败,或modprobe无法自动加载sealing_key。可通过手动执行insmod的方法加载。执行下方命令查看sealing_key.ko的安装位置后再手动执行insmod进行加载。
- 安装动态库和头文件。
- 在应用中通过如下接口获取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; }
- 编译DEMO代码,并执行。
gcc demo.c -o demo -lsealingkey ./demo
父主题: 特性使能