ARMmbed/mbedtls项目中的驱动专用构建指南

ARMmbed/mbedtls项目中的驱动专用构建指南

mbedtls mbedtls 项目地址: https://gitcode.com/gh_mirrors/mbe/mbedtls

概述

在嵌入式系统开发中,为了优化代码大小或利用硬件加速模块,开发者可能需要构建仅通过PSA驱动提供加密功能的Mbed TLS版本。本文将详细介绍如何在ARMmbed/mbedtls项目中配置驱动专用构建,以及相关的技术细节和注意事项。

基本概念

驱动专用构建是指Mbed TLS中某些加密机制完全由PSA驱动提供,而不包含内置实现。这种方式特别适用于以下场景:

  1. 使用硬件加速模块提高性能
  2. 采用针对代码大小优化的替代软件实现
  3. 需要减少固件体积的嵌入式应用

配置基础

必备编译选项

要启用驱动专用构建,需要配置以下编译选项:

  1. MBEDTLS_PSA_CRYPTO_C(默认启用):启用PSA加密功能
  2. MBEDTLS_USE_PSA_CRYPTO(默认禁用):使PK、X.509和TLS模块使用PSA加密
  3. MBEDTLS_PSA_CRYPTO_CONFIG(默认禁用):通过PSA_WANT宏配置加密算法

机制配置步骤

对于每个仅由驱动提供的加密机制,需要:

  1. psa/crypto_config.h中定义对应的PSA_WANT
  2. 在构建中定义对应的MBEDTLS_PSA_ACCEL
  3. mbedtls/mbedtls_config.h中取消定义对应的MBEDTLS_xxx_C

例如,要仅通过驱动提供SHA-256,需要:

  • 定义PSA_WANT_ALG_SHA_256MBEDTLS_PSA_ACCEL_SHA_256
  • 取消定义MBEDTLS_SHA256_C

运行时注意事项

在使用驱动专用机制前,必须调用psa_crypto_init()进行初始化。这已经是PSA加密API的基本要求,当启用MBEDTLS_USE_PSA_CRYPTO时,PK、X.509和TLS模块也需遵循此要求。

支持的加密机制

哈希算法

所有哈希操作都可以仅由驱动提供,包括:

  • SHA-3、SHA-2、SHA-1、MD5等

配置示例:

#define PSA_WANT_ALG_SHA_256
#define MBEDTLS_PSA_ACCEL_ALG_SHA_256
// 取消定义MBEDTLS_SHA256_C

HMAC

HMAC也可以加速,需要:

  1. 启用并加速HMAC算法和密钥类型
  2. 按照哈希部分配置所需的哈希算法

椭圆曲线密码学(ECC)

大多数ECC操作可以仅由驱动提供,包括:

  • ECDH、ECDSA和EC J-PAKE算法
  • 密钥导入、导出和随机生成

配置ECC时需注意:

  1. 必须为所有启用的ECC曲线提供驱动支持
  2. 可以禁用MBEDTLS_ECP_CMBEDTLS_BIGNUM_C以进一步减小代码大小

有限域Diffie-Hellman(FFDH)

配置方式与ECC类似,但需要注意:

  • PSA API仅支持RFC 7919定义的群组
  • 传统API支持自定义群组

RSA

所有RSA操作都可以仅由驱动提供,但目前存在限制:

  • 仅PSA加密API可用
  • PK、X.509和TLS模块不支持驱动专用RSA

密码算法(认证和非认证)

所有密码和AEAD操作都可以仅由驱动提供,包括:

  • AES、ARIA、Camellia等密钥类型
  • CBC、CTR、GCM等多种模式

限制与注意事项

ECC限制

  1. 完全移除ecp.c的限制:

    • 解析压缩格式ECC密钥
    • 解析显式参数曲线
    • 确定性派生ECC密钥对
  2. 可中断操作:

    • 目前不支持驱动提供的可中断ECC操作

密码算法限制

  1. 部分传统模块需要内置实现:

    • NIST密钥包装(MBEDTLS_NIST_KW_C)
    • CMAC(MBEDTLS_CMAC_C)
    • 传统密码API(MBEDTLS_CIPHER_C)
  2. 密钥解析限制:

    • 只能解析使用内置算法加密的密钥

最佳实践

  1. 明确需求:确定哪些算法需要驱动专用实现
  2. 逐步验证:先验证PSA API功能,再测试上层模块
  3. 代码审查:检查所有依赖关系,确保没有意外依赖内置实现
  4. 性能测试:比较驱动实现与内置实现的性能差异

结论

ARMmbed/mbedtls的驱动专用构建功能为嵌入式开发者提供了更大的灵活性,可以在代码大小和性能之间做出最优选择。通过合理配置,开发者可以充分利用硬件加速模块或优化的软件实现,同时保持与标准Mbed TLS API的兼容性。

随着Mbed TLS的持续发展,预计未来会有更多加密机制支持完整的驱动专用构建,为嵌入式安全应用提供更多可能性。

mbedtls mbedtls 项目地址: https://gitcode.com/gh_mirrors/mbe/mbedtls

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

任涌重

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值