Passa al contenuto principale

7. Oggetti Chiave

  1. Oggetti Chiave

Una struttura COSE Key è costruita su una mappa CBOR. L'insieme di parametri comuni che possono apparire in una COSE Key può essere trovato nel registro IANA "COSE Key Common Parameters" [COSE.KeyParameters] (vedere la Sezione 11.2). Parametri aggiuntivi definiti per tipi di chiavi specifici possono essere trovati nel registro IANA "COSE Key Type Parameters" [COSE.KeyTypes].

Un COSE Key Set utilizza un oggetto array CBOR come suo tipo sottostante. I valori degli elementi dell'array sono COSE Keys. Un COSE Key Set DEVE avere almeno un elemento nell'array. Esempi di COSE Key Sets possono essere trovati nell'Appendice C.7.

Ogni elemento in un COSE Key Set DEVE essere elaborato in modo indipendente. Se un elemento in un COSE Key Set è malformato o utilizza una chiave che non è compresa da un'applicazione, quella chiave viene ignorata e le altre chiavi vengono elaborate normalmente.

L'elemento "kty" è un elemento obbligatorio in una mappa COSE_Key.

La grammatica CDDL che descrive COSE_Key e COSE_KeySet è:

   COSE_Key = {
1 => tstr / int, ; kty
? 2 => bstr, ; kid
? 3 => tstr / int, ; alg
? 4 => [+ (tstr / int) ], ; key_ops
? 5 => bstr, ; Base IV
* label => values
}

COSE_KeySet = [+COSE_Key]

7.1. Parametri Comuni della Chiave COSE

Questo documento definisce un insieme di parametri comuni per un oggetto chiave COSE. La Tabella 4 fornisce un riepilogo dei parametri definiti in questa sezione. Ci sono anche parametri definiti per tipi di chiavi specifici. I parametri specifici del tipo di chiave possono essere trovati in [RFC9053].

  +=========+=======+========+============+====================+
| Nome | Eti- | Tipo | Registro | Descrizione |
| | chetta| CBOR | Valori | |
+=========+=======+========+============+====================+
| kty | 1 | tstr / | COSE Key | Identificazione |
| | | int | Types | del tipo di chiave |
+---------+-------+--------+------------+--------------------+
| kid | 2 | bstr | | Valore di identi- |
| | | | | ficazione chiave |
| | | | | -- corrisponde a |
| | | | | "kid" nel messag- |
| | | | | gio |
+---------+-------+--------+------------+--------------------+
| alg | 3 | tstr / | COSE | Restrizione d'uso |
| | | int | Algorithms | della chiave a |
| | | | | questo algoritmo |
+---------+-------+--------+------------+--------------------+
| key_ops | 4 | [+ | | Restringere l'in- |
| | | (tstr/ | | sieme delle ope- |
| | | int)] | | razioni permesse |
+---------+-------+--------+------------+--------------------+
| Base IV | 5 | bstr | | Base IV da combi- |
| | | | | nare in XOR con |
| | | | | gli IV Parziali |
+---------+-------+--------+------------+--------------------+

Tabella 4: Etichette Mappa Chiave

kty: Questo parametro è utilizzato per identificare la famiglia di chiavi per questa struttura e, quindi, l'insieme di parametri specifici del tipo di chiave da trovare. L'insieme di valori definiti in questo documento può essere trovato in [COSE.KeyTypes]. Questo parametro DEVE essere presente in un oggetto chiave. Le implementazioni DEVONO verificare che il tipo di chiave sia appropriato per l'algoritmo in elaborazione. Il tipo di chiave DEVE essere incluso come parte del processo di decisione sulla fiducia.

alg: Questo parametro è utilizzato per limitare l'algoritmo utilizzato con la chiave. Se questo parametro è presente nella struttura della chiave, l'applicazione DEVE verificare che questo algoritmo corrisponda all'algoritmo per il quale la chiave viene utilizzata. Se gli algoritmi non corrispondono, allora questo oggetto chiave NON DEVE essere utilizzato per eseguire l'operazione crittografica. Si noti che la stessa chiave può trovarsi in una struttura di chiave diversa con un algoritmo diverso o nessun algoritmo specificato; tuttavia, questa è considerata una scarsa pratica di sicurezza.

kid: Questo parametro è utilizzato per fornire un identificatore per una chiave. L'identificatore non è strutturato e può essere qualsiasi cosa, da una stringa di byte fornita dall'utente a un valore calcolato sulla porzione pubblica della chiave. Questo campo è destinato a corrispondere a un parametro "kid" in un messaggio al fine di filtrare l'insieme di chiavi che devono essere controllate. Il valore dell'identificatore non è un valore univoco e può apparire in altri oggetti chiave, anche per chiavi diverse.

key_ops: Questo parametro è definito per limitare l'insieme di operazioni per le quali una chiave deve essere utilizzata. Il valore del campo è un array di valori dalla Tabella 5. Gli algoritmi definiscono i valori delle operazioni chiave che sono autorizzati ad apparire e sono richiesti per operazioni specifiche. L'insieme di valori corrisponde a quello in [RFC7517] e [W3C.WebCrypto].

Base IV: Questo parametro è definito per trasportare la porzione base di un IV. È progettato per essere utilizzato con il parametro di intestazione Partial IV definito nella Sezione 3.1. Questo campo fornisce la capacità di associare un Base IV a una chiave che viene poi modificata su base messaggio con il Partial IV.

  È necessaria estrema attenzione quando si utilizza un Base IV in un'applicazione. Molti algoritmi di crittografia perdono sicurezza se lo stesso IV viene utilizzato due volte.

Se chiavi diverse sono derivate per ogni mittente, iniziare dallo stesso Base IV probabilmente soddisferà questa condizione. Se la stessa chiave viene utilizzata per più mittenti, allora l'applicazione deve fornire un metodo per dividere lo spazio IV tra i mittenti. Questo potrebbe essere fatto fornendo un punto base diverso da cui iniziare o un Partial IV diverso con cui iniziare e limitando il numero di messaggi da inviare prima di cambiare chiave.

+=========+=======+==============================================+
| Nome | Valore| Descrizione |
+=========+=======+==============================================+
| sign | 1 | La chiave è utilizzata per creare firme. |
| | | Richiede campi chiave privata. |
+---------+-------+----------------------------------------------+
| verify | 2 | La chiave è utilizzata per la verifica delle |
| | | firme. |
+---------+-------+----------------------------------------------+
| encrypt | 3 | La chiave è utilizzata per la crittografia |
| | | del trasporto chiave. |
+---------+-------+----------------------------------------------+
| decrypt | 4 | La chiave è utilizzata per la decifrazione |
| | | del trasporto chiave. Richiede campi chiave |
| | | privata. |
+---------+-------+----------------------------------------------+
| wrap | 5 | La chiave è utilizzata per la crittografia |
| key | | key wrap. |
+---------+-------+----------------------------------------------+
| unwrap | 6 | La chiave è utilizzata per la decifrazione |
| key | | key wrap. Richiede campi chiave privata. |
+---------+-------+----------------------------------------------+
| derive | 7 | La chiave è utilizzata per derivare chiavi. |
| key | | Richiede campi chiave privata. |
+---------+-------+----------------------------------------------+
| derive | 8 | La chiave è utilizzata per derivare bit da |
| bits | | non utilizzare come chiave. Richiede campi |
| | | chiave privata. |
+---------+-------+----------------------------------------------+
| MAC | 9 | La chiave è utilizzata per creare MAC. |
| create | | |
+---------+-------+----------------------------------------------+
| MAC | 10 | La chiave è utilizzata per validare MAC. |
| verify | | |
+---------+-------+----------------------------------------------+

Tabella 5: Valori Operazione Chiave