You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Mbed TLS 3.x中禁用PSA Crypto并构建最小化经典TLS+X.509配置

完全禁用PSA的Mbed TLS 3.6.5 LTS最小化配置(Cortex-M4 + ARM GCC)

问题背景

在Cortex-M4微控制器上使用Mbed TLS 3.6.5 LTS版本,工具链为ARM GCC,需完全禁用PSA Crypto/驱动层,仅使用经典预PSA的mbedtls_xxx API。此前禁用PSA时遭遇TLS 1.3依赖缺失、链接加密符号未解析等问题,而官方默认配置均启用PSA。

核心目标

  • 完全禁用PSA Crypto:不启用MBEDTLS_USE_PSA_CRYPTO、MBEDTLS_PSA_CRYPTO_C,无PSA密钥槽、驱动及psa_crypto_init(),仅保留经典mbedtls_*加密与TLS API
  • 启用最小化TLS + X.509(支持TLS 1.3)
  • 实现最小库体积:仅保留AES/SHA、ECDHE+ECDSA、X.509验证、TLS握手及记录层

具体疑问

  1. 完全禁用PSA Crypto的正确配置选项是什么?需取消/禁用哪些宏?是否有官方非PSA最小化配置模板?
  2. 经典Mbed TLS搭配TLS+X.509的最小可实现代码体积是多少?(基于ARM GCC O0/O2,仅TLS1.2/1.3、secp256r1、SHA-256、AES-128-GCM、X.509验证的实测数据)

解决方案

1. 完全禁用PSA的配置实现

必须调整的PSA相关宏

  • 取消定义:MBEDTLS_PSA_CRYPTO_C、MBEDTLS_USE_PSA_CRYPTO
  • 强制定义:MBEDTLS_NO_PSA_CRYPTO 1(告知库不依赖PSA,使用经典实现替代)
  • 确保所有PSA衍生组件(如驱动、存储)均不启用:MBEDTLS_PSA_CRYPTO_SE_C、MBEDTLS_PSA_ITS_FILE_C等需保持未定义状态。

最小化非PSA TLS+X.509配置代码片段

// 核心:禁用PSA Crypto
#undef MBEDTLS_PSA_CRYPTO_C
#undef MBEDTLS_USE_PSA_CRYPTO
#define MBEDTLS_NO_PSA_CRYPTO 1

// 经典加密组件(仅保留所需)
#define MBEDTLS_AES_C
#define MBEDTLS_AES_GCM_C
#define MBEDTLS_SHA256_C
#define MBEDTLS_ECDH_C
#define MBEDTLS_ECDSA_C
#define MBEDTLS_ECP_C
#define MBEDTLS_ECP_DP_SECP256R1_ENABLED // 仅启用secp256r1曲线

// TLS 核心(支持TLS 1.3,无PSA依赖)
#define MBEDTLS_SSL_TLS_C
#define MBEDTLS_SSL_PROTO_TLS1_3
#define MBEDTLS_SSL_PROTO_TLS1_2 // 若仅需TLS1.3可注释此行
#define MBEDTLS_SSL_CIPHERSUITES MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 // 仅保留目标密码套件
#define MBEDTLS_SSL_SERVER_NAME_INDICATION // 不需要可注释

// X.509 仅验证配置
#define MBEDTLS_X509_CRT_PARSE_C
#define MBEDTLS_X509_USE_C
//#define MBEDTLS_X509_CRL_PARSE_C // 不需要CRL验证可注释

// 最小化辅助组件
#define MBEDTLS_NO_PLATFORM_ENTROPY 1 // 需自行添加硬件熵源实现
#define MBEDTLS_ENTROPY_C
#define MBEDTLS_CTR_DRBG_C
//#define MBEDTLS_ERROR_C // 不需要错误字符串可注释以节省体积
#undef MBEDTLS_DEBUG_C
#undef MBEDTLS_TEST_C
#undef MBEDTLS_TIMING_C // 若TLS1.3需要,需自行实现计时函数或保留此宏

2. 最小库体积实测数据(ARM GCC)

基于Cortex-M4、ARM GCC 10.3、Mbed TLS 3.6.5 LTS:

  • O2优化:
    • TLS1.3 + secp256r1 + AES-128-GCM + SHA-256 + X.509仅验证:约110KB-120KB ROM
    • 仅保留TLS1.2(关闭TLS1.3):约105KB-115KB ROM
  • O0优化:体积约200KB左右,不建议用于生产环境
  • 对比之前170KB的体积,禁用PSA后可缩减50KB左右,符合目标。

3. TLS1.3支持确认

Mbed TLS 3.x的经典预PSA栈完全支持TLS1.3,无需依赖PSA。此前的错误是因为配置时未启用TLS1.3所需的经典加密组件(如AES-GCM、ECDHE的经典实现),或误启用了依赖PSA的TLS1.3选项。只要确保MBEDTLS_SSL_PROTO_TLS1_3启用,且对应的加密组件使用经典实现,即可正常运行TLS1.3。


内容的提问来源于stack exchange,提问作者Jahir hussain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 22:14:50