Torna agli aggiornamenti
New releaseSep 19, 2026

wolfCOSE v2.0.0

Un'implementazione COSE + CBOR veloce, portatile e leggera per sistemi embedded. Supporta PQC, FIPS 140-3, DO-178 e MISRA C. Realizzata con wolfSSL.

Condividi

wolfCOSE

wolfCOSE è una libreria C leggera e veloce che implementa gli standard principali CBOR e COSE, supportata da wolfSSL per la crittografia.

Standard e RFC supportati

  • Specifiche principali:
    • RFC 8949 - Concise Binary Object Representation (CBOR)
    • RFC 9052 - CBOR Object Signing and Encryption (COSE)
    • RFC 9053 - Algoritmi COSE
    • RFC 9864 - Algoritmi completamente specificati per JOSE e COSE
    • RFC 9338 - Controfirme COSE
  • Crittografia post-quantistica:
  • Attestazione:
    • RFC 9783 - Profilo del token di attestazione PSA di EAT

Funzionalità principali

  • Suite COSE completa (RFC 9052): Supporto completo per tutti e sei i tipi di messaggio, inclusi COSE_Sign1, COSE_Encrypt0 e COSE_Mac0.
  • Controfirme V2 (RFC 9338): Controfirme in-place complete e abbreviate su tutti e sei i tipi di messaggio COSE con tag.
  • Crittografia post-quantistica:
    • ML-DSA (FIPS 204 / RFC 9964) a tutti i livelli di sicurezza.
    • Firma stateful basata su hash HSS/LMS (RFC 8778 / CNSA 2.0).
  • Prestazioni elevate: Su un Intel i9-11950H, COSE_Sign1 end-to-end raggiunge 66.538 firme/s e 26.437 verifiche/s con ES256, e 21.986 firme/s e 53.686 verifiche/s con ML-DSA-44. Consulta i dettagli su prestazioni e footprint e wolfCOSE vs. The Field.
  • Attestazione PSA: Emissione e verifica di token EAT / PSA con supporto alla firma delegata su HSM.
  • 41 algoritmi crittografici: Ampia copertura di algoritmi per firma, cifratura, MAC e distribuzione delle chiavi.
  • Design embedded-first: Zero allocazione dinamica di memoria (nessun heap, zero .data/.bss). Opera su buffer forniti dal chiamante con utilizzo dello stack limitato.
  • Percorso FIPS 140-3: Utilizza wolfCrypt (certificato FIPS #4718) come unica dipendenza crittografica.
  • Integrazione STM32: Pack STM32Cube drop-in (I-CUBE-wolfCOSE) disponibile per STM32CubeMX / IDE (Dettagli).

Algoritmi supportati

  • Firme digitali:
    • Classiche: ESP256, ESP384, ESP512, Ed25519, Ed448, PS256, PS384, PS512
    • Post-quantistiche: ML-DSA-44, ML-DSA-65, ML-DSA-87
    • Stateful basate su hash: HSS-LMS
  • Cifratura (AEAD):
    • AES-GCM (128 / 192 / 256)
    • AES-CCM (varianti)
    • ChaCha20-Poly1305
  • Autenticazione dei messaggi (MAC):
    • HMAC-SHA256, HMAC-SHA384, HMAC-SHA512
    • AES-MAC
  • Distribuzione delle chiavi:
    • Direct
    • AES Key Wrap
    • ECDH-ES + HKDF

Tipi di messaggio COSE (RFC 9052)

wolfCOSE ha implementato tutti i messaggi RFC 9052 sia nelle varianti single-actor che multi-actor:

MessageRFC 9052APIPurpose
COSE_Sign1Sec. 4.2wc_CoseSign1_Sign / wc_CoseSign1_VerifyFirma con firmatario singolo
COSE_SignSec. 4.1wc_CoseSign_Sign / wc_CoseSign_VerifyMulti-firmatario (firme indipendenti sullo stesso payload)
COSE_Encrypt0Sec. 5.2wc_CoseEncrypt0_Encrypt / wc_CoseEncrypt0_DecryptAEAD con destinatario singolo
COSE_EncryptSec. 5.1wc_CoseEncrypt_Encrypt / wc_CoseEncrypt_DecryptMulti-destinatario (un ciphertext, molti destinatari tramite Direct / AES-KW / ECDH-ES)
COSE_Mac0Sec. 6.2wc_CoseMac0_Create / wc_CoseMac0_VerifyMAC con destinatario singolo
COSE_MacSec. 6.1wc_CoseMac_Create / wc_CoseMac_VerifyMAC multi-destinatario (chiave MAC condivisa, distribuita ai destinatari)
COSE_Key / COSE_KeySetSec. 7wc_CoseKey_Encode / wc_CoseKey_DecodeSerializzazione delle chiavi per tutti i tipi di chiave

Le controfirme RFC 9338 possono essere allegate a qualsiasi messaggio con tag in questa tabella. Usa wc_Cose_AddCounterSignature() o wc_Cose_AddCounterSignature0() per aggiungerne una, quindi verificala in modo indipendente con la corrispondente API wc_Cose_VerifyCounterSignature*().

Dipendenze (wolfSSL)

wolfCOSE richiede wolfSSL come backend crittografico. Versione minima supportata: v5.8.0-stable. Alcuni algoritmi opzionali richiedono release più recenti; consulta Getting Started per le soglie di dipendenza specifiche per funzionalità e le istruzioni di build. HSS/LMS (RFC 8778) richiede v5.9.2-stable o successiva.

Scegli una configurazione di build in base agli algoritmi di cui hai bisogno.

Build minimale (ECC + AES-GCM)

Questo ti fornisce COSE Sign1 (ESP256/384/512) e Encrypt0 (AES-GCM):

cd wolfssl
./autogen.sh
./configure --enable-ecc --enable-aesgcm \
            --enable-sha384 --enable-sha512 --enable-keygen
make && sudo make install
sudo ldconfig

Algoritmi abilitati: ESP256, ESP384, ESP512, AES-GCM-128/192/256

Per un footprint di wolfCrypt più ridotto, aggiungi --enable-cryptonly per eliminare lo stack TLS e disabilitare gli algoritmi che una build Sign1 + Encrypt0 non utilizza mai:

./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

Consulta Tuning for Size e Tuning for Speed per ridurre ulteriormente wolfCOSE e wolfCrypt su MCU.

Build minimale (solo post-quantistica / ML-DSA)

Per la firma puramente post-quantistica con ML-DSA-44/65/87:

cd wolfssl
./autogen.sh
./configure --enable-cryptonly --enable-mldsa
make && sudo make install
sudo ldconfig

Algoritmi abilitati: ML-DSA-44, ML-DSA-65, ML-DSA-87 (SHAKE-128/256 vengono inclusi automaticamente da --enable-mldsa. L'API wc_MlDsaKey richiede wolfSSL più recente di v5.9.1-stable.)

Build completa (tutti gli algoritmi)

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

Build

# 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

Target di build

Categorie