8. Capacità COSE
- Capacità COSE
Le capacità di un algoritmo o di un tipo di chiave devono essere specificate in alcune situazioni. Questo ha una controparte nelle specifiche S/MIME, dove SMIMECapabilities è definito nella Sezione 2.5.2 di [RFC8551]. Questo documento definisce lo stesso concetto per COSE.
L'identificatore dell'algoritmo non è incluso nei dati delle capacità, poiché dovrebbe essere codificato altrove nel messaggio. L'identificatore del tipo di chiave è incluso nei dati delle capacità, poiché non si prevede che venga codificato altrove.
Sono definiti due diversi tipi di capacità: capacità per algoritmi e capacità per tipo di chiave. Una volta definita mediante registrazione presso IANA, la lista delle capacità per un algoritmo o un tipo di chiave è immutabile. Se in seguito si scopre che è necessaria una nuova capacità per un tipo di chiave o un algoritmo, sarà necessario assegnare un nuovo punto di codice per gestirlo. Come regola generale, le capacità verranno mappate su parametri di intestazione o parametri chiave specifici dell'algoritmo, ma non è necessario che lo facciano. Un esempio di ciò sono le capacità del tipo di chiave HSS-LMS definite di seguito, in cui è incluso l'algoritmo di hash utilizzato.
La struttura della capacità è un array di valori; i valori inclusi nella struttura dipendono da un algoritmo o da un tipo di chiave specifico. Per le capacità dell'algoritmo, il primo elemento dovrebbe sempre essere un valore del tipo di chiave se applicabile, ma gli elementi specifici di una chiave (ad esempio, una curva) non dovrebbero essere inclusi nelle capacità dell'algoritmo. Ciò significa che se si desidera enumerare tutte le capacità per un dispositivo che implementa ECDH, è necessario specificare tutte le combinazioni di algoritmi e coppie di chiavi. L'ultimo esempio della Sezione 8.3 fornisce un caso in cui ciò viene fatto consentendo di specificare un prodotto incrociato tra un array di capacità dell'algoritmo e capacità del tipo di chiave (vedere l'elemento ECDH-ES+A25KW). Per una chiave, il primo elemento dovrebbe essere il valore del tipo di chiave. Sebbene ciò significhi che il valore del tipo di chiave verrà duplicato se vengono utilizzate sia una capacità dell'algoritmo che una capacità della chiave, il tipo di chiave è necessario per comprendere il resto dei valori.
8.1. Assegnazioni per algoritmi esistenti
Per l'attuale set di algoritmi nel registro diversi da IV-GENERATION (quelli in questo documento così come quelli in [RFC8230], [RFC8778] e [RFC9021]), la lista delle capacità è un array con un elemento, il tipo di chiave (dal registro "COSE Key Types"). Si prevede che i futuri algoritmi registrati potrebbero avere zero, uno o più elementi.
8.2. Assegnazioni per tipi di chiave esistenti
Esistono numerosi tipi di chiave preesistenti; quanto segue riguarda la creazione della definizione di capacità per quelle strutture:
-
OKP, EC2: La lista delle capacità è:
-
Il valore del tipo di chiave. (1 per OKP o 2 per EC2.)
-
Una curva per quel tipo di chiave dal registro "COSE Elliptic Curves".
-
-
RSA: La lista delle capacità è:
- Il valore del tipo di chiave (3).
-
Symmetric: La lista delle capacità è:
- Il valore del tipo di chiave (4).
-
HSS-LMS: La lista delle capacità è:
-
Il valore del tipo di chiave (5).
-
Identificatore dell'algoritmo per la funzione hash sottostante dal registro "COSE Algorithms".
-
-
WalnutDSA: La lista delle capacità è:
-
Il valore del tipo di chiave (6).
-
Il valore N (dimensione del gruppo e della matrice) per la chiave, un uint.
-
Il valore q (ordine del campo finito) per la chiave, un uint.
-
8.3. Esempi
Le capacità possono essere utilizzate in un processo di derivazione della chiave per assicurarsi che entrambe le parti utilizzino gli stessi parametri. I tre esempi seguenti mostrano diversi modi in cui si potrebbero utilizzare i parametri nella specifica di un protocollo applicativo:
-
Solo una capacità dell'algoritmo: Questo è utile se il protocollo vuole richiedere un algoritmo specifico, come ES256, ma è agnostico su quale curva viene utilizzata. Ciò richiede che l'identificatore dell'algoritmo sia specificato nel protocollo. Vedere il primo esempio.
-
Solo una capacità del tipo di chiave: Questo è utile se il protocollo vuole richiedere un tipo di chiave e una curva specifici, come P-256, ma accetterà qualsiasi algoritmo che utilizza quella curva (ad esempio, sia ECDSA che ECDH). Vedere il secondo esempio.
-
Capacità sia dell'algoritmo che del tipo di chiave: Questo viene utilizzato se il protocollo deve fissare tutte le opzioni che circondano un algoritmo -- ad esempio, EdDSA con la curva Ed25519. Come nel primo esempio, l'identificatore dell'algoritmo deve essere specificato nel protocollo. Vedere il terzo esempio, che concatena semplicemente le due capacità insieme.
Algoritmo ES256
0x8102 / [2 \ EC2 \ ] /
Tipo di chiave EC2 con curva P-256:
0x820201 / [2 \ EC2 , 1 \ P-256 ] /
ECDH-ES + A256KW con una curva X25519:
0x8101820104 / [1 \ OKP ],[1 \ OKP , 4 \ X25519 ] /
Le capacità possono anche essere utilizzate da un'entità per pubblicizzare ciò che è in grado di fare. L'esempio decodificato di seguito è una delle tante codifiche che potrebbero essere utilizzate a tale scopo. Ogni elemento dell'array include tre campi: l'identificatore dell'algoritmo, una o più capacità dell'algoritmo e una o più capacità del tipo di chiave.
[
[-8 / EdDSA /,
[1 / OKP key type /],
[
[1 / OKP /, 6 / Ed25519 / ],
[1 /OKP/, 7 /Ed448 /]
]
],
[-7 / ECDSA with SHA-256/,
[2 /EC2 key type/],
[
[2 /EC2/, 1 /P-256/],
[2 /EC2/, 3 /P-521/]
]
],
[ -31 / ECDH-ES+A256KW/,
[
[ 2 /EC2/],
[1 /OKP/ ]
],
[
[2 /EC2/, 1 /P-256/],
[1 /OKP/, 4 / X25519/ ]
]
],
[ 1 / A128GCM /,
[ 4 / Symmetric / ],
[ 4 / Symmetric /]
]
]
Esaminando quanto sopra:
-
Il primo elemento indica che l'entità supporta EdDSA con le curve Ed25519 ed Ed448.
-
Il secondo elemento indica che l'entità supporta ECDSA con SHA-256 con le curve P-256 e P-521.
-
Il terzo elemento indica che l'entità supporta Ephemeral-Static ECDH utilizzando il key wrap AES256. L'entità può supportare la curva P-256 con un tipo di chiave EC2 e la curva X25519 con un tipo di chiave OKP.
-
L'ultimo elemento indica che l'entità supporta AES-GCM a 128 bit per la crittografia del contenuto.
L'entità non pubblicizza di supportare alcun algoritmo MAC.