attestasion
初始安全证明(Initial Attestation)模块提供基于ECC密钥对生成设备身份证明的能力,支持生成ECC密钥对和获取安全证明Token。
头文件清单
include/middleware/utils/psa/initial_attestation.h
接口清单
| 接口名称 | 功能简述 |
|---|---|
| psa_initial_attest_generate_key | 生成ECC密钥对 |
| psa_initial_attest_get_token | 获取初始安全证明标识符 |
Functions
psa_initial_attest_generate_key
函数声明
psa_status_t psa_initial_attest_generate_key(uint32_t alg, uint8_t *public_key, size_t key_size, size_t *key_length);
头文件清单
include/middleware/utils/psa/initial_attestation.h
功能说明
- 生成ECC密钥对,用于初始安全证明(Initial Attestation)
- 根据入参alg指定的算法选择对应ECC曲线,生成私钥并存储于安全存储区,公钥输出至调用者提供的缓冲区
- 公钥缓冲区大小由key_size指定,实际输出公钥长度通过key_length返回
- 生成的私钥存储于安全存储区,公钥哈希值作为实例ID(Instance ID)存储于安全存储区
前置条件
- 安全存储区已初始化,可正常读写
- 硬件PKE(公钥加密)引擎已就绪,支持对应ECC曲线运算
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| alg | uint32_t | ECC密钥对应的签名算法 | - PSA_INITIAL_ATTEST_SIGN_ALGORITHM_ES256 - PSA_INITIAL_ATTEST_SIGN_ALGORITHM_ES384 - PSA_INITIAL_ATTEST_SIGN_ALGORITHM_ES512 |
| key_size | size_t | 公钥输出缓冲区大小 | 大于等于实际公钥输出长度 |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| public_key | uint8_t * | 生成的ECC公钥数据 |
| key_length | size_t * | 公钥数据的实际字节长度 |
返回值
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| PSA_SUCCESS(0) | 执行成功 | 密钥对生成并存储成功 |
| Other | 其他错误码,参考psa_status_t | 执行失败 |
psa_initial_attest_get_token
函数声明
psa_status_t psa_initial_attest_get_token(const void *challenge_buf, size_t challenge_size, void *token_buf, size_t token_buf_size, size_t *token_size);
头文件清单
include/middleware/utils/psa/initial_attestation.h
功能说明
- 获取初始安全证明标识符(Token),基于ECC密钥对对设备身份信息进行签名
- 输入挑战数据(challenge),生成包含设备身份声明的COSE_Sign1格式的Token
- Token中包含实例ID、实现ID、安全生命周期、启动种子、硬件版本等设备身份声明信息
- Token实际输出长度通过token_size返回,调用者需确保token_buf足够容纳输出数据
前置条件
- 已通过psa_initial_attest_generate_key()生成ECC密钥对,私钥已存储于安全存储区
- 安全存储区中实例ID已存在
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| challenge_buf | const void * | 安全证明的挑战数据缓冲区 | 非NULL |
| challenge_size | size_t | 挑战数据缓冲区大小 | 32(PSA_INITIAL_ATTEST_CHALLENGE_SIZE_32) |
| token_buf_size | size_t | 标识符数据输出缓冲区大小 | 大于0,且不小于challenge_size |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| token_buf | void * | 生成的COSE_Sign1格式Token数据 |
| token_size | size_t * | Token数据的实际字节长度 |
返回值
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| PSA_SUCCESS(0) | 执行成功 | Token生成成功 |
| PSA_ERROR_INVALID_ARGUMENT((-135)) | 参数无效 | challenge_buf为NULL、token_buf为NULL、token_size为NULL、challenge_size不为32、token_buf_size为0或小于challenge_size |
| PSA_ERROR_BUFFER_TOO_SMALL((-138)) | 缓冲区过小 | token_buf_size小于challenge_size |
| Other | 其他错误码,参考psa_status_t | 执行失败 |
Enumerations
psa_initial_attest_alg_t
typedef enum psa_initial_attest_alg {
PSA_INITIAL_ATTEST_SIGN_ALGORITHM_ES256 = 1,
PSA_INITIAL_ATTEST_SIGN_ALGORITHM_ES384 = 2,
PSA_INITIAL_ATTEST_SIGN_ALGORITHM_ES512 = 3
} psa_initial_attest_alg_t;
| 枚举成员 | 取值 | 描述 |
|---|---|---|
| PSA_INITIAL_ATTEST_SIGN_ALGORITHM_ES256 | 1 | ECDSA-SHA256签名算法 |
| PSA_INITIAL_ATTEST_SIGN_ALGORITHM_ES384 | 2 | ECDSA-SHA384签名算法 |
| PSA_INITIAL_ATTEST_SIGN_ALGORITHM_ES512 | 3 | ECDSA-SHA512签名算法 |
Type definitions
psa_status_t
使用说明 作为psa_initial_attest_generate_key和psa_initial_attest_get_token的返回值类型