8. Capacités COSE
- Capacités COSE
Les capacités d'un algorithme ou d'un type de clé doivent être spécifiées dans certaines situations. Cela a un équivalent dans les spécifications S/MIME, où SMIMECapabilities est défini dans la section 2.5.2 de [RFC8551]. Ce document définit le même concept pour COSE.
L'identifiant d'algorithme n'est pas inclus dans les données de capacités, car il devrait être encodé ailleurs dans le message. L'identifiant de type de clé est inclus dans les données de capacités, car il n'est pas censé être encodé ailleurs.
Deux types différents de capacités sont définis : les capacités pour les algorithmes et les capacités pour le type de clé. Une fois définie par enregistrement auprès de l'IANA, la liste des capacités pour un algorithme ou un type de clé est immuable. S'il s'avère plus tard qu'une nouvelle capacité est nécessaire pour un type de clé ou un algorithme, il faudra attribuer un nouveau point de code pour gérer cela. En règle générale, les capacités vont correspondre à des paramètres d'en-tête ou de clé spécifiques à l'algorithme, mais elles n'ont pas besoin de le faire. Un exemple de cela est les capacités de type de clé HSS-LMS définies ci-dessous, où l'algorithme de hachage utilisé est inclus.
La structure de capacité est un tableau de valeurs ; les valeurs incluses dans la structure dépendent d'un algorithme ou d'un type de clé spécifique. Pour les capacités d'algorithme, le premier élément doit toujours être une valeur de type de clé si applicable, mais les éléments spécifiques à une clé (par exemple, une courbe) ne doivent pas être inclus dans les capacités d'algorithme. Cela signifie que si l'on souhaite énumérer toutes les capacités d'un appareil qui implémente ECDH, il faut spécifier toutes les combinaisons d'algorithmes et de paires de clés. Le dernier exemple de la section 8.3 fournit un cas où cela est fait en permettant de spécifier un produit croisé entre un tableau de capacités d'algorithme et de capacités de type de clé (voir l'élément ECDH-ES+A25KW). Pour une clé, le premier élément doit être la valeur du type de clé. Bien que cela signifie que la valeur du type de clé sera dupliquée si une capacité d'algorithme et une capacité de clé sont utilisées, le type de clé est nécessaire pour comprendre le reste des valeurs.
8.1. Affectations pour les algorithmes existants
Pour l'ensemble actuel d'algorithmes dans le registre autres que IV-GENERATION (ceux dans ce document ainsi que ceux dans [RFC8230], [RFC8778] et [RFC9021]), la liste des capacités est un tableau avec un élément, le type de clé (du registre "COSE Key Types"). Il est prévu que les futurs algorithmes enregistrés pourraient avoir zéro, un ou plusieurs éléments.
8.2. Affectations pour les types de clés existants
Il existe un certain nombre de types de clés préexistants ; ce qui suit traite de la création de la définition de capacité pour ces structures :
-
OKP, EC2 : La liste des capacités est :
-
La valeur du type de clé. (1 pour OKP ou 2 pour EC2.)
-
Une courbe pour ce type de clé du registre "COSE Elliptic Curves".
-
-
RSA : La liste des capacités est :
- La valeur du type de clé (3).
-
Symmetric : La liste des capacités est :
- La valeur du type de clé (4).
-
HSS-LMS : La liste des capacités est :
-
La valeur du type de clé (5).
-
Identifiant d'algorithme pour la fonction de hachage sous-jacente du registre "COSE Algorithms".
-
-
WalnutDSA : La liste des capacités est :
-
La valeur du type de clé (6).
-
La valeur N (taille du groupe et de la matrice) pour la clé, un uint.
-
La valeur q (ordre du corps fini) pour la clé, un uint.
-
8.3. Exemples
Les capacités peuvent être utilisées dans un processus de dérivation de clé pour s'assurer que les deux parties utilisent les mêmes paramètres. Les trois exemples ci-dessous montrent différentes façons dont on pourrait utiliser les paramètres pour spécifier un protocole d'application :
-
Uniquement une capacité d'algorithme : Ceci est utile si le protocole veut exiger un algorithme spécifique, tel que ES256, mais est agnostique quant à la courbe utilisée. Cela nécessite que l'identifiant d'algorithme soit spécifié dans le protocole. Voir le premier exemple.
-
Uniquement une capacité de type de clé : Ceci est utile si le protocole veut exiger un type de clé et une courbe spécifiques, tels que P-256, mais acceptera tout algorithme utilisant cette courbe (par exemple, à la fois ECDSA et ECDH). Voir le deuxième exemple.
-
Capacités d'algorithme et de type de clé : Ceci est utilisé si le protocole a besoin de fixer toutes les options entourant un algorithme -- par exemple, EdDSA avec la courbe Ed25519. Comme avec le premier exemple, l'identifiant d'algorithme doit être spécifié dans le protocole. Voir le troisième exemple, qui concatène simplement les deux capacités ensemble.
Algorithme ES256
0x8102 / [2 \ EC2 \ ] /
Type de clé EC2 avec courbe P-256 :
0x820201 / [2 \ EC2 , 1 \ P-256 ] /
ECDH-ES + A256KW avec une courbe X25519 :
0x8101820104 / [1 \ OKP ],[1 \ OKP , 4 \ X25519 ] /
Les capacités peuvent également être utilisées par une entité pour annoncer ce qu'elle est capable de faire. L'exemple décodé ci-dessous est l'un des nombreux encodages qui pourraient être utilisés à cette fin. Chaque élément du tableau comprend trois champs : l'identifiant d'algorithme, une ou plusieurs capacités d'algorithme et une ou plusieurs capacités de type de clé.
[
[-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 /]
]
]
En examinant ce qui précède :
-
Le premier élément indique que l'entité prend en charge EdDSA avec les courbes Ed25519 et Ed448.
-
Le deuxième élément indique que l'entité prend en charge ECDSA avec SHA-256 avec les courbes P-256 et P-521.
-
Le troisième élément indique que l'entité prend en charge Ephemeral-Static ECDH utilisant l'enveloppement de clé AES256. L'entité peut prendre en charge la courbe P-256 avec un type de clé EC2 et la courbe X25519 avec un type de clé OKP.
-
Le dernier élément indique que l'entité prend en charge AES-GCM de 128 bits pour le chiffrement de contenu.
L'entité n'annonce pas qu'elle prend en charge des algorithmes MAC.