TLS 1.3 クライアントを 30.8 KB で実現:wolfSSL vs Mbed TLS

wolfSSL の新しい tinytls13 プロファイルと、条件をそろえた Mbed TLS のコードサイズを、Cortex-M33、x86_64、aarch64 で計測しました。

wolfSSL と Mbed TLS はいずれも組み込み向けの小さな TLS を目指していますが、同等のオプションで設定してビルドすると、サイズは同じにはなりません。新しい tinytls13 プロファイルは TLS 1.3 だけをビルドする構成で、それ以外をすべて取り除き、PSK と ECDHE のみの最小構成をデフォルトとしています。これにより、完全な TLS 1.3 PSK クライアントを Cortex-M33 上で 30.8 KB に収めました。これは最小化を徹底した Mbed TLS より 44% 小さい数値です。今回計測したプラットフォームと構成のすべてで、wolfSSL の方が小さくなりました。

計測結果

プラットフォーム別の TLS 1.3 PSK クライアント最小構成のフラッシュ使用量。wolfSSL tinytls13 と Mbed TLS 3.6 の比較
プラットフォーム別に見た TLS 1.3 PSK クライアント最小構成(X25519、SHA-256 のみ)のフラッシュ使用量。wolfSSL tinytls13(青)と Mbed TLS 3.6(グレー)を比較。

命令セットの密度は Thumb-2 が最も高く、aarch64 がその中間で、x86_64 ではコードサイズが最も大きくなりますが、wolfSSL 側の相対的な優位性は 3 つのプラットフォームすべてで維持されます。Cortex-M33 での 4 つの構成の結果は次のとおりです。

構成wolfSSL(バイト)Mbed TLS(バイト)サイズ差
PSK X2551930,83655,544−44%
PSK P-25637,34755,544−33%
証明書(ECDSA P-256)62,76569,348−9%
mTLS66,55470,116−5%

最小構成に含まれない機能は、必要なものだけを追加できます。システムの malloc に依存しない静的メモリプールを使う場合は 31.4 KB、X25519 の代わりに P-256 を使う場合は 36.5 KB、ML-DSA-44 による耐量子暗号の署名検証を加えた場合は、あわせて必要になる SHA-3/SHAKE を含めて 42.8 KB に収まります。

最小構成で差が大きい理由

44% の差の大部分は、1 つの依存関係で説明できます。Mbed TLS の TLS 1.3 は mbedtls_x509_crt がないとビルドがエラーになるため、MBEDTLS_X509_CRT_PARSE_C は有効にしておく必要があります。つまり Mbed TLS では、証明書を一度も扱わない PSK のみのハンドシェイクであっても、自身の X.509 処理コードを含めずに TLS 1.3 クライアントをビルドすることはできません。tinytls13 にはこの依存関係がないため、X.509 を完全にコンパイル対象から外しています。どちらのライブラリも証明書を扱うことを前提とした構成にすると、差は 4%〜9% の範囲に縮まります。

コードサイズの内訳

Cortex-M33 上の約 37 KB の PSK P-256 クライアントにおける構成要素別のコードサイズ内訳
Cortex-M33 上で約 37 KB となる PSK P-256 クライアントの内訳(構成要素別)。シンボル単位のサイズを分類して集計。

暗号処理は 約 12 KB(全体の 32%)にすぎません。ハンドシェイク、拡張、レコード層、鍵スケジュールを含む TLS 1.3 プロトコル部分が 約 18 KB(同 49%)を占めます。フットプリントの大半は、暗号演算ではなくプロトコルです。

計測方法

  • 同じ処理、同じフラグ。どちらのライブラリも -Os -flto -ffunction-sections -fdata-sections と -Wl,--gc-sections を付けてソースからビルドし、wolfSSL_connect と mbedtls_ssl_handshake を実行して比較しました
  • Mbed TLS 側も十分に最適化。baremetal_size プリセット、PSA_WANT_* を最小限にした設定、AES のテーブル縮小オプションを適用し、SHA-256 のみという wolfSSL 側の最小構成に合わせて SHA-384 を無効にしました
  • サイズはリンク後のバイナリから取得。フラッシュは text と data の合計で、内訳は nm が出力するシンボル単位のサイズを集計したもので、全体の 96% を分類できています

クイックスタート

最小構成の wolfSSL TLS 1.3 クライアントは、フラグ 1 つでビルドできます。

./configure --enable-tinytls13
make

すべての構成を CI 上でビルドし、TLS13-AES128-GCM-SHA256 で実際にハンドシェイクを行う make check まで通しています。各数値の正確なビルド手順は、ホワイトペーパーに記載しています。

※2026 年 6 月の計測:wolfSSL v5.9.x(tinytls13)と Mbed TLS 3.6.x を、いずれもソースからビルドしています。Cortex-M33 と aarch64 は GCC 14.2、x86_64 は clang を使用しました。

今すぐ wolfSSL をダウンロード

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

原文:https://www.wolfssl.com/tls-1-3-in-30-8-kb-wolfssl-vs-mbedtls/