wolfPKCS11 2.1.0 をリリースしました。本バージョンでは、PKCS#11 実装に耐量子暗号を導入し、CMake ビルドシステムと Doxygen による API ドキュメントを追加し、PKCS#11 仕様への準拠に関する多数の不足点を解消しました。あわせて、メモリ安全性の強化を実施し、CI と相互接続性テストの範囲を拡充しています。
耐量子暗号
2.1.0 の目玉は耐量子暗号への対応です。FIPS 204 の署名方式で、かつて Dilithium と呼ばれていた ML-DSA と、FIPS 203 の鍵カプセル化メカニズムで、かつて Kyber と呼ばれていた ML-KEM の両方に対応しました。ML-DSA では CKA_SEED を用いた秘密鍵のインポートに対応し、メカニズムと識別子の名称を、標準化されたアルゴリズムに合わせて確定しました。
これにより、wolfPKCS11 を PKCS#11 プロバイダとして利用しているアプリケーションは、これまでと同じ標準インターフェースのまま、署名や鍵確立の処理を耐量子アルゴリズムへ移行し始めることができます。既存の統合モデルを変更する必要はありません。
CMake ビルド対応と API ドキュメント
wolfPKCS11 を最近のツールチェーンに組み込みやすくしました。本リリースでは、既存の Autotools に加えて CMake ビルドシステムを追加し、CMake のパッケージ設定を Debian の -dev パッケージに同梱しています。これにより、下流のプロジェクトからそのまま利用できます。
さらに、PKCS#11 インターフェースを網羅する Doxygen の API ドキュメントを追加しました。対応している関数、メカニズム、属性を、開発者がブラウザ上で参照できます。
PKCS#11 仕様への準拠
本リリースでは、その大きな部分を PKCS#11 仕様に対する準拠上の不足点の解消に充てています。その多くは、異常系テストと静的解析によって洗い出したものです。主な内容は次のとおりです。
- CKR_OPERATION_ACTIVE を正しく扱うように修正しました
- 鍵のラップ時に CKA_EXTRACTABLE を強制するようにしました
- SHA-512 の切り詰め形式(SHA-512/224 および SHA-512/256)を修正しました
- C_GenerateRandom および C_SeedRandom における CK_ULONG の長さの切り詰めを修正しました
- 仕様に合わせて複数の属性のデフォルト値を修正し、関連する C_DeriveKey、C_CopyObject、C_DestroyObject、カプセル化、C_Login の強制動作もあわせて修正しました
2.0 からのアップグレード
これらの修正の一部は属性のデフォルト値を変更するため、2.0 で作成したアプリケーションや保存済みトークンは、アップグレード後に動作が変わる場合があります。2.1 より前の動作は、次のマクロをビルド時に定義することで復元できます。
- WOLFPKCS11_LEGACY_COPYABLE_FALSE_DEFAULT:未設定の CKA_COPYABLE が CK_FALSE として読み出される、従来の動作に戻します(PKCS#11 のデフォルトは CK_TRUE です)
- WOLFPKCS11_LEGACY_PRIVATE_FALSE_DEFAULT:秘密鍵および共通鍵において、未設定の CKA_PRIVATE が CK_FALSE として読み出される従来の動作に戻し、オブジェクト生成時の対応するログイン状態チェックを無効にします(PKCS#11 のデフォルトは CK_TRUE です)
- WOLFPKCS11_LEGACY_WRAP_TRUE_DEFAULT:未設定の CKA_WRAP または CKA_UNWRAP が CK_TRUE となる、従来の動作に戻します(PKCS#11 のデフォルトは CK_FALSE です)
可能な限り、仕様に準拠した新しいデフォルト値でテストしていただくことを推奨します。従来のマクロは、既存のトークンやアプリケーションが古い値に依存している場合に限ってお使いください。
メモリ安全性の強化
本リリースでは、弊社内部のコードスキャンツール Fenrir が検出した準拠上の指摘と静的解析の指摘を幅広く解消しました。あわせて、リソースリークとバッファの安全な消去に関する修正、およびその他の細かな不具合の修正も行っています。
テスト、CI、相互接続性
これらの改善を確実に維持するため、テストと CI の対象範囲を大幅に拡充しました。API 全体にわたる異常系テストと検証、複数回呼び出しの HMAC リグレッションテスト、C_VerifyRecover のテスト、wolfSSL の master ブランチに対する相互接続性テスト、そしてリグレッションを早期に検出するための wolfBoot 連携テストを新たに追加しています。CI では C++ ビルドも対象とし、すべてのワークフローにジョブ単位のタイムアウトを適用したうえで、上流の依存関係の変更を追跡できるように更新しました。
謝辞
C_GenerateRandom および C_SeedRandom の長さの切り詰めに関する修正をご提供いただき、また本リリースで解消した複数の問題をご報告いただいた Denis Mingulov 氏に感謝いたします。
入手方法
wolfPKCS11 2.1.0 は現在ご利用いただけます。変更履歴の全文の確認とリリースのダウンロードは、wolfPKCS11 の GitHub リリースページをご覧ください。リポジトリを直接クローンしてソースコードを入手し、組み込んでいただくこともできます。
wolfSSL のダウンロードはこちらからどうぞ。
もし弊社製品についてご質問があれば、お問い合わせ窓口info@wolfssl.jpまでご連絡をお願い致します。
