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/
