你好,
我成功地自行构建了 mbedTLS,以便使用 ECDSA 验证签名(MBEDTLS_ECP_DP_SECP256R1)。
如果没有替代实现(所有计算均由 CPU 完成),在 LPC55S06 上进行签名验证最多需要 4 秒才能完成计算。
我现在正在尝试将 mbedTLS ecdsa_verify() 函数与 CASPER fsl 驱动程序链接起来。但我并不清楚,因为ECDSA的核查似乎并非单一操作。
如何将 CAPSER 的基本原语(SECP256R1_Mul 和 SECP256R1_MulAdd)与 mbedTLS 函数 ECDSA_verify() 连接起来?
感谢您的回复。
你好 peter89jean,
感谢你的回复。您提到的方法正是我所想的,但是 mbedTLS 配置文件中似乎没有简单直接的 SECP256R1_MULADD _ALT或 SECP256R1_MUL _ALT定义。或许我应该去专门讨论mbdedTLS的论坛问问这个问题。
再次感谢。
问候。
通常情况下,您不需要替换 mbedtls_ecdsa_verify() 本身;CASPER 加速应该集成到 mbedTLS 内部使用的椭圆曲线/乘法层中。ECDSA 验证需要计算标量乘法及其和,因此 SECP256R1_Mul() 可以处理单个标量点乘法,而 SECP256R1_MulAdd() 可以加速组合运算。具体集成取决于您的 mbedTLS 版本和 NXP CASPER 驱动程序 API,但通常的做法是为 P-256 标量乘法原语提供 mbedTLS 替代/优化实现,而不是直接从 ecdsa_verify() 调用 CASPER。
ECDSA 验证包含多个算术和椭圆曲线运算,因此它无法映射到单个 CASPER 原语。
在 MCUXpresso SDK 中,CASPER PSA Crypto 端口已经实现了集成。casper_mbedtls_ecdsa_verify() 函数执行标准的 ECDSA 验证流程,包括计算 u1 和 u2。然后它调用:
casper_mbedtls_ecp_muladd(grp, &R, u1, &grp->G, u2, Q);
R = u1 × G + u2 × Q
ECP 适配层将 mbedTLS MPI 值和椭圆曲线点转换为 CASPER 所需的 格式 , 并将 此 操作 映射 到CASPER_ECC_SECP256R1_MulAdd() 。
类似地,casper_mbedtls_ecp_mul() 将 单个 标 量 乘法 映射 到CASPER_ECC_SECP256R1_Mul() 。
因此, 我们 建议 不要 直接 修改 , 而是mbedtls_ecdsa_verify() 重复使用 SDK 提供 的 完整 CASPER 集成, 具体 如下 :
component/psa_crypto_driver/casper_driver
mcux_psa_casper_ecdsa_port.c
mcux_psa_casper_ecp_port.c
由于您是单独构建的 mbedTLS,请确保您的 mbedTLS 版本与 MCUXpresso SDK CASPER 端口兼容。
您可以参考lpcxpresso55s06_psa_crypto_examples。
BR
哈里
你好,哈利,
您的回答对我的帮助很大,谢谢。现在使用 CASPER 实现一切正常。
此致问候