Espressif ESP32 での耐量子鍵共有

先日、wolfSSLのKyber/ML-KEM実装を商用パッケージに同梱すると発表いたしましたが、弊社のKyber実装はEspressif ESP32のような小規模なものを含むほぼ全てのサイズのデバイスで動作します。

今回は、テスト用サーバ及びクライアントの構成手順をご紹介します。

ESP32 サーバアプリケーション

Kyberを有効にするために、`user_settings.h` に次の行を追加します。

#define WOLFSSL_EXPERIMENTAL_SETTINGS
#define WOLFSSL_HAVE_KYBER
#define WOLFSSL_WC_KYBER
#define WOLFSSL_SHA3

そして、次のようにSSLオブジェクトを作成した後に

ssl = wolfSSL_new(ctx));

以下の行を追加します。

wolfSSL_UseKeyShare(ssl, WOLFSSL_P521_KYBER_LEVEL5);

成功すると、この関数は`SSL_SUCCESS`のコードを返します。
サーバ側には、最小で約10KBのスタックサイズが必要です。

Linux クライアントアプリケーション

ここではwolfSSLクライアントを使用してテストする方法を示します。
まずは実験的なKyber機能を有効にするよう、wolfSSLを設定します。

./configure --enable-kyber=all --enable-experimental

wolfSSLのルートディレクトリで以下のコマンドを実行し、ESP32上で動作するサーバへ接続します。
このとき、ESP32に割り当てられているIPアドレスをご指定ください。

./examples/client/client -h 192.168.1.38 -v 4 \
                         -l TLS_AES_128_GCM_SHA256 \
                         --pqc KYBER_LEVEL5

以下のような文字列が出力されるはずです。

Using Post-Quantum KEM: KYBER_LEVEL5
SSL version is TLSv1.3
SSL cipher suite is TLS_AES_128_GCM_SHA256
I hear you fa shizzle!

Linux サーバアプリケーション

wolfSSLのルートディレクトリで以下のコマンドを実行することで、Linux上でサーバを起ち上げることもできます。

./examples/server/server -v 4 \
                         -l TLS_AES_128_GCM_SHA256
                         --pqc KYBER_LEVEL5

特に文字列の出力はありませんが、ポート11111番でTLS 1.3サーバが起動します。
クライアントとの接続に成功すると、以下のような文字列が出力されるはずです。

Using Post-Quantum KEM: KYBER_LEVEL5
SSL version is TLSv1.3
SSL cipher suite is TLS_AES_128_GCM_SHA256
Client message: hello wolfssl!

ポート11111番の接続を許可するために、ローカルネットワークのファイアウォールルールを変更しなければならない場合があります。
Wiresharkで次のようなTCP再送信パケットを確認できた場合、お手持ちの端末やネットワーク機器のファイアウォール設定をご確認ください。

弊社の耐量子アルゴリズム実装をお試しになりたい方は、ぜひご連絡ください。

フィードバック、ご質問、サポートリクエストも受け付けております。
info@wolfssl.jp までご連絡ください。

原文:https://www.wolfssl.com/post-quantum-key-share-on-the-espressif-esp32/