2. Struttura COSE di Base
- Struttura COSE di Base
La struttura dell'oggetto COSE è progettata in modo che possa esserci una grande quantità di codice comune durante l'analisi e l'elaborazione dei diversi tipi di messaggi di sicurezza. Tutte le strutture dei messaggi sono costruite sul tipo array CBOR. I primi tre elementi dell'array contengono sempre le stesse informazioni:
-
I parametri dell'intestazione protetta, codificati e avvolti in un bstr.
-
I parametri dell'intestazione non protetta come una mappa (map).
-
Il contenuto del messaggio. Il contenuto è il testo in chiaro o il testo cifrato, a seconda dei casi. Il contenuto può essere distaccato (cioè, trasportato separatamente dalla struttura COSE), ma la posizione viene comunque utilizzata. Il contenuto è avvolto in un bstr quando presente ed è un valore nil quando distaccato.
Gli elementi dopo questo punto dipendono dal tipo di messaggio specifico.
I messaggi COSE sono costruiti utilizzando il concetto di livelli per separare diversi tipi di concetti crittografici. Come esempio di come funziona, considera il messaggio COSE_Encrypt (Sezione 5.1). Questo tipo di messaggio è suddiviso in due livelli: il livello del contenuto e il livello del destinatario. Il livello del contenuto contiene il testo in chiaro cifrato e le informazioni sul messaggio cifrato. Il livello del destinatario contiene la chiave di cifratura del contenuto (CEK) cifrata e le informazioni su come è cifrata, per ogni destinatario. Una versione a livello singolo del messaggio di cifratura COSE_Encrypt0 (Sezione 5.2) è fornita per i casi in cui la CEK è pre-condivisa.
L'identificazione di quale tipo di messaggio è stato presentato viene effettuata dai seguenti metodi:
-
Il tipo di messaggio specifico è noto dal contesto. Questo può essere definito da un marcatore nella struttura contenente o da restrizioni specificate dal protocollo dell'applicazione.
-
Il tipo di messaggio è identificato da un tag CBOR. I messaggi con un tag CBOR sono noti in questa specifica come messaggi con tag, mentre quelli senza il tag CBOR sono noti come messaggi senza tag. Questo documento definisce un tag CBOR per ciascuna delle strutture dei messaggi. Questi tag si possono trovare nella Tabella 1.
-
Quando un oggetto COSE viene trasportato in un tipo di supporto "application/cose", il parametro opzionale "cose-type" può essere utilizzato per identificare l'oggetto incorporato. Il parametro è OPZIONALE se viene utilizzata la versione con tag della struttura. Il parametro è OBBLIGATORIO se viene utilizzata la versione senza tag della struttura. Il valore da utilizzare con il parametro per ciascuna delle strutture si trova nella Tabella 1.
-
Quando un oggetto COSE viene trasportato come payload CoAP, l'opzione CoAP Content-Format può essere utilizzata per identificare il contenuto del messaggio. I valori CoAP Content-Format si trovano nella Tabella 2. Il tag CBOR per la struttura del messaggio non è richiesto, poiché ogni messaggio di sicurezza è identificato in modo univoco.
+==========+===============+===============+=======================+ | CBOR Tag | cose-type | Data Item | Semantics | +==========+===============+===============+=======================+ | 98 | cose-sign | COSE_Sign | COSE Signed Data | | | | | Object | +----------+---------------+---------------+-----------------------+ | 18 | cose-sign1 | COSE_Sign1 | COSE Single Signer | | | | | Data Object | +----------+---------------+---------------+-----------------------+ | 96 | cose-encrypt | COSE_Encrypt | COSE Encrypted Data | | | | | Object | +----------+---------------+---------------+-----------------------+ | 16 | cose-encrypt0 | COSE_Encrypt0 | COSE Single Recipient | | | | | Encrypted Data Object | +----------+---------------+---------------+-----------------------+ | 97 | cose-mac | COSE_Mac | COSE MACed Data | | | | | Object | +----------+---------------+---------------+-----------------------+ | 17 | cose-mac0 | COSE_Mac0 | COSE Mac w/o | | | | | Recipients Object | +----------+---------------+---------------+-----------------------+
Tabella 1: Identificazione del Messaggio COSE
+===========================+==========+=====+===========+
| Media Type | Encoding | ID | Reference |
+===========================+==========+=====+===========+
| application/cose; cose- | | 98 | RFC 9052 |
| type="cose-sign" | | | |
+---------------------------+----------+-----+-----------+
| application/cose; cose- | | 18 | RFC 9052 |
| type="cose-sign1" | | | |
+---------------------------+----------+-----+-----------+
| application/cose; cose- | | 96 | RFC 9052 |
| type="cose-encrypt" | | | |
+---------------------------+----------+-----+-----------+
| application/cose; cose- | | 16 | RFC 9052 |
| type="cose-encrypt0" | | | |
+---------------------------+----------+-----+-----------+
| application/cose; cose- | | 97 | RFC 9052 |
| type="cose-mac" | | | |
+---------------------------+----------+-----+-----------+
| application/cose; cose- | | 17 | RFC 9052 |
| type="cose-mac0" | | | |
+---------------------------+----------+-----+-----------+
| application/cose-key | | 101 | RFC 9052 |
+---------------------------+----------+-----+-----------+
| application/cose-key-set | | 102 | RFC 9052 |
+---------------------------+----------+-----+-----------+
Tabella 2: CoAP Content-Formats per COSE
Il seguente frammento CDDL identifica tutti i messaggi principali definiti in questo documento. Vengono definiti non terminali separati per le versioni con tag e senza tag dei messaggi.
COSE_Messages = COSE_Untagged_Message / COSE_Tagged_Message
COSE_Untagged_Message = COSE_Sign / COSE_Sign1 / COSE_Encrypt / COSE_Encrypt0 / COSE_Mac / COSE_Mac0
COSE_Tagged_Message = COSE_Sign_Tagged / COSE_Sign1_Tagged / COSE_Encrypt_Tagged / COSE_Encrypt0_Tagged / COSE_Mac_Tagged / COSE_Mac0_Tagged