Aller au contenu principal

7. Paramètres d'objet clé

  1. Paramètres d'objet clé

L'objet COSE_Key définit un moyen de contenir un seul objet clé. Il est toujours nécessaire que les membres des types de clés individuels soient définis. Cette section du document définit un ensemble initial de membres pour des types de clés spécifiques.

Pour chaque type de clé, nous définissons à la fois des membres publics et privés. Les membres publics sont ce qui est transmis aux autres pour leur utilisation. Les membres privés permettent aux individus d'archiver les clés. Cependant, il existe certaines circonstances dans lesquelles les clés privées peuvent être distribuées à des entités dans un protocole. Les exemples incluent : les entités qui ont une mauvaise génération de nombres aléatoires, la création de clés centralisée pour les opérations de type multidiffusion, et les protocoles dans lesquels un secret partagé est utilisé comme jeton porteur à des fins d'autorisation.

Les types de clés sont identifiés par le membre "kty" de l'objet COSE_Key. Dans ce document, nous définissons quatre valeurs pour le membre :

         +===========+=======+==========================+
| Nom | Valeur| Description |
+===========+=======+==========================+
| OKP | 1 | Paire de clés d'octets |
+-----------+-------+--------------------------+
| EC2 | 2 | Clés à courbe elliptique |
| | | avec paire de coord. x/y |
+-----------+-------+--------------------------+
| Symmetric | 4 | Clés symétriques |
+-----------+-------+--------------------------+
| Reserved | 0 | Cette valeur est réservée|
+-----------+-------+--------------------------+

Tableau 17 : Valeurs de type de clé

7.1. Clés à courbe elliptique

Deux structures de clés différentes sont définies pour les clés à courbe elliptique. Une version utilise à la fois une coordonnée x et une coordonnée y, potentiellement avec une compression de point ("EC2"). C'est la représentation conventionnelle de point de courbe elliptique (EC) qui est utilisée dans [RFC5480]. L'autre version utilise uniquement la coordonnée x, car la coordonnée y doit être recalculée ou n'est pas nécessaire pour l'opération d'accord de clé ("OKP").

Les applications DOIVENT vérifier que la courbe et le type de clé sont cohérents et rejeter une clé s'ils ne le sont pas.

+=========+=======+==========+=====================================+ | Nom | Valeur| Type clé | Description | +=========+=======+==========+=====================================+ | P-256 | 1 | EC2 | NIST P-256, aussi connu secp256r1 | +---------+-------+----------+-------------------------------------+ | P-384 | 2 | EC2 | NIST P-384, aussi connu secp384r1 | +---------+-------+----------+-------------------------------------+ | P-521 | 3 | EC2 | NIST P-521, aussi connu secp521r1 | +---------+-------+----------+-------------------------------------+ | X25519 | 4 | OKP | X25519 pour utilisation avec ECDH | +---------+-------+----------+-------------------------------------+ | X448 | 5 | OKP | X448 pour utilisation avec ECDH | +---------+-------+----------+-------------------------------------+ | Ed25519 | 6 | OKP | Ed25519 pour utilisation avec EdDSA | +---------+-------+----------+-------------------------------------+ | Ed448 | 7 | OKP | Ed448 pour utilisation avec EdDSA | +---------+-------+----------+-------------------------------------+

                    Tableau 18 : Courbes elliptiques

7.1.1. Courbes à double coordonnée

Généralement, les protocoles transmettent des points de courbe elliptique soit comme la coordonnée x et la coordonnée y, soit comme la coordonnée x et un bit de signe pour la coordonnée y. Ce dernier codage n'a pas été recommandé par l'IETF en raison de problèmes potentiels de DPI. Cependant, pour les opérations dans des environnements contraints, la capacité de réduire un message en n'envoyant pas la coordonnée y est potentiellement utile.

Pour les clés EC avec les deux coordonnées, le membre "kty" est défini sur 2 (EC2). Les paramètres de clé définis dans cette section sont résumés dans le Tableau 19. Les membres définis pour ce type de clé sont :

crv: Ceci contient un identifiant de la courbe à utiliser avec la clé. Les courbes définies dans ce document pour ce type de clé se trouvent dans le Tableau 18. D'autres courbes peuvent être enregistrées à l'avenir, et des courbes privées peuvent également être utilisées.

x: Ceci contient la coordonnée x pour le point EC. L'entier est converti en une chaîne d'octets comme défini dans [SEC1]. Les octets zéro de tête DOIVENT être préservés.

y: Ceci contient soit le bit de signe, soit la valeur de la coordonnée y pour le point EC. Lors de l'encodage de la valeur y, l'entier est converti en une chaîne d'octets (comme défini dans [SEC1]) et encodé comme un bstr CBOR. Les octets zéro de tête DOIVENT être préservés. L'encodage de point compressé est également pris en charge. Calculez le bit de signe comme indiqué dans la fonction de conversion de point de courbe elliptique en chaîne d'octets de [SEC1]. Si le bit de signe est zéro, alors encodez y comme une valeur CBOR false ; sinon, encodez y comme une valeur CBOR true. L'encodage du point à l'infini n'est pas pris en charge.

d: Ceci contient la clé privée.

Pour les clés publiques, il est REQUIS que "crv", "x" et "y" soient présents dans la structure. Pour les clés privées, il est REQUIS que "crv" et "d" soient présents dans la structure. Pour les clés privées, il est RECOMMANDÉ que "x" et "y" soient également présents, mais ils peuvent être recalculés à partir des éléments requis, et les omettre économise de l'espace.

+======+======+=======+========+=================================+
| Type | Nom | Label | Type | Description |
| Clé | | | CBOR | |
+======+======+=======+========+=================================+
| 2 | crv | -1 | int / | Identifiant EC -- Tiré du |
| | | | tstr | registre "COSE Elliptic Curves" |
+------+------+-------+--------+---------------------------------+
| 2 | x | -2 | bstr | coordonnée x |
+------+------+-------+--------+---------------------------------+
| 2 | y | -3 | bstr / | coordonnée y |
| | | | bool | |
+------+------+-------+--------+---------------------------------+
| 2 | d | -4 | bstr | Clé privée |
+------+------+-------+--------+---------------------------------+

Tableau 19 : Paramètres de clé EC

7.2. Paire de clés d'octets

Un nouveau type de clé est défini pour les paires de clés d'octets (OKP). Ne supposez pas que les clés utilisant ce type sont des courbes elliptiques. Ce type de clé pourrait être utilisé pour d'autres types de courbes (par exemple, des mathématiques basées sur des surfaces hyper-elliptiques).

Les paramètres de clé définis dans cette section sont résumés dans le Tableau 20. Les membres définis pour ce type de clé sont :

crv: Ceci contient un identifiant de la courbe à utiliser avec la clé. Les courbes définies dans ce document pour ce type de clé se trouvent dans le Tableau 18. D'autres courbes peuvent être enregistrées à l'avenir, et des courbes privées peuvent également être utilisées.

x: Ceci contient la clé publique. La chaîne d'octets contient la clé publique telle que définie par l'algorithme. (Pour X25519, en interne, c'est un entier petit-boutiste.)

d: Ceci contient la clé privée.

Pour les clés publiques, il est REQUIS que "crv" et "x" soient présents dans la structure. Pour les clés privées, il est REQUIS que "crv" et "d" soient présents dans la structure. Pour les clés privées, il est RECOMMANDÉ que "x" soit également présent, mais il peut être recalculé à partir des éléments requis, et l'omettre économise de l'espace.

+======+==========+=======+=======+=================================+ | Nom | Type | Label | Type | Description | | | Clé | | | | +======+==========+=======+=======+=================================+ | crv | 1 | -1 | int / | Identifiant EC -- Tiré du | | | | | tstr | registre "COSE Elliptic Curves" | +------+----------+-------+-------+---------------------------------+ | x | 1 | -2 | bstr | Clé publique | +------+----------+-------+-------+---------------------------------+ | d | 1 | -4 | bstr | Clé privée | +------+----------+-------+-------+---------------------------------+

                Tableau 20 : Paramètres de paire de clés d'octets

7.3. Clés symétriques

Parfois, il est nécessaire qu'une clé symétrique soit transportée entre des entités. Cette structure de clé permet que cela se produise.

Pour les clés symétriques, le membre "kty" est défini sur 4 ("Symmetric"). Le membre défini pour ce type de clé est :

k: Ceci contient la valeur de la clé.

Cette structure de clé n'a pas de forme contenant uniquement des membres publics. Comme il est prévu que cette structure de clé soit transmise, il faut veiller à ce qu'elle ne soit jamais transmise accidentellement ou de manière non sécurisée. Pour les clés symétriques, il est REQUIS que "k" soit présent dans la structure.

         +======+==========+=======+======+=============+
| Nom | Type Clé | Label | Type | Description |
+======+==========+=======+======+=============+
| k | 4 | -1 | bstr | Valeur Clé |
+------+----------+-------+------+-------------+

Tableau 21 : Paramètres de clé symétrique