前言¶
概述
KLAD是密钥管理模块,集成密钥派生、明文KEY传递、ROOTKEY层级传递。
说明: 本文未有特殊说明,SS927V100与SS928V100内容完全一致。
产品版本
与本文档相对应的产品版本如下。
产品名称 |
产品版本 |
|---|---|
SS928 |
V100 |
SS626 |
V100 |
SS927 |
V100 |
读者对象
本文档(本指南)主要适用于以下工程师:
技术支持工程师
软件开发工程师
符号约定
在本文中可能出现下列标志,它们所代表的含义如下。
符号 |
说明 |
|---|---|
|
表示如不避免则将会导致死亡或严重伤害的具有高等级风险的危害。 |
|
表示如不避免则可能导致死亡或严重伤害的具有中等级风险的危害。 |
|
表示如不避免则可能导致轻微或中度伤害的具有低等级风险的危害。 |
|
用于传递设备或环境安全警示信息。如不避免则可能会导致设备损坏、数据丢失、设备性能降低或其它不可预知的结果。 “须知”不涉及人身伤害。 |
|
对正文中重点信息的补充说明。 “说明”不是安全警示信息,不涉及人身、设备及环境伤害信息。 |
修改记录
文档版本 |
发布日期 |
修改说明 |
|---|---|---|
00B01 |
2025-09-15 |
第1次临时版本发布。 |
概述¶
概述¶
KLAD是密钥管理模块。支持密钥派生、明文KEY传递和ROOTKEY层级传递。支持16个KLAD软件通道。
密钥派生¶
用户可根据不同的应用场景生成不同的密钥,最多可以派生232个ROOTKEY。
密钥派生出的 work key 可通过提供的派生工具计算,使用方法请参考 “密钥派生工具说明”。
明文KEY传递¶
明文KEY即加解密引擎使用的工作密钥由用户妥善保存。
支持 AES 128/192/256bits加解密。
支持 SM4 128bits加解密。
SS928V100、SS626V100不支持 SM4。
ROOTKEY传递¶
ROOTKEY即通过OTP模块的根密钥,经密钥解混淆、密钥派生后产生的KEY。ROOTKEY存储在硬件中,用户不可读取。加解密的工作密钥是KLAD多次层级传递后得到的KEY,该KEY也是存储在硬件中,用户不可读取。该方案大多用于安全方案要求高的场景。OTP的根密钥由用户妥善保存。
支持 AES 128/256bits加解密。
支持 SM4 128bits加解密。
SS928V100、SS626V100不支持 SM4。
SS928V100、SS626V100支持2级KLAD传递。
KLAD使用注意事项¶
KLAD部署在不同场景下时,使用方式可能会有所不同。
在Linux环境下
用户态使用KLAD可以通过链接静态库libss_klad.a或动态库libss_klad.so的方式,依赖libsecurec.a或libsecurec.so。
内核态KLAD使用模块插入方式,即insmod ot_klad.ko,需要依赖ot_osal.ko,ot_base.ko,sys_config.ko,ot_sys.ko。
在OPTEE环境下
用户态调用KLAD对外接口,由Linux环境下的ss_mpi_xxx命名形式对应更改为ot_tee_xxx;
内核态调用KLAD对外接口,由Linux环境下的ss_mpi_xxx命名形式对应更改为ot_drv_xxx。
在UBOOT环境下,用户态调用KLAD对外接口由Linux环境下的ss_mpi_xxx命名形式对应变更为ot_mpi_xxx。
使用流程¶
明文KEY传递¶
场景说明¶
当用于加解密的工作密钥由用户自己传入时,需使用到明文KEY相关的接口。KLAD将工作密钥传递给一个KEYSLOT。加解密时,加解密引擎取对应KEYSLOT中的KEY用于加解密。
工作流程¶
明文KEY传递开发操作步骤如下:
KLAD设备初始化。调用接口ss_mpi_klad_init。
创建KLAD句柄。调用接口ss_mpi_klad_create。
绑定KLAD和KEYSLOT句柄。调用接口ss_mpi_klad_attach。
设置KLAD属性。调用接口ss_mpi_klad_set_attr。
设置明文KEY。调用接口ss_mpi_klad_set_clear_key。
解绑定KLAD和KEYSLOT句柄。调用接口ss_mpi_klad_detach。
销毁KLAD句柄。调用接口ss_mpi_klad_destroy。
去初始化KLAD设备。调用接口ss_mpi_klad_deinit。
注意事项¶
使用明文KEY传递时,请特别注意以下几点。
KEYSLOT句柄在配置KLAD的过程中必须通过CIPHER模块已创建。
传递明文KEY,KLAD类型必须配置为明文KLAD(OT_KLAD_TYPE_CLEARCW)。
ROOTKEY传递¶
场景说明¶
当安全方案要求高的场景下采用,ROOTKEY经密钥解混淆、密钥派生后产生,经多级KLAD传递后得到一个真正的工作密钥。工作密钥存储在硬件中,用户不可读取。KLAD将工作密钥传递给一个KEYSLOT。加解密时,加解密引擎取对应KEYSLOT中的KEY用于加解密。
工作流程¶
ROOTKEY传递开发操作步骤如下:
KLAD设备初始化。调用接口ss_mpi_klad_init。
创建KLAD句柄。调用接口ss_mpi_klad_create。
绑定KLAD和KEYSLOT句柄。调用接口ss_mpi_klad_attach。
设置KLAD属性。调用接口ss_mpi_klad_set_attr。
设置第1~n-1级KLAD密钥信息。调用接口ss_mpi_klad_set_session_key。
设置第n级KLAD密钥信息。调用接口ss_mpi_klad_set_content_key。
解绑定KLAD和KEYSLOT句柄。调用接口ss_mpi_klad_detach。
销毁KLAD句柄。调用接口ss_mpi_klad_destroy。
去初始化KLAD设备。调用接口ss_mpi_klad_deinit。
注意事项¶
使用ROOTKEY传递时,请特别注意以下几点。
KEYSLOT句柄在配置KLAD的过程中必须通过CIPHER模块已创建。
传递ROOTKEY,KLAD类型必须配置为通用KLAD(OT_KLAD_TYPE_COMMON)。
密钥派生工具说明¶
密钥派生工具位于 osdrv/tools/pc/kdf_customer 目录下。使用命令请参考目录下的 readme.txt 文件,下面主要说明 key.ini 文件相关字段的配置。
表 1 key.ini 字段说明
字段 |
含义 |
|---|---|
function |
功能,选择 3(work key)。 |
encryption |
使用算法,选择 0(AES)。 |
oem_root_symc_key |
烧写到 otp中的 rootkey。 |
protection_key_l1 |
session_key,128 bits。 |
protection_key_l2 |
content_key,若使用 128 bit,则派生出的 work_key 也为 128bit;若使用 256 bit,则派生出的 work_key 也为 256bit。 |
oem_rk_deob_en |
混淆保护。默认为 0,若烧写了相关 otp,需要设置为 1。 |
boot_flag |
work_key 是否在 boot 阶段使用。 |
sw_reg |
派生材料,owner_id。 |
注:
除上述字段外,其他字段无需修改。
若 content_key 为128 bit,则work_key 为生成的 out.bin 文件的前16 Bytes;若 content_key 为 256 bit,则 work_key 为生成的整个 out.bin 文件。
API参考¶
KLAD提供以下API:
ss_mpi_klad_init:初始化KLAD模块。
ss_mpi_klad_deinit:去初始化KLAD模块。
ss_mpi_klad_create:创建一路的KLAD句柄。
ss_mpi_klad_destroy:销毁已存在的KLAD句柄。
ss_mpi_klad_attach:绑定KLAD句柄和KEYSLOT句柄。
ss_mpi_klad_detach:解绑定KLAD句柄和KEYSLOT句柄。
ss_mpi_klad_set_attr:设置KLAD属性。
ss_mpi_klad_get_attr:获取KLAD属性。
ss_mpi_klad_set_session_key:配置第1~n-1级KLAD KEY。
ss_mpi_klad_set_content_key:配置最后一级KLAD KEY,同时将key传递给KEYSLOT。
ss_mpi_klad_set_clear_key:配置明文KEY,同时将key传递给KEYSLOT。
ss_mpi_klad_init¶
【描述】
初始化KLAD模块。
【语法】
td_s32 ss_mpi_klad_init(td_void);
【参数】
无。
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
参见错误码。 |
【需求】
头文件:ot_common_klad.h、ss_mpi_klad.h
库文件:libss_klad.a、libss_klad.so
【注意】
支持多次调用。
初始化和去初始化成对使用。
【举例】
无。
ss_mpi_klad_deinit¶
【描述】
去初始化KLAD模块。
【语法】
td_s32 ss_mpi_klad_deinit(td_void);
【参数】
无。
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
参见错误码。 |
【需求】
头文件:ot_common_klad.h、ss_mpi_klad.h
库文件:libss_klad.a、libss_klad.so
【注意】
支持多次调用。
初始化和去初始化成对使用。
【举例】
无。
ss_mpi_klad_create¶
【描述】
创建一路的KLAD句柄。
【语法】
td_s32 ss_mpi_klad_create (td_handle *klad);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
handle |
KLAD句柄指针。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
参见错误码。 |
【需求】
头文件:ot_common_klad.h、ss_mpi_klad.h
库文件:libss_klad.a、libss_klad.so
【注意】
klad不能为空。
使用完通道后,应销毁对应的通道。
创建与销毁通道成对使用。
【举例】
无。
ss_mpi_klad_destroy¶
【描述】
销毁一路KLAD。
【语法】
td_s32 ss_mpi_klad_destroy (td_handle klad);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
handle |
KLAD句柄。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
参见错误码。 |
【需求】
头文件:ot_common_klad.h、ss_mpi_klad.h
库文件:libss_klad.a、libss_klad.so
【注意】
KLAD句柄必须已创建。
创建与销毁通道成对使用。
【举例】
无。
ss_mpi_klad_attach¶
【描述】
绑定 KLAD 句柄和 KEYSLOT 句柄。
【语法】
td_s32 ss_mpi_klad_attach(td_handle klad, td_handle target);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
handle |
KLAD句柄。 |
输入 |
target |
KEYSLOT句柄。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
参见错误码。 |
【需求】
头文件:ot_common_klad.h、ss_mpi_klad.h
库文件:libss_klad.a、libss_klad.so
【注意】
KLAD、KEYSLOT句柄必须已创建,在句柄未创建的情况下,句柄之间的绑定可能成功,但是会导致功能的失败。
绑定和解绑定必须成对使用。
【举例】
无。
ss_mpi_klad_detach¶
【描述】
解绑定KLAD句柄和KEYSLOT句柄。
【语法】
td_s32 ss_mpi_klad_detach(td_handle klad, td_handle target);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
handle |
KLAD句柄。 |
输入 |
target |
KEYSLOT句柄。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
参见错误码。 |
【需求】
头文件:ot_common_klad.h、ss_mpi_klad.h
库文件:libss_klad.a、libss_klad.so
【注意】
KLAD、KEYSLOT句柄必须已创建。
绑定和解绑定必须成对使用。
【举例】
无。
ss_mpi_klad_set_attr¶
【描述】
设置 KLAD 属性。
【语法】
td_s32 ss_mpi_klad_set_attr(td_handle klad, const ot_klad_attr *attr);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
klad |
KLAD句柄。 |
输入 |
attr |
KLAD属性,不能为空。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
参见错误码。 |
【需求】
头文件:ot_common_klad.h、ss_mpi_klad.h
库文件:libss_klad.a、libss_klad.so
【注意】
KLAD句柄必须已创建。
可多次调用,以最后一次设置的属性为准。
【举例】
无。
ss_mpi_klad_get_attr¶
【描述】
获取KLAD属性。
【语法】
td_s32 ss_mpi_klad_get_attr(td_handle klad, ot_klad_attr*attr);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
klad |
KLAD句柄。 |
输入 |
attr |
KLAD 属性,不能为空。 |
输出 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
参见错误码。 |
【需求】
头文件:ot_common_klad.h、ss_mpi_klad.h
库文件:libss_klad.a、libss_klad.so
【注意】
KLAD句柄必须已创建。
【举例】
无。
ss_mpi_klad_set_session_key¶
【描述】
配置第1~n-1 级 KLAD KEY。
【语法】
td_s32 ss_mpi_klad_set_session_key(td_handle klad, const ot_klad_session_key *key);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
klad |
KLAD句柄。 |
输入 |
key |
1~n-1级 key相关配置,不能为空。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
参见错误码。 |
【需求】
头文件:ot_common_klad.h、ss_mpi_klad.h
库文件:libss_klad.a、libss_klad.so
【注意】
KLAD句柄必须已创建。
不可多次调用。
【举例】
无。
ss_mpi_klad_set_content_key¶
【描述】
配置最后一级 KLAD KEY,同时将key传递给KEYSLOT。
【语法】
td_s32 ss_mpi_klad_set_content_key(td_handle klad, const ot_klad_content_key *key);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
klad |
KLAD句柄。 |
输入 |
key |
第 n 级 key 相关配置,不能为空。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
参见错误码。 |
【需求】
头文件:ot_common_klad.h、ss_mpi_klad.h
库文件:libss_klad.a、libss_klad.so
【注意】
KLAD句柄必须已创建。
不可多次调用。
【举例】
无。
ss_mpi_klad_set_clear_key¶
【描述】
配置明文KEY,同时将key传递给KEYSLOT。
【语法】
td_s32 ss_mpi_klad_set_clear_key(td_handle klad, const ot_klad_clear_key *key);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
klad |
KLAD句柄。 |
输入 |
key |
明文KEY相关配置,不能为空。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
参见错误码。 |
【需求】
头文件:ot_common_klad.h、ss_mpi_klad.h
库文件:libss_klad.a、libss_klad.so
【注意】
KLAD句柄必须已创建。
可多次调用,以最后一次设置的属性为准。
【举例】
无。
数据类型¶
相关数据类型、数据结构定义如下(其他公共数据类型定义请参考ot_type.h):
ot_klad_rootkey_sel:定义KLAD ROOTKEY选择枚举。
ot_klad_rootkey_secure:定义KLAD ROOTKEY的静态值枚举。
ot_klad_rootkey_attr:定义KLAD ROOTKEY属性结构体。
ot_klad_type:定义KLAD类型枚举。
ot_klad_cfg:定义KLAD 配置信息结构体。
ot_klad_crypto_alg:定义KEY在加解密引擎用于哪种算法。
ot_klad_attr:定义KLAD属性结构体。
ot_klad_alg_type:定义KLAD算法类型枚举。
ot_klad_level:定义KLAD层级枚举。
ot_klad_session_key:定义第1~n-1级KLAD密钥信息结构体。
ot_klad_content_key:定义第n级KLAD密钥信息结构体。
ot_klad_clear_key:定义明文密钥信息结构体。
OT_KLAD_MAX_KEY_LEN:定义KLAD最大密钥长度。
ot_klad_rootkey_sel¶
【说明】
定义KLAD ROOTKEY选择枚举。
【定义】
/* klad rootkey select */
typedef enum {
OT_KLAD_ROOTKEY_SEL_OEM0 = 0x00,
OT_KLAD_ROOTKEY_SEL_OEM1,
OT_KLAD_ROOTKEY_SEL_OEM2,
OT_KLAD_ROOTKEY_SEL_OEM3,
OT_KLAD_ROOTKEY_SEL_VENDOR,
OT_KLAD_ROOTKEY_SEL_BUTT,
} ot_klad_rootkey_sel;
【成员】
成员名称 |
描述 |
|---|---|
OT_KLAD_ROOTKEY_SEL_OEM0 |
OTP密钥管理 OEM密钥0。 |
OT_KLAD_ROOTKEY_SEL_OEM1 |
OTP密钥管理 OEM密钥1。 |
OT_KLAD_ROOTKEY_SEL_OEM2 |
OTP密钥管理 OEM密钥2。 |
OT_KLAD_ROOTKEY_SEL_OEM3 |
OTP密钥管理 OEM密钥3。 |
OT_KLAD_ROOTKEY_SEL_VENDOR |
OTP密钥管理 vendor 密钥。 |
OT_KLAD_ROOTKEY_SEL_BUTT |
边界值,做边界检查使用。 |
【注意事项】
无。
【相关数据类型及接口】
ot_klad_rootkey_secure¶
【说明】
定义KLAD ROOTKEY的静态值枚举。
【定义】
typedef enum {
OT_KLAD_ROOTKEY_SEC_REE = 0x00, /* REE key, TEE CPU can select ree key */
OT_KLAD_ROOTKEY_SEC_TEE, /* TEE key, REE CPU can't select tee key */
OT_KLAD_ROOTKEY_SEC_BUTT,
} ot_klad_rootkey_secure;
【成员】
成员名称 |
描述 |
|---|---|
OT_KLAD_ROOTKEY_SEC_REE |
选择REE密钥静态值。 |
OT_KLAD_ROOTKEY_SEC_TEE |
选择TEE密钥静态值。 |
OT_KLAD_ROOTKEY_SEC_BUTT |
边界值,做边界检查使用。 |
【注意事项】
非安全CPU不能选择TEE密钥静态值。
安全CPU能选择REE密钥静态值。
【相关数据类型及接口】
ot_klad_rootkey_attr¶
【说明】
定义KLAD ROOTKEY属性结构体。
【定义】
/* only OT_KLAD_TYPE_COMMON is valid */
typedef struct {
td_u32 owner_id; /* Derivative material, used for mcipher */
ot_klad_rootkey_sel key_sel; /* common klad route select rootkey */
ot_klad_rootkey_secure key_secure; /* Static value select: for ree key or for tee key */
} ot_klad_rootkey_attr;
【成员】
成员名称 |
描述 |
|---|---|
owner_id |
派生材料,用于MCIPHER。 |
key_sel |
COMMON KLAD ROOTKEY选择。 |
key_secure |
COMMON KLAD ROOTKEY静态值选择。 |
【注意事项】
仅在KLAD类型为OT_KLAD_TYPE_COMMON时有效。
【相关数据类型及接口】
ot_klad_type¶
【说明】
定义KLAD类型枚举。
【定义】
/* klad route select */
typedef enum {
OT_KLAD_TYPE_CLEARCW, /* Used for clear key */
OT_KLAD_TYPE_COMMON, /* Used for root key */
OT_KLAD_TYPE_BUTT,
} ot_klad_type;
【成员】
成员名称 |
描述 |
|---|---|
OT_KLAD_TYPE_CLEARCW |
明文KLAD,用于明文KEY。 |
OT_KLAD_TYPE_COMMON |
通用KLAD,用于ROOTKEY。 |
OT_KLAD_TYPE_BUTT |
边界值,做边界检查使用。 |
【注意事项】
无。
【相关数据类型及接口】
ot_klad_cfg¶
【说明】
定义KLAD 配置信息结构体。
【定义】
/* klad config */
typedef struct {
ot_klad_type klad_type; /* klad route select: common/clear */
ot_klad_rootkey_attr rootkey_attr; /* rootkey attr, OT_KLAD_TYPE_COMMON is valid */
} ot_klad_cfg;
【成员】
成员名称 |
描述 |
|---|---|
klad_type |
KLAD类型。 |
rootkey_attr |
ROOTKEY属性配置。 |
【注意事项】
rootkey_attr仅在KLAD类型为OT_KLAD_TYPE_COMMON时有效。
【相关数据类型及接口】
ot_klad_crypto_alg¶
【说明】
定义KEY在加解密引擎用于哪种算法。
【定义】
/* The key can be used for which algorithm of the crypto engine. */
typedef enum {
OT_KLAD_CRYPTO_ALG_AES = 0,
OT_KLAD_CRYPTO_ALG_SM4,
OT_KLAD_CRYPTO_ALG_BUTT,
} ot_klad_crypto_alg;
【成员】
成员名称 |
描述 |
|---|---|
OT_KLAD_CRYPTO_ALG_AES |
用作AES算法。 |
OT_KLAD_CRYPTO_ALG_SM4 |
用作SM4算法。 |
OT_KLAD_CRYPTO_ALG_BUTT |
边界值,做边界检查使用。 |
【注意事项】
SS928V100、SS626V100不支持SM4。
【相关数据类型及接口】
ot_klad_attr¶
【说明】
定义KLAD属性结构体
【定义】
/* klad attribute */
typedef struct {
ot_klad_cfg klad_cfg;
} ot_klad_attr;
【成员】
成员名称 |
描述 |
|---|---|
klad_cfg |
KLAD配置信息。 |
【注意事项】
无。
【相关数据类型及接口】
ot_klad_alg_type¶
【说明】
定义KLAD算法类型枚举。
【定义】
/* klad algorithm */
typedef enum {
OT_KLAD_ALG_TYPE_AES = 0,
OT_KLAD_ALG_TYPE_SM4,
OT_KLAD_ALG_TYPE_BUTT,
} ot_klad_alg_type;
【成员】
成员名称 |
描述 |
|---|---|
OT_KLAD_ALG_TYPE_AES |
KLAD使用AES算法。 |
OT_KLAD_ALG_TYPE_SM4 |
KLAD使用SM4算法。 |
OT_KLAD_ALG_TYPE_BUTT |
边界值,做边界检查使用。 |
【注意事项】
SS928V100、SS626V100不支持SM4。
【相关数据类型及接口】
ot_klad_level¶
【说明】
定义KLAD层级枚举。
【定义】
/* klad level */
typedef enum {
OT_KLAD_LEVEL1 = 0,
OT_KLAD_LEVEL2,
OT_KLAD_LEVEL3,
OT_KLAD_LEVEL_BUTT,
} ot_klad_level;
【成员】
成员名称 |
描述 |
|---|---|
OT_KLAD_LEVEL1 |
KLAD层级1。 |
OT_KLAD_LEVEL2 |
KLAD层级2。 |
OT_KLAD_LEVEL3 |
KLAD层级3。 |
OT_KLAD_LEVEL_BUTT |
边界值,做边界检查使用。 |
【注意事项】
SS928V100、SS626V100支持2级KLAD。
【相关数据类型及接口】
ot_klad_session_key¶
【说明】
定义第1~n-1级KLAD密钥信息结构体。
【定义】
/* session key: set 1~n-1 stage common route klad */
typedef struct {
ot_klad_session_key level; /* klad level */
ot_klad_alg_type alg; /* klad algorithm */
td_u32 key_size; /* klad key size */
td_u8 key[OT_KLAD_MAX_KEY_LEN]; /* klad key */
} ot_klad_session_key;
【成员】
成员名称 |
描述 |
|---|---|
level |
当前配置KLAD层级。 |
alg |
KLAD使用的算法。 |
key_size |
KLAD解密密钥长度(单位:byte)。 |
key |
KLAD解密密钥。 |
【注意事项】
key_size只支持128bits,即16byte。
对于SS928V100、SS626V100,level只能配置OT_KLAD_LEVEL1。
【相关数据类型及接口】
ot_klad_content_key¶
【说明】
定义最后一级KLAD密钥信息结构体。
【定义】
/* content key: set n stage common route klad */
typedef struct {
ot_klad_alg_type alg; /* klad algorithm */
ot_klad_crypto_alg crypto_alg; /* allowed target engine algorithm. */
td_u32 key_size; /* klad key size */
td_u8 key[OT_KLAD_MAX_KEY_LEN]; /* klad key */
} ot_klad_content_key;
【成员】
成员名称 |
描述 |
|---|---|
alg |
当前KLAD使用的算法。 |
crypto_alg |
加解密引擎允许的算法。 |
key_size |
KLAD解密密钥长度(单位:byte),支持128/256bits。 |
key |
KLAD解密密钥。 |
【注意事项】
无。
【相关数据类型及接口】
ot_klad_clear_key¶
【说明】
定义明文密钥信息结构体。
【定义】
/* clear key: set clear route klad */
typedef struct {
ot_klad_crypto_alg crypto_alg; /* allowed target engine algorithm. */
td_u32 key_size; /* klad key size */
td_u8 key[OT_KLAD_MAX_KEY_LEN]; /* klad key */
} ot_klad_clear_key;
【成员】
成员名称 |
描述 |
|---|---|
crypto_alg |
加解密引擎允许的算法。 |
key_size |
KLAD解密密钥长度(单位:byte),支持128/192/256bits。 |
key |
KLAD解密密钥。 |
【注意事项】
无。
【相关数据类型及接口】
OT_KLAD_MAX_KEY_LEN¶
【说明】
定义KLAD最大密钥长度。
【定义】
#define OT_KLAD_MAX_KEY_LEN 32
【注意事项】
无。
【相关数据类型及接口】
错误码¶
KLAD提供的错误码如下所示。
表 1 KLAD模块的错误码
错误代码 |
宏定义 |
描述 |
|---|---|---|
0x805d0000 |
OT_ERR_KLAD_NOT_INIT |
设备未初始化 |
0x805d0001 |
OT_ERR_KLAD_FAILED_INIT |
设备初始化失败 |
0x805d0002 |
OT_ERR_KLAD_NULL_PTR |
参数中有空指针 |
0x805d0003 |
OT_ERR_KLAD_INVALID_PARAM |
无效参数 |
0x805d0004 |
OT_ERR_KLAD_FAILED_CREATE_DEV |
创建设备失败 |
0x805d0005 |
OT_ERR_KLAD_DEVICE_BUSY |
设备忙 |
0x805d0006 |
OT_ERR_KLAD_FAILED_SEC_FUNC |
调用安全函数失败 |
0x805d0007 |
OT_ERR_KLAD_TIMEOUT |
操作超时 |
0x805d0008 |
OT_ERR_KLAD_FAILED_MEM |
分配内存失败 |
0x805d0009 |
OT_ERR_KLAD_FAILED_OPERATE |
KLAD操作失败 |
0x805d000a |
OT_ERR_KLAD_INVALID_OWNER |
无效KLAD拥有者 |
0x805d000b |
OT_ERR_KLAD_INVALID_HANDLE |
无效的KLAD Handle |
缩略语¶
K |
||
KDF |
Key Derivation Function |
密钥派生功能 |
KLAD |
Key Ladder |
层级密钥 |
R |
||
REE |
Rich Execution Environment |
通用执行环境 |
RKP |
Root Key Process |
根密钥处理 |
T |
||
TEE |
Trusted Execution Environment |
可信执行环境 |




