---
title: 使能Sealing Key
description: "机密虚拟机内提供硬件密钥封印（Sealing Key），每台服务器在出厂前会预置唯一、随机根密钥，即使相同的派生参数派生密钥结果也不同，本章节主要介绍如何使能硬件密钥封印功能。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/252RC2/confidt/kunpengtee_16_0030.html
sourcePath: /source/zh/kunpengboostkithistory/252RC2/confidt/kunpengtee_16_0030.html
indexId: da0862dc3f31ff29dfb7b888fe1ce5f95712aa88bcb11497942fe84c0a79db3c72
---
# 使能Sealing Key

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

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


1. 部署sealing key组件。
安装前请根据环境要求章节配置openEuler 24.03 LTS SP2的yum源。

  a. 安装动态库和头文件。

```
yum install -y virtCCA_sdk-devel
```


  b. 安装内核态驱动，并刷新内核模块依赖关系。

```
yum install -y virtCCA_driver
depmod
```


  c. 加载内核态驱动，并检查驱动是否成功加载。

```
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
```
