tinytls13のご紹介:完全なクライアントを約30KBのフラッシュに収める最小構成の TLS 1.3 ビルドプロファイル

tinytls13は、リソースが極めて限られたデバイス向けにwolfSSLへ新しく追加したビルドプロファイルです。ARM Cortex-M33 上で、完全に動作する TLS 1.3 クライアントを約30.8KBのフラッシュにコンパイルできます。X.509も、お客様が必要としない余分な機能も含みません。

開発した理由

セキュアブート、アテステーション、IoT接続では、TLS 1.3 の必要性がますます高まっています。その一方で、TLS 1.3 は最小クラスのマイクロコントローラーには大きすぎるという見方が根強くあります。tinytls13はこの懸念を解消します。TLS 1.3 専用のプロファイルとして、TLS 1.3 以外のものをすべて取り除き、実用的な最小のハンドシェイクをデフォルトとしました。極めて小さな土台から始めて、製品に必要な機能だけを追加していただけます。

どれくらい小さいのか

ベアメタルの ARM Cortex-M33 では、PSKの最小構成を30.8KBのフラッシュ(textとdataの合計)にリンクできます。同じ手順は Intel x86_64 と ARM aarch64 でも再現でき、絶対的なサイズは命令セットによって決まります。このフットプリントのうち暗号が占めるのは約3分の1で、残りは TLS 1.3 プロトコルそのものです。

必要な機能だけを追加可能

最小構成は意図的に切り詰めてあります。TLS 1.3 のみ、クライアントのみ、鍵交換グループは1つ(デフォルトはX25519)、AES-128-GCM、SHA-256、X.509なしという構成です。ここから、必要なものだけを選んで有効化していただけます。

  • ゼロヒープメモリ:システムのmallocを使わない静的メモリプールで、約1.3KB増加します
  • NIST P-256:曲線をX25519から P-256 に変更すると、約6KB増加します
  • 証明書とmTLS:最小限のX.509検証を加えるとクライアントは約61KBに、相互認証まで加えると約65KBになります
  • 耐量子暗号:ML-DSA-44 の署名検証は約43KBに収まります

フラグ1つで設定可能

最小のクライアントはconfigureフラグ1つで構成でき、測定した各構成もそれぞれスイッチ1つで切り替えられます。

./configure --enable-tinytls13                  # PSK X25519 の最小構成 (~30.8 KB)
./configure --enable-tinytls13=psk,p256         # PSK with NIST P-256
./configure --enable-tinytls13=cert             # X.509 certificate verify
./configure --enable-tinytls13=cert,mutualauth  # mutual TLS
make

フラッシュのサイズはリンク済みバイナリからsizeコマンドで直接読み取れるため、いずれの数値もお使いのツールチェーンで簡単に確認していただけます。Mbed TLS と条件をそろえた比較を含む、ビルド手順の全体はサイズ比較ベンチマークに掲載しています。

提供状況

tinytls13はwolfSSLで現在ご利用いただけます。すべての構成をCIでビルドしてテストしており、各プロファイルで実際の TLS 1.3 ハンドシェイクを確認しています。ご利用の開始や、お使いのハードウェアに合わせたフットプリント目標のご相談は、info@wolfssl.jpまでお気軽にご連絡ください。

tinytls13はプルリクエスト #10751でwolfSSLに追加しました。詳細と実装の全体については、同じく PR #10751 をご覧ください。

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

原文:https://www.wolfssl.com/introducing-tinytls13-a-minimal-tls-1-3-build-profile-that-fits-a-complete-client-in-about-30-kb-of-flash/