
wolfCOSE v2.0.0
組み込みシステム向けの高速、ポータブル、軽量なCOSE + CBOR実装。PQC、FIPS 140-3、DO-178、MISRA Cをサポート。wolfSSL採用。
wolfCOSE
wolfCOSEは、暗号処理にwolfSSLを採用した、CBORおよびCOSEのコア標準を実装する軽量かつ高速なCライブラリです。
サポートする標準規格とRFC
- コア仕様:
- 耐量子暗号:
- アテステーション:
- RFC 9783 - EATのPSAアテステーショントークンプロファイル
主な機能
- 完全なCOSEスイート (RFC 9052):
COSE_Sign1、COSE_Encrypt0、COSE_Mac0を含む全6種類のメッセージタイプを完全サポート。 - V2カウンター署名 (RFC 9338): 全6種類のタグ付きCOSEメッセージタイプに対する完全版および省略版のインプレースカウンター署名。
- 耐量子暗号:
- すべてのセキュリティレベルにおけるML-DSA (FIPS 204 / RFC 9964)。
- HSS/LMSステートフルハッシュベース署名 (RFC 8778 / CNSA 2.0)。
- 高速パフォーマンス: Intel i9-11950H上で、エンドツーエンドの
COSE_Sign1はES256で66,538 sign/sおよび26,437 verify/s、ML-DSA-44で21,986 sign/sおよび53,686 verify/sに達します。パフォーマンスとフットプリントの詳細およびwolfCOSE vs. The Fieldをご覧ください。 - PSAアテステーション: 委任HSM署名をサポートするEAT / PSAトークンの発行と検証。
- 41種類の暗号アルゴリズム: 署名、暗号化、MAC、鍵配送にわたる幅広いアルゴリズムカバレッジ。
- 組み込みファースト設計: 動的メモリ割り当てゼロ (ヒープなし、
.data/.bssゼロ)。呼び出し元が提供するバッファ上で動作し、スタック使用量は有界。 - FIPS 140-3パス: 唯一の暗号依存関係としてwolfCrypt (FIPS Certificate #4718)を使用。
- STM32統合: STM32CubeMX / IDE向けのドロップインSTM32Cubeパック (
I-CUBE-wolfCOSE) を提供 (詳細)。
サポートするアルゴリズム
- デジタル署名:
- 古典的:
ESP256、ESP384、ESP512、Ed25519、Ed448、PS256、PS384、PS512 - 耐量子:
ML-DSA-44、ML-DSA-65、ML-DSA-87 - ステートフルハッシュベース:
HSS-LMS
- 古典的:
- 暗号化 (AEAD):
AES-GCM(128 / 192 / 256)AES-CCM(各種バリアント)ChaCha20-Poly1305
- メッセージ認証 (MAC):
HMAC-SHA256、HMAC-SHA384、HMAC-SHA512AES-MAC
- 鍵配送:
DirectAES Key WrapECDH-ES + HKDF
COSEメッセージタイプ (RFC 9052)
wolfCOSEは、RFC 9052のすべてのメッセージをシングルアクター版とマルチアクター版の両方で実装しています:
| メッセージ | RFC 9052 | API | 目的 |
|---|---|---|---|
COSE_Sign1 | Sec. 4.2 | wc_CoseSign1_Sign / wc_CoseSign1_Verify | 単一署名者による署名 |
COSE_Sign | Sec. 4.1 | wc_CoseSign_Sign / wc_CoseSign_Verify | マルチ署名者 (同一ペイロードに対する独立した署名) |
COSE_Encrypt0 | Sec. 5.2 | wc_CoseEncrypt0_Encrypt / wc_CoseEncrypt0_Decrypt | 単一受信者AEAD |
COSE_Encrypt | Sec. 5.1 | wc_CoseEncrypt_Encrypt / wc_CoseEncrypt_Decrypt | マルチ受信者 (1つの暗号文をDirect / AES-KW / ECDH-ES経由で多数の受信者へ) |
COSE_Mac0 | Sec. 6.2 | wc_CoseMac0_Create / wc_CoseMac0_Verify | 単一受信者MAC |
COSE_Mac | Sec. 6.1 | wc_CoseMac_Create / wc_CoseMac_Verify | マルチ受信者MAC (共有MAC鍵を受信者へ配布) |
COSE_Key / COSE_KeySet | Sec. 7 | wc_CoseKey_Encode / wc_CoseKey_Decode | すべての鍵タイプの鍵シリアライゼーション |
RFC 9338カウンター署名は、この表の任意のタグ付きメッセージに付加できます。
wc_Cose_AddCounterSignature()または
wc_Cose_AddCounterSignature0()で追加し、対応する
wc_Cose_VerifyCounterSignature*() APIで独立して検証します。
依存関係 (wolfSSL)
wolfCOSEは暗号バックエンドとしてwolfSSLを必要とします。 サポートされる最小バージョン: v5.8.0-stable。一部のオプションアルゴリズムは より新しいリリースを必要とします。機能ごとの依存関係の下限とビルド手順については Getting Startedを参照してください。HSS/LMS (RFC 8778) はv5.9.2-stable以降が必要です。
必要なアルゴリズムに基づいてビルド構成を選択してください。
最小ビルド (ECC + AES-GCM)
これによりCOSE Sign1 (ESP256/384/512) とEncrypt0 (AES-GCM) が利用可能になります:
cd wolfssl
./autogen.sh
./configure --enable-ecc --enable-aesgcm \
--enable-sha384 --enable-sha512 --enable-keygen
make && sudo make install
sudo ldconfig
有効になるアルゴリズム: ESP256、ESP384、ESP512、AES-GCM-128/192/256
wolfCryptのフットプリントをさらに小さくするには、--enable-cryptonlyを追加してTLS
スタックを除外し、Sign1 + Encrypt0ビルドでは決して使用されないアルゴリズムを無効化します:
./configure --enable-cryptonly --enable-ecc --enable-aesgcm \
--enable-sha384 --enable-sha512 --enable-keygen \
--enable-lowresource \
--disable-dh --disable-rsa --disable-aescbc \
--disable-sha --disable-md5 --disable-chacha --disable-poly1305 \
--disable-errorstrings
MCU上でwolfCOSEとwolfCryptをさらに絞り込む方法については、Tuning for SizeおよびTuning for Speed を参照してください。
最小ビルド (耐量子 / ML-DSAのみ)
ML-DSA-44/65/87による純粋な耐量子署名の場合:
cd wolfssl
./autogen.sh
./configure --enable-cryptonly --enable-mldsa
make && sudo make install
sudo ldconfig
有効になるアルゴリズム: ML-DSA-44、ML-DSA-65、ML-DSA-87
(SHAKE-128/256は--enable-mldsaによって自動的に取り込まれます。
wc_MlDsaKey APIはv5.9.1-stableより新しいwolfSSLを必要とします。)
フルビルド (全アルゴリズム)
cd wolfssl
./autogen.sh
./configure --enable-ecc --enable-ed25519 --enable-ed448 \
--enable-curve25519 --enable-aesgcm --enable-aesccm \
--enable-sha384 --enable-sha512 --enable-keygen \
--enable-rsapss --enable-chacha --enable-poly1305 \
--enable-mldsa --enable-lms \
--enable-hkdf --enable-aeskeywrap
make && sudo make install
sudo ldconfig
ビルド
# Core library (libwolfcose.a)
make
# Run unit tests
make test
# Build and run CLI tool round-trip tests (all algorithms)
make tool-test
# Run lifecycle demo (11 algorithms)
make demo
ビルドターゲット
| ターゲット | 説明 |
|---|---|
make all | libwolfcose.aをビルド (コアライブラリのみ) |
make shared | libwolfcose.soをビルド |
make test | CBORおよびCOSEの単体テストをビルドして実行 |
make pkg-config-test | wolfSSLのパッケージ検出とオーバーライドを検証 |
make eat-psa-test | 明示的な完全RFC 9783 PSA/EAT準拠スイートをビルドして実行 |
make eat-psa-min-buffers-test | WOLFCOSE_MIN_BUFFERS制約ターゲット制限付きで完全なPSA/EATスイートを実行 |
make eat-psa-config-check | PSA/EATがデフォルトで無効であることを検証し、機能ゲートの組み合わせを検証 |
make psa-eat-lean-verify | 完全な#tfm検証専用PSA/EAT RFCベクター例をビルドして実行 |
make psa-eat-demo | 現在のRFC 9783デバイスオンボーディングトークンを発行、検証、評価 |
make tool | CLIツール (tools/wolfcose_tool) をビルド |
make tool-test | 全17アルゴリズムのラウンドトリップセルフテスト |
make demo | ライフサイクルデモ (11アルゴリズム) をビルドして実行 |
make clean | すべてのビルド成果物を削除 |
クイックスタート
サンプル
完全な動作コードについてはexamples/を参照してください:
sign1_demo.c、encrypt0_demo.c、mac0_demo.c: アルゴリズムのデモlifecycle_demo.c: エッジからクラウドまでの完全なワークフローcomprehensive/: アルゴリズムマトリックステストscenarios/: ファームウェア署名、アテステーション、フリート設定psa_eat_demo.c: 測定値評価を伴うRFC 9783デバイスオンボーディングpsa_eat_verify_lean.c: リーンビルドにおけるRFC 9783現行プロファイルSign1検証
CI / テスト
毎回のプッシュとPRで実行:
- ビルド + テスト: Ubuntu、macOS、GCC 10-14、Clang 14-18
- 包括的テスト: 約240のアルゴリズム組み合わせテスト
- 静的解析: cppcheck、Clangアナライザー、GCC
-fanalyzer - MISRA C 2012: cppcheck
--addon=misraで全wolfCOSEコードパスをチェック - MISRA C 2023: 厳格なGCC警告とclang-tidy (
bugprone-*、cert-*、clang-analyzer-*、misc-*) - Coverity Scan: 夜間の欠陥解析
- 内部静的解析: Fenrir wolfssl高度静的解析ツール
- コードカバレッジ: すべてのwolfCOSEソースファイルで100%の行カバレッジを強制
make coverage # Run tests with gcov
make coverage-force-failure # Include crypto failure path testing