使能sealing key

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

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

  1. 参照部署sealing key组件完成驱动和SDK的安装部署。
  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