Skip to content

ポスト量子署名

wolfBootはポスト量子署名のサポートを追加しています。 現在、LMS/HSSおよびXMSS/XMSS^MTのサポートが追加しています。

LMS/HSSとXMSS/XMSS^MTはどちらもポスト量子ステートフルハッシュベース署名(HBS)方式です。 これらは小さな公開鍵、比較的高速な署名と検証を行いますが、署名サイズが大きいことで知られています。 ただし、署名サイズはそれぞれのパラメータによって調整可能であり、サイズと処理時間のトレードオフがあります。

ステートフルHBS方式は、基礎となるハッシュ関数とマークルツリーのセキュリティに基づいており、暗号学的に関連する量子コンピュータの出現によって破られることは予想されていません。 このため、NIST SP 800-208とNSAのCNSA 2.0スイートの両方で推奨されています。

ステートフルHBSサポートとwolfSSL/wolfCryptの詳細については、以下のリンクをご参照ください。

サポートされているPQ署名方法

以下の4つのPQ署名オプションをサポートしています。

  • LMS: wc_lms.cwc_lms_impl.cによるwolfcrypt実装を使用します。
  • XMSS: wc_xmss.cwc_xmss_impl.cによるwolfcrypt実装を使用します。
  • ext_LMS: ext_lms.cからの外部統合を使用します。
  • ext_XMSS: ext_xmss.cからの外部統合を使用します。

wolfcrypt実装はより高性能であり、推奨しています。 外部統合は実験的であり、相互運用性のテスト用です。

LMS/HSS設定

新しいLMSシミュレーションサンプルを以下に掲載しています。

config/examples/sim-lms.config

LMS_LEVELSLMS_HEIGHTLMS_WINTERNITZIMAGE_SIGNATURE_SIZE、(オプションで)IMAGE_HEADER_SIZEを設定する必要があります。

SIGN?=LMS
...
LMS_LEVELS=2
LMS_HEIGHT=5
LMS_WINTERNITZ=8
...
IMAGE_SIGNATURE_SIZE=2644
IMAGE_HEADER_SIZE?=5288

LMSでは、署名サイズはパラメータの関数です。 LMSパラメータに基づいて署名の長さを計算するために、追加されたヘルパースクリプトtools/lms/lms_siglen.shを使用してください。

$ ./tools/lms/lms_siglen.sh  2 5 8
levels:     2
height:     5
winternitz: 8
signature length: 2644

XMSS/XMSS^MT設定

新しいXMSSシミュレーションサンプルを以下に掲載しています。

config/examples/sim-xmss.config

XMSS_PARAMSIMAGE_SIGNATURE_SIZE、(オプションで)IMAGE_HEADER_SIZEを設定する必要があります。

SIGN?=XMSS
...
XMSS_PARAMS='XMSS-SHA2_10_256'
...
IMAGE_SIGNATURE_SIZE=2500
IMAGE_HEADER_SIZE?=5000

XMSS_PARAMSはNIST SP 800-208の表10および11からのSHA256パラメータセット文字列であれば何でも構いません。 XMSS/XMSS^MTパラメータ文字列に基づいて署名の長さを計算するには、ヘルパースクリプトtools/xmss/xmss_siglen.shを使用してください。

使用例:

$ ./tools/xmss/xmss_siglen.sh XMSS-SHA2_10_256
parameter set:    XMSS-SHA2_10_256
signature length: 2500
$ ./tools/xmss/xmss_siglen.sh XMSSMT-SHA2_20/2_256
parameter set:    XMSSMT-SHA2_20/2_256
signature length: 4963

外部PQ統合のビルド

ext_LMSサポート

wolfCryptの外部LMS/HSSサポートには、hash-sigsライブラリが必要です。 hash-sigsをwolfBootでビルドするために準備するには、次の手順を使用します。

$ cd lib
$ mkdir hash-sigs
$ ls
 CMakeLists.txt  hash-sigs  wolfssl  wolfTPM
$ cd hash-sigs
$ mkdir lib
$ git clone https://github.com/cisco/hash-sigs.git src
$ cd src
$ git checkout b0631b8891295bf2929e68761205337b7c031726
$ git apply ../../../tools/lms/0001-Patch-to-support-wolfBoot-LMS-build.patch

これ以上は必要ありません。 wolfBootが必要なhash-sigsビルド成果物を自動的に生成します。

注意:hash-sigsプロジェクトは静的ライブラリのみをビルドします。

  • hss_verify.a: シングルスレッドの検証専用静的ライブラリ
  • hss_lib.a: シングルスレッドの静的ライブラリ
  • hss_lib_thread.a: マルチスレッドの静的ライブラリ

keytoolsユーティリティはhss_lib.aにリンクされており、鍵生成、署名、検証機能がすべて必要です。 ただし、wolfBootは検証機能のみが必要なため、hss_verify.aビルドルールのオブジェクトのサブセットに直接リンクされます。

ext_XMSSサポート

wolfCryptの外部XMSS/XMSS^MTサポートには、xmss-referenceライブラリのパッチ適用版が必要です。 xmss-referenceをwolfBootでビルドするために、以下の手順でご用意ください。

$ cd lib
$ git clone https://github.com/XMSS/xmss-reference.git xmss
$ ls
CMakeLists.txt  wolfPKCS11  wolfTPM  wolfssl  xmss
$ cd xmss
$ git checkout 171ccbd26f098542a67eb5d2b128281c80bd71a6
$ git apply ../../tools/xmss/0001-Patch-to-support-wolfSSL-xmss-reference-integration.patch

パッチは追加のreadme patch_readme.md を作成するもので、追加コメントを記載しています。

パッチ適用ステップ以外は何も必要ありません。 wolfBootが必要なxmssビルド成果物を処理します。