跳转至

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

typedef int32_t psa_status_t;

使用说明 作为psa_initial_attest_generate_key和psa_initial_attest_get_token的返回值类型

Macros

PSA_INITIAL_ATTEST_CHALLENGE_SIZE_32

#define PSA_INITIAL_ATTEST_CHALLENGE_SIZE_32 (32u)