wolfTPM v4.1.0 では、v4.0.0 でお約束した耐量子暗号への移行パスを提供するとともに、ファームウェアTPM(fwTPM)の堅牢化に大きく取り組みました。主な機能は次の3つです。
- TPM 2.0 v1.85 耐量子暗号:ML-DSA と ML-KEM を、ネイティブおよび fwTPM で利用できます
- fwTPM の堅牢化:TCG仕様に準拠した辞書攻撃対策、SPDMセキュア転送、セッション・ポリシー・NVの不具合修正
- 実行時のTPMロカリティ制御:1回のAPI呼び出しで locality 0〜4 を実行時に選択できます
これらはすべて、FIPS 140-3 や DO-178C DAL A の導入実績を持つ wolfCrypt エンジン上で動作します。
機能1:TPM 2.0 v1.85 耐量子暗号
v4.0.0 では耐量子暗号のサポートを「近日対応」としてリリースしました。今回それが実現しました。fwTPM に TPM 2.0 v1.85 の耐量子暗号アルゴリズムを実装しました。ML-DSA の署名・検証と ML-KEM のカプセル化・カプセル解除に対応し、TCG Phase B に準拠したシード処理、TPM2_CreateLoaded による ML-DSA プライマリ鍵、サンプルでの PQC パラメータ暗号化、PQC 専用の CI とファジングのカバレッジを追加しました。
使う機能だけをビルドする
耐量子暗号の鍵とコードはサイズが大きいため、v4.1.0 では実際に実行する操作だけに PQC のフットプリントを絞り込めるよう、段階的なビルドマクロを追加しました。
--enable-pqc # 軽量な ML-DSA + ML-KEM サブセット
--enable-mldsa[=all|sign-only|verify-only|no]
--enable-mlkem[=all|enc|dec|no]
--disable-hash-mldsa
–enable-pqc を、軽量な PQC サブセットを選択するように変更しました。–enable-v185 は従来どおり仕様全体のビルドです。アルゴリズム単位(WOLFTPM_MLDSA、WOLFTPM_MLKEM)および操作単位のマクロには、それぞれ対応する WOLFTPM_NO_* のオプトアウトを用意しました。新たに _ex 系のセッション、OAEP、PQCハッシュのラッパーを追加して API を整備しました。また、PQC のビルドには wolfSSL v5.8.0 以降を必須とし、上流の変更を検知する CI も用意しました。
機能2:fwTPM の堅牢化
v4.0.0 で導入したファームウェアTPMに対して、ディスクリートハードウェアとの差を埋めるための大規模な改良を行いました。
TCG仕様に準拠した辞書攻撃対策
- NVインデックスだけでなく、オブジェクト(TPMA_OBJECT_noDA)でも noDA を尊重するようにしました
- failedTries を NV に永続化しました。非正常シャットダウン時の +1 ペナルティも含みます
- recoveryTime による自己回復と、独立した lockoutRecovery に対応し、DAプロパティを TPM2_GetCapability で報告するようにしました
- 新しいラッパー wolfTPM2_DictionaryAttackLockReset と wolfTPM2_DictionaryAttackParameters、da_check サンプル、CIのリトライハーネスを追加しました
セッション、ポリシー、NV
- コマンドポートの再接続をまたいで一時的な状態を保持するようにしました
- パスワード認証の応答で continueSession を設定し、PolicyAuthorize のゼロチケット処理に対応しました
- ライトワンス方式のフラッシュ移植向けに、アペンドオンリーのNVジャーナルを追加しました
- 一時的にビジーを返すTPMのために、TPM_RC_RETRY を透過的に処理するオプションを追加しました。TPM2_SetCommandRetries または -DWOLFTPM_MAX_RETRIES=N で有効にできます
- SPDMセキュア転送を fwTPM にも拡張し、FIPS 140-3 のケーパビリティ報告に対応しました
機能3:実行時のTPMロカリティ制御
TPMのロカリティを使うと、信頼された初期ブートコード(DRTM)による測定と、通常のソフトウェアによる測定をプラットフォームが区別できます。新しい wolfTPM2_SetLocality(dev, locality) APIを追加し、実行時に locality 0〜4 を選択できるようにしました。PCRリセットのサンプルには -loc=n フラグを追加しています。TIS/SPIドライバ、およびソケットと TIS/SHM 経由の fwTPM で動作します。ロカリティのインターフェースを持たないプラットフォームでは、NOT_COMPILED_IN を返します。
fwTPM のPCRごとのロカリティ強制を、TCG PC Client プロファイルに一致する単一のテーブルに置き換えました。動作の変更点として、DRTM の PCR 17〜22 は locality 0 から Extend できなくなりました。これは仕様が要求するとおりの動作です。
v4.1.0 のその他の改善
- 暗号プリミティブの新しいサンプル(getrandom、hash、AES、ECDH)と WOLFTPM2_ECC_DEFAULT_CURVE オプションを追加しました
- オプションのハードウェアリセットHAL:–enable-hal-reset により、Linux の GPIO キャラクタデバイス経由で nRST 信号をパルス出力します
- 標準Cライブラリを持たないベアメタルターゲット向けに、WOLFTPM_NO_STD_HEADERS によるフリースタンディングビルドに対応しました
- SBOM生成(make sbom):EUサイバーレジリエンス法(CRA)対応のための CycloneDX および SPDX ドキュメントを生成します
- TPM_CAP_ALGS / TPM_CAP_COMMANDS のケーパビリティページングを修正し、Nations NS350 のサンプルも修正しました
- 大規模なセキュリティ堅牢化:Fenrir による自動レビュー、fwTPM 経路全体の Coverity 指摘の修正、CodeQL/Semgrep によるレビューゲートを実施しました
- CIとビルドの改善:CMakeテストの拡充、GHCRコンテナイメージ、ナイトリーファジングを追加しました
使い始める
git clone https://github.com/wolfSSL/wolfTPM.git
cd wolfTPM
git checkout v4.1.0
./configure --enable-fwtpm --enable-pqc
make && make check
- リリースノート:github.com/wolfSSL/wolfTPM/releases/tag/v4.1.0
- 変更履歴:ChangeLog.md
- サンプル:examples/ ディレクトリ。新しい da_check、PCRロカリティ、暗号プリミティブのデモを含みます
商用ライセンス、FIPS 140-3 対応、DO-178C DAL A 認証キット、カスタムHAL移植、TPM 2.0 v1.85 の耐量子暗号の導入支援についても承っております。
もし弊社製品についてご質問があれば、お問い合わせ窓口info@wolfssl.jpまでご連絡をお願い致します。
