wolfCOSE 2.0.0 をリリースしました。wolfCOSE は、wolfCrypt をベースに構築した、動的メモリ割り当てを一切行わない CBOR(RFC 8949)と COSE(RFC 9052)の完全な C 実装です。メジャーアップデートとなる今回のリリースでは、標準化された HSS/LMS ステートフルハッシュベース署名、RFC 9338 副署名、RFC 9783 PSA/EAT アテステーション、RFC 9864 の完全指定型署名アルゴリズム、委任署名に加え、実験的な COSE-HPKE も追加しました。組み込みシステムに求められる、小さく決定論的なメモリフットプリントは引き続き維持しています。
機能 1:HSS/LMS ステートフルハッシュベース署名
v1.0.0 では、ML-DSA(FIPS 204 / RFC 9964)の 3 つのセキュリティレベルすべてに対応していました。v2.0.0 では、NIST が標準化した 2 つ目の耐量子暗号ファミリーである HSS/LMS を、RFC 8778 の COSE 表現を用いて追加しました。COSE_Sign1、複数の署名者による COSE_Sign、委任署名のほか、署名専用・検証専用の軽量プロファイルでも使用できます。
機能 2:PSA/EAT アテステーションと委任署名
v2.0.0 では、COSE_Sign1 と COSE_Mac0 の両方のエンベロープで、RFC 9783 PSA/EAT アテステーショントークンの発行と検証に対応しました。UEID による鍵の選択、ソフトウェアコンポーネントの列挙、現行とレガシーの両プロファイルに対応しています。また、トークンを発行するだけのデバイスには検証側のコードをリンクせずに済むよう、コンパイル時の切り替えも用意しました。
アテステーション鍵は、格納先のハードウェアの外に出ることがほとんどありません。そこで委任署名では、HSM、セキュアエレメント、PSA Crypto サービス、またはリモートの KMS が署名を生成し、wolfCOSE はメッセージの構築と解析を担います。秘密鍵が wolfCOSE に渡ることはなく、COSE_Sign1、COSE_Sign、ML-DSA、HSS/LMS のすべてで同じ仕組みを使用できます。
機能 3:RFC 9338 副署名
v2.0.0 では、6 種類すべてのタグ付きメッセージタイプに、RFC 9338 の副署名(countersignature)を完全形式・省略形式の両方で追加しました。別の当事者が既存のメッセージに承認の署名を直接加えることができ、その署名は独立して検証できます。承認チェーン、監査証拠、複数者による認可に欠かせない機能です。元の COSE メッセージを作り直す必要もありません。
デフォルトのアルゴリズム識別子を RFC 9864 準拠に変更
RFC 9864 は、1 つの識別子が複数の曲線に対応しうるRFC 9053 の署名アルゴリズム識別子を、アルゴリズムと対象の曲線を結び付けた完全指定型のアルゴリズムに置き換えるものです。wolfCOSE 2.0.0 では、デフォルトで ESP256、ESP384、ESP512、Ed25519、Ed448 を使用します。
動作の変更:非推奨となった ES256、ES384、ES512、EdDSA の識別子を使用するには、WOLFCOSE_ENABLE_DEPRECATED_ALGS の定義が必要です。保護されたアルゴリズム識別子は署名の対象に含まれるため、既存のメッセージのラベルだけを付け替えることはできず、再署名が必要です。
実験的な COSE-HPKE 対応
v2.0.0 では、COSE_Encrypt0 と複数受信者の COSE_Encrypt を対象に、実験的な COSE-HPKE P0 サポートを追加しました。コマンドラインから利用でき、自動テストも用意しています。使用するには、WOLFCOSE_EXPERIMENTAL に加えて、対象の HPKE 操作を個別に有効化する必要があります。これにより、アプリケーションが明示的に求めない限り、ドラフト段階のプロトコルの動作が製品向けのビルドに含まれることはありません。
v2.0.0 のその他の改善点
- COSE_Key と CBOR API の拡充:エンコード後の正確なサイズの取得、公開鍵のみのエンコード、ECC の raw 座標への対応、鍵のインポート前のメタデータ確認、より安全なコンテキスト初期化、スキップした CBOR 項目のゼロコピー取得
- STM32 との統合:I-CUBE-wolfCOSE パックにより、STM32CubeMX と STM32CubeIDE にそのまま組み込めます。デバイス上で実行するテストも含まれます
- MISRA C:2012 と C:2023 のチェックを実施。リリース時の品質確認として、C と C++ でのコンパイル、Valgrind による検査、統合カバレッジの計測、再現可能なソースアーカイブの作成を行っています
- CI の拡充:cppcheck、Clang アナライザー、GCC
-fanalyzer、Coverity、CodeQL と Semgrep、ASan と UBSan に加え、t_cose/QCBOR、go-cose、python-cwt、Rust coset、OpenSSL、RFC のテストベクターとの相互運用性テスト - wolfCrypt FIPS 証明書 #4718 を利用した FIPS 140-3 への道筋。wolfCrypt は引き続き、wolfCOSE が依存する唯一の暗号ライブラリです
導入方法
wolfCOSE の暗号バックエンドには wolfSSL 5.8.0 以降、ML-DSA を使用する場合は wolfSSL 5.9.2 以降が必要です。
git clone https://github.com/wolfSSL/wolfCOSE.git
cd wolfCOSE
git checkout v2.0.0
make
make test
- リリースノート
- ソースコード:github.com/wolfSSL/wolfCOSE
- ドキュメント:README と wiki
- フットプリントとパフォーマンスの設定:wolfCOSE Footprint wiki
- ほかのライブラリとの比較:wolfCOSE vs. The Field
wolfCOSE は、GPLv3 と商用ライセンスのデュアルライセンスで提供しています。
もし弊社製品についてご質問があれば、お問い合わせ窓口info@wolfssl.jpまでご連絡をお願い致します。
