文章目录
平台安全架构
PSA,全称Platform Secure Architecture,平台安全架构,是ARM公司在物联网安全领域联合众多芯片厂商推出的一个重要的软件实现架构,主要内容包括:
- 威胁模型
- 安全分析
- 硬件和固件架构规范
- 开源固件参考实现
- 独立评估和认证计划–PSA Certified
TF-M是PSA的一种实现方式,主要基于ARM Cortex-M系列的芯片,除此之外还有TF-A等。Mbedtls也是ARM维护的基于ARM平台的开源嵌入式加密库,现已是trust-frimware的一部分,除了基本的各类加解密算法及安全工具箱的实现,为方便嵌入式开发人员快速编写符合PSA规范的代码,mbedtls提供了各类安全工具的调用接口。源代码见mbdetls/library/psa_crypto.c文件。
Mbedtls PSA库
Key management
PSA支持对称和非对称密钥,实现基础是Mbedtls提供的各类密码箱工具。在导入key的时候需要注意key的type(类型)、usage(用途)和alg(算法)等属性,决定了密文或者签名的长度和解密的数据是否正确。Key在使用时,程序会检查key的policy的合法性,因此key的管理非常重要。主要的key管理函数如下:
- 设置和检查key的用途
static void psa_set_key_usage_flags(psa_key_attributes_t *attributes,
psa_key_usage_t usage_flags);
static psa_key_usage_t psa_get_key_usage_flags(
const psa_key_attributes_t *attributes);
- 设置和检查key的算法
static void psa_set_key_algorithm(psa_key_attributes_t *attributes,
psa_algorithm_t alg);
static psa_algorithm_t psa_get_key_algorithm(
const psa_key_attributes_t *attributes);
- 设置和检查key的类型
static void psa_set_key_type(psa_key_attributes_t *attributes,
psa_key_type_t type);
static psa_key_type_t psa_get_key_type(const psa_key_attributes_t *attributes);
- 获取key的属性
psa_status_t psa_get_key_attributes(mbedtls_svc_key_id_t key,
psa_key_attributes_t *attributes);
- 删除key
psa_status_t psa_destroy_key(mbedtls_svc_key_id_t key);
- 导入导出key,注意
psa_export_public_key函数只能是非对称密钥类型。
psa_status_t psa_import_key(const psa_key_attributes_t *attributes,
const uint8_t *data,
size_t data_length,
mbedtls_svc_key_id_t *key);
psa_status_t psa_export_key(mbedtls_svc_key_id_t key,
uint8_t *data,
size_t data_size,
size_t *data_length);
psa_status_t psa_export_public_key(mbedtls_svc_key_id_t key,
uint8_t *data,
size_t data_size,
size_t *data_length);
导入key后,常用来使用的参数是mbedtls_svc_key_id_t *key,即psa_key_id_t *key,在TF-M中又被命名为psa_key_handle_t *key,这是一个重要的参数,而psa_key_attributes_t *attributes则是指key的属性,内容如下:
typedef struct psa_client_key_attributes_s psa_key_attributes_t;
/* This is the client view of the `key_attributes` structure. Only
* fields which need to be set by the PSA crypto client are present.
* The PSA crypto service will maintain a different version of the
* data structure internally. */
struct psa_client_key_attributes_s
{
uint16_t type;
uint16_t bits;
uint32_t lifetime;
psa_key_id_t id;
uint32_t usage;
uint32_t alg;
};
Message digests
消息摘要,主要计算消息的单向散列函数值,计算hash的函数和Mbedtls类似,psa_hash_operation_t *operation需要先设置使用的算法,算法必须保证PSA_ALG_IS_HASH(alg)为真。
psa_status_t psa_hash_setup(psa_hash_operation_t *operation,
psa_algorithm_t alg);
psa_status_t psa_hash_update(psa_hash_operation_t *operation,
const uint8_t *input,
size_t input_length);
psa_status_t psa_hash_finish(psa_hash_operation_t *operation,
uint8_t *hash,
size_t hash_size,
size_t *hash_length);
PSA提供了一个更简单的Hash计算接口,适合轻量化的计算,使用时需要注意确保hash的长度hash_size应当大于算法输出的长度(根据PSA_HASH_LENGTH(alg)计算)。
psa_status_t psa_hash_compute(psa_algorithm_t alg,
const uint8_t *input,
size_t input_length,
uint8_t *hash,
size_t hash_size,
size_t *hash_length);
MAC
消息认证码(Message authentication codes),用于认证消息,计算的输入为消息和消息发送者持有的密钥(对称密钥),计算和验证消息认证码,计算MAC的函数与Mbedtls类似,可以多次调用update函数计算长消息的MAC,psa_mac_operation_t *operation包含计算消息验证码用的算法和key的信息。
此处key的usage属性必须为PSA_KEY_USAGE_SIGN_MESSAGE | PSA_KEY_USAGE_VERIFY_MESSAGE,算法必须保证PSA_ALG_IS_MAC(alg)为真。
psa_status_t psa_mac_sign_setup(psa_mac_operation_t *operation,
mbedtls_svc_key_id_t key,
psa_algorithm_t alg);
psa_status_t psa_mac_verify_setup(psa_mac_operation_t *operation,
mbedtls_svc_key_id_t key,
psa_algorithm_t alg);
psa_status_t psa_mac_update(psa_mac_operation_t *operation,

本文详细介绍了ARM的Platform Secure Architecture(PSA)及其在Mbedtls中的实现,涵盖密钥管理、消息摘要、MAC、非对称加密、对称加密和AEAD等安全功能。通过示例代码展示了如何使用这些功能进行签名认证、加密解密操作,为物联网设备的安全编程提供了指导。
最低0.47元/天 解锁文章
6058





