
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.
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:
- 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_Encrypt0eCOSE_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_Sign1end-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
- Classiche:
- Cifratura (AEAD):
AES-GCM(128 / 192 / 256)AES-CCM(varianti)ChaCha20-Poly1305
- Autenticazione dei messaggi (MAC):
HMAC-SHA256,HMAC-SHA384,HMAC-SHA512AES-MAC
- Distribuzione delle chiavi:
DirectAES Key WrapECDH-ES + HKDF
Tipi di messaggio COSE (RFC 9052)
wolfCOSE ha implementato tutti i messaggi RFC 9052 sia nelle varianti single-actor che multi-actor:
| Message | RFC 9052 | API | Purpose |
|---|---|---|---|
COSE_Sign1 | Sec. 4.2 | wc_CoseSign1_Sign / wc_CoseSign1_Verify | Firma con firmatario singolo |
COSE_Sign | Sec. 4.1 | wc_CoseSign_Sign / wc_CoseSign_Verify | Multi-firmatario (firme indipendenti sullo stesso payload) |
COSE_Encrypt0 | Sec. 5.2 | wc_CoseEncrypt0_Encrypt / wc_CoseEncrypt0_Decrypt | AEAD con destinatario singolo |
COSE_Encrypt | Sec. 5.1 | wc_CoseEncrypt_Encrypt / wc_CoseEncrypt_Decrypt | Multi-destinatario (un ciphertext, molti destinatari tramite Direct / AES-KW / ECDH-ES) |
COSE_Mac0 | Sec. 6.2 | wc_CoseMac0_Create / wc_CoseMac0_Verify | MAC con destinatario singolo |
COSE_Mac | Sec. 6.1 | wc_CoseMac_Create / wc_CoseMac_Verify | MAC multi-destinatario (chiave MAC condivisa, distribuita ai destinatari) |
COSE_Key / COSE_KeySet | Sec. 7 | wc_CoseKey_Encode / wc_CoseKey_Decode | Serializzazione 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