Cortex-M 向け wolfSSL チューニング:速度とコードサイズを両立するビルドオプション

Cortex-M 向けの wolfSSL ビルドは、デフォルトでは公開鍵演算にサイズ最小の実装を使用しますが、この実装は最も低速でもあります。設定を3点変更したところ、TLS 1.3 のフルハンドシェイクが 2800 ms から 262 ms へと10倍高速になり、同時にイメージサイズも小さくなりました。以下の数値はすべて NUCLEO-U385RG-Q(STM32U385、Cortex-M33)で測定したものです。

  • 特に重要なのは WOLFSSL_SP_ARM_CORTEX_M_ASM です。ECC と RSA の演算を Cortex-M アセンブリで処理します。ECDSA P-256 の検証は 609 ms から 50 ms に短縮され、ハンドシェイクは 10.7倍高速になります。このアセンブリによるフラッシュ使用量の増加は 3.9 KB です
  • このアセンブリを有効にする際は、WOLFSSL_SP_SMALL を残してください。WOLFSSL_SP_SMALL まで外すと、サイズが 44 KB 増える一方で、速度はほとんど向上しません
  • TLS でネゴシエートされない機能は無効にしてください。3DES は明示的に無効化しない限り組み込まれるため NO_DES3 を定義し、WOLFSSL_SHA3、HAVE_CHACHA、HAVE_POLY1305、WOLFSSL_SHA224、WOLFSSL_CMAC は未定義のままにします。今回のビルドでは、これらの機能が合計 18 KB を占めていました

これらの変更により、イメージは当初の構成より 7% 小さくなりました。速度が10倍になり、しかもフラッシュ使用量も減るというのは、速度とサイズのトレードオフを考えると珍しい結果です。だからこそ、どの Cortex-M ターゲットでもデフォルト設定を見直す価値があります。

ここまでの内容は、Cortex-M 全般に当てはまります。暗号エンジンを搭載したチップであれば、さらに性能を引き出せます。STM32U3 と STM32U5 は PKA と AES エンジンを搭載しており、WOLFSSL_STM32U3 または WOLFSSL_STM32U5 と WOLFSSL_STM32_PKA を定義すると利用できます。アセンブリと併せて両エンジンを使用したところ、同じハンドシェイクは 203 ms になりました。また、ハードウェア AES-GCM はソフトウェアの 281 KiB/s に対して 7.30 MiB/s を記録しました。PKA は ECDSA を高速化しますが ECDH 鍵合意は高速化しないため、アセンブリを置き換えるのではなく、併用してください。

まずは設定テンプレートをご覧ください!

もし弊社製品についてご質問があれば、お問い合わせ窓口info@wolfssl.jpまでご連絡をお願い致します。

原文:https://www.wolfssl.com/tuning-wolfssl-for-cortex-m-build-options-for-speed-and-code-size/