こんにちは、
ECDSA(MBEDTLS_ECP_DP_SECP256R1)で署名を検証するために、mbedTLSを独自に構築することに成功しました。
代替実装がない場合(すべての計算が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 CASPARドライバーAPIによって異なりますが、一般的なアプローチは、ecdsa_verify()から直接CASPERを呼ぶのではなく、P-256のスカラー乗算プリミティブに対してmbedTLSの代替/最適化された実装を提供することです。
こんにちは、 @s_hdl
ECDSA検証は複数の算術および楕円曲線演算で構成されているため、単一のCASPARプリミティブにマッピングされません。
MCUXpresso SDKでは、この統合はすでにCASPER PSA Cryptoポートで実装されています。casper_mbedtls_ecdsa_verify() 関数は、u1 と u2 の計算を含む、標準的な ECDSA 検証フローを実行します。そして、次のように呼び出します。
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 CASPARポートに対応しているかも確認してください。
lpcxpresso55s06_psa_crypto_examplesを参照してください。
BR
ハリー
こんにちは、ハリーさん。
あなたの回答は大変参考になりました。ありがとうございました。CASPERの実装を使うようになってからはすべて正常に動作するようになりました。
よろしくお願いします。