Aller au contenu principal

7. Objets Clés

  1. Objets Clés

Une structure de clé COSE est construite sur une carte CBOR. L'ensemble des paramètres communs qui peuvent apparaître dans une clé COSE peut être trouvé dans le registre IANA "COSE Key Common Parameters" [COSE.KeyParameters] (voir la section 11.2). Les paramètres supplémentaires définis pour des types de clés spécifiques peuvent être trouvés dans le registre IANA "COSE Key Type Parameters" [COSE.KeyTypes].

Un ensemble de clés COSE utilise un objet tableau CBOR comme type sous-jacent. Les valeurs des éléments du tableau sont des clés COSE. Un ensemble de clés COSE DOIT avoir au moins un élément dans le tableau. Des exemples d'ensembles de clés COSE peuvent être trouvés dans l'annexe C.7.

Chaque élément d'un ensemble de clés COSE DOIT être traité indépendamment. Si un élément d'un ensemble de clés COSE est soit mal formé, soit utilise une clé qui n'est pas comprise par une application, cette clé est ignorée et les autres clés sont traitées normalement.

L'élément "kty" est un élément obligatoire dans une carte COSE_Key.

La grammaire CDDL décrivant COSE_Key et COSE_KeySet est :

   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. Paramètres Communs des Clés COSE

Ce document définit un ensemble de paramètres communs pour un objet clé COSE. Le tableau 4 fournit un résumé des paramètres définis dans cette section. Il existe également des paramètres définis pour des types de clés spécifiques. Les paramètres spécifiques au type de clé peuvent être trouvés dans [RFC9053].

  +=========+=======+========+============+====================+
| Nom | Éti- | Type | Registre | Description |
| | quette| CBOR | de Valeurs | |
+=========+=======+========+============+====================+
| kty | 1 | tstr / | COSE Key | Identification du |
| | | int | Types | type de clé |
+---------+-------+--------+------------+--------------------+
| kid | 2 | bstr | | Valeur d'identifi- |
| | | | | cation de la clé |
| | | | | -- correspond à |
| | | | | "kid" dans le |
| | | | | message |
+---------+-------+--------+------------+--------------------+
| alg | 3 | tstr / | COSE | Restriction d'u- |
| | | int | Algorithms | sage de la clé à |
| | | | | cet algorithme |
+---------+-------+--------+------------+--------------------+
| key_ops | 4 | [+ | | Restreindre l'en- |
| | | (tstr/ | | semble des opéra- |
| | | int)] | | tions autorisées |
+---------+-------+--------+------------+--------------------+
| Base IV | 5 | bstr | | Base IV à combiner |
| | | | | par XOR avec les |
| | | | | IV Partiels |
+---------+-------+--------+------------+--------------------+

Tableau 4: Étiquettes de Carte de Clé

kty : Ce paramètre est utilisé pour identifier la famille de clés pour cette structure et, par conséquent, l'ensemble des paramètres spécifiques au type de clé à trouver. L'ensemble des valeurs définies dans ce document peut être trouvé dans [COSE.KeyTypes]. Ce paramètre DOIT être présent dans un objet clé. Les implémentations DOIVENT vérifier que le type de clé est approprié pour l'algorithme en cours de traitement. Le type de clé DOIT être inclus dans le cadre du processus de décision de confiance.

alg : Ce paramètre est utilisé pour restreindre l'algorithme utilisé avec la clé. Si ce paramètre est présent dans la structure de la clé, l'application DOIT vérifier que cet algorithme correspond à l'algorithme pour lequel la clé est utilisée. Si les algorithmes ne correspondent pas, alors cet objet clé NE DOIT PAS être utilisé pour effectuer l'opération cryptographique. Notez que la même clé peut se trouver dans une structure de clé différente avec un algorithme différent ou aucun algorithme spécifié ; cependant, cela est considéré comme une mauvaise pratique de sécurité.

kid : Ce paramètre est utilisé pour donner un identifiant pour une clé. L'identifiant n'est pas structuré et peut être n'importe quoi, d'une chaîne d'octets fournie par l'utilisateur à une valeur calculée sur la partie publique de la clé. Ce champ est destiné à correspondre à un paramètre "kid" dans un message afin de filtrer l'ensemble des clés qui doivent être vérifiées. La valeur de l'identifiant n'est pas une valeur unique et peut apparaître dans d'autres objets clés, même pour des clés différentes.

key_ops : Ce paramètre est défini pour restreindre l'ensemble des opérations pour lesquelles une clé doit être utilisée. La valeur du champ est un tableau de valeurs du tableau 5. Les algorithmes définissent les valeurs des opérations clés qui sont autorisées à apparaître et sont requises pour des opérations spécifiques. L'ensemble des valeurs correspond à celui de [RFC7517] et [W3C.WebCrypto].

Base IV : Ce paramètre est défini pour transporter la partie de base d'un IV. Il est conçu pour être utilisé avec le paramètre d'en-tête Partial IV défini dans la section 3.1. Ce champ offre la possibilité d'associer un Base IV à une clé qui est ensuite modifiée message par message avec le Partial IV.

  Une extrême prudence doit être prise lors de l'utilisation d'un Base IV dans une application. De nombreux algorithmes de chiffrement perdent leur sécurité si le même IV est utilisé deux fois.

Si des clés différentes sont dérivées pour chaque expéditeur, commencer au même Base IV est susceptible de satisfaire cette condition. Si la même clé est utilisée pour plusieurs expéditeurs, alors l'application doit fournir une méthode pour diviser l'espace IV entre les expéditeurs. Cela pourrait être fait en fournissant un point de base différent à partir duquel commencer ou un Partial IV différent avec lequel commencer et en restreignant le nombre de messages à envoyer avant de changer de clé.

+=========+=======+==============================================+
| Nom | Valeur| Description |
+=========+=======+==============================================+
| sign | 1 | La clé est utilisée pour créer des signa- |
| | | tures. Nécessite des champs de clé privée. |
+---------+-------+----------------------------------------------+
| verify | 2 | La clé est utilisée pour la vérification des |
| | | signatures. |
+---------+-------+----------------------------------------------+
| encrypt | 3 | La clé est utilisée pour le chiffrement de |
| | | transport de clé. |
+---------+-------+----------------------------------------------+
| decrypt | 4 | La clé est utilisée pour le déchiffrement de |
| | | transport de clé. Nécessite des champs de |
| | | clé privée. |
+---------+-------+----------------------------------------------+
| wrap | 5 | La clé est utilisée pour le chiffrement |
| key | | d'enveloppement de clé. |
+---------+-------+----------------------------------------------+
| unwrap | 6 | La clé est utilisée pour le déchiffrement |
| key | | d'enveloppement de clé. Nécessite des champs |
| | | de clé privée. |
+---------+-------+----------------------------------------------+
| derive | 7 | La clé est utilisée pour dériver des clés. |
| key | | Nécessite des champs de clé privée. |
+---------+-------+----------------------------------------------+
| derive | 8 | La clé est utilisée pour dériver des bits à |
| bits | | ne pas utiliser comme clé. Nécessite des |
| | | champs de clé privée. |
+---------+-------+----------------------------------------------+
| MAC | 9 | La clé est utilisée pour créer des MAC. |
| create | | |
+---------+-------+----------------------------------------------+
| MAC | 10 | La clé est utilisée pour valider des MAC. |
| verify | | |
+---------+-------+----------------------------------------------+

Tableau 5: Valeurs d'Opération de Clé