Mbed TLS 4 把密码学功能迁移到了 TF-PSA-Crypto 和 PSA Crypto API(psa_sign_message、psa_verify_message、psa_generate_key),Arm 的 Trusted Firmware 使用的也是这套 API。本页的事实基于 Alpine 3.24.2 的软件包 Mbed TLS 4.1.1 检查得出(当时上游已发布到 4.2.0);与所有嵌入式库一样,可用功能取决于构建配置。
与源自 OpenSSL 的代码不同的是签名编码:PSA 返回原始 r‖s 形式(P-256 上为 64 字节),而不是 DER。用于 X.509、CMS 或 OpenSSL 验证方的签名必须包装为 DER,来自这些对端的 DER 签名也必须先解包,才能交给 psa_verify_message,否则它会报告 PSA_ERROR_INVALID_SIGNATURE——与伪造签名或 3 字节数据块得到的状态相同。可以用 DER ⇄ 原始格式转换器转换。
每个密钥都带有一条只允许一种算法的策略,因此在 PSA_ALG_ECDSA(随机 nonce)和 PSA_ALG_DETERMINISTIC_ECDSA(RFC 6979——复现了该 RFC 的测试向量)之间的选择,要像示例那样在创建密钥时做出。s 没有经过规范化,验证时也接受 high-S。psa_sign_hash 对预先计算好的摘要签名。
这个构建在 P-256、P-384、P-521、secp256k1 和 Brainpool r1 曲线上的签名与验证均成功;P-224 不可用,Ed25519 密钥生成被拒绝(PSA_ERROR_NOT_SUPPORTED)。后量子支持仅限于验证 LMS 这种基于哈希的签名(MBEDTLS_LMS_C);没有 ML-KEM 或 ML-DSA 密钥类型,来自 mldsa-native 的实验性 ML-DSA 驱动(TF_PSA_CRYPTO_PQCP_MLDSA_ENABLED)在该构建的配置中被注释掉了。公钥通过 PSA 导出为 SEC1 未压缩点,通过 pk 层导出为 SPKI DER。