1. Introduzione
- Introduzione
C'è stata una maggiore attenzione sui piccoli dispositivi vincolati che compongono l'Internet of Things (IoT). Uno degli standard emersi da questo processo è "Concise Binary Object Representation (CBOR)" [STD94]. CBOR ha esteso il modello di dati della JavaScript Object Notation (JSON) [STD90] consentendo dati binari, tra le altre modifiche. CBOR è stato adottato da diversi gruppi di lavoro IETF che si occupano del mondo IoT come metodo di codifica delle strutture dati. CBOR è stato progettato specificamente per essere piccolo in termini di messaggi trasportati e dimensioni di implementazione e per avere un decoder senza schema. Esiste la necessità di fornire servizi di sicurezza dei messaggi per l'IoT e l'utilizzo di CBOR come formato di codifica dei messaggi ha senso.
La specifica principale COSE è costituita da due documenti. [RFC9052] contiene le strutture di serializzazione e le procedure per l'utilizzo dei diversi algoritmi crittografici. Questo documento fornisce un insieme iniziale di algoritmi da utilizzare con tali strutture.
1.1. Terminologia dei requisiti
Le parole chiave "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", e "OPTIONAL" in questo documento devono essere interpretate come descritto in BCP 14 [RFC2119] [RFC8174] quando, e solo quando, appaiono in maiuscolo, come mostrato qui.
1.2. Modifiche rispetto alla RFC 8152
-
Estratte le sezioni che trattano algoritmi specifici e inserite in questo documento. Le sezioni che trattano la struttura e le regole generali di elaborazione sono inserite in [RFC9052].
-
Apportati chiarimenti testuali e modifiche alla terminologia.
-
Rimossi tutti i dettagli relativi alle controfirme e inseriti in [COUNTERSIGN].
1.3. Terminologia del documento
In questo documento, utilizziamo la seguente terminologia:
Byte: Un sinonimo di ottetto.
Constrained Application Protocol (CoAP): Un protocollo di trasferimento web specializzato per l'uso in sistemi vincolati. È definito in [RFC7252].
Authenticated Encryption (AE) algorithms [RFC5116]: Algoritmi di crittografia che forniscono un controllo di autenticazione del contenuto insieme al servizio di crittografia. Un esempio di algoritmo AE utilizzato in COSE è AES Key Wrap [RFC3394]. Questi algoritmi sono utilizzati per la crittografia delle chiavi, ma gli algoritmi Authenticated Encryption with Associated Data (AEAD) sarebbero preferiti.
AEAD algorithms [RFC5116]: Algoritmi di crittografia che forniscono lo stesso servizio di autenticazione del contenuto degli algoritmi AE e consentono anche di includere dati associati che non fanno parte del corpo crittografato nel servizio di autenticazione. Un esempio di algoritmo AEAD utilizzato in COSE è AES-GCM [RFC5116]. Questi algoritmi sono utilizzati per la crittografia del contenuto e possono essere utilizzati anche per la crittografia delle chiavi.
Il termine "byte string" è utilizzato per sequenze di byte, mentre il termine "text string" è utilizzato per sequenze di caratteri.
Le tabelle per gli algoritmi contengono le seguenti colonne:
-
Un nome per l'algoritmo da utilizzare nei documenti.
-
Il valore utilizzato sul filo per l'algoritmo. Un punto in cui viene utilizzato è il parametro di intestazione dell'algoritmo di un messaggio.
-
Una breve descrizione in modo che l'algoritmo possa essere facilmente identificato durante la scansione del registro IANA.
Colonne aggiuntive possono essere presenti in una tabella a seconda degli algoritmi.
1.4. Grammatica CDDL per strutture dati CBOR
Quando COSE è stato originariamente scritto, la Concise Data Definition Language (CDDL) [RFC8610] non era ancora stata pubblicata in una RFC, quindi non poteva essere utilizzata come linguaggio di descrizione dei dati per descrivere normativamente le strutture dati CBOR impiegate da COSE. Per questo motivo, gli oggetti dati CBOR definiti qui sono descritti in prosa. Descrizioni aggiuntive (non normative) degli oggetti dati COSE sono fornite in un sottoinsieme di CDDL, descritto in [RFC9052].
1.5. Esempi
È stato creato un progetto GitHub su [GitHub-Examples] che contiene una serie di esempi di test. Ogni esempio si trova in un file JSON che contiene gli input utilizzati per creare l'esempio, alcuni dei valori intermedi che possono essere utilizzati per il debug e l'output dell'esempio. I risultati sono codificati utilizzando sia il formato esadecimale che quello di notazione diagnostica CBOR.
Alcuni degli esempi sono progettati per essere casi di test di fallimento; questi sono chiaramente contrassegnati come tali nel file JSON.