2. Structure COSE de base
- Structure COSE de base
La structure des objets COSE est conçue de manière à ce qu'il puisse y avoir une grande quantité de code commun lors de l'analyse et du traitement des différents types de messages de sécurité. Toutes les structures de messages sont construites sur le type de tableau CBOR. Les trois premiers éléments du tableau contiennent toujours les mêmes informations :
-
Les paramètres d'en-tête protégés, encodés et enveloppés dans un bstr.
-
Les paramètres d'en-tête non protégés sous forme de carte (map).
-
Le contenu du message. Le contenu est soit le texte clair, soit le texte chiffré, selon le cas. Le contenu peut être détaché (c'est-à-dire transporté séparément de la structure COSE), mais l'emplacement est toujours utilisé. Le contenu est enveloppé dans un bstr lorsqu'il est présent et est une valeur nil lorsqu'il est détaché.
Les éléments après ce point dépendent du type de message spécifique.
Les messages COSE sont construits en utilisant le concept de couches pour séparer les différents types de concepts cryptographiques. À titre d'exemple de fonctionnement, considérons le message COSE_Encrypt (Section 5.1). Ce type de message est divisé en deux couches : la couche de contenu et la couche de destinataire. La couche de contenu contient le texte clair chiffré et des informations sur le message chiffré. La couche de destinataire contient la clé de chiffrement de contenu (CEK) chiffrée et des informations sur la façon dont elle est chiffrée, pour chaque destinataire. Une version à couche unique du message de chiffrement COSE_Encrypt0 (Section 5.2) est fournie pour les cas où la CEK est pré-partagée.
L'identification du type de message présenté se fait par les méthodes suivantes :
-
Le type de message spécifique est connu à partir du contexte. Cela peut être défini par un marqueur dans la structure contenante ou par des restrictions spécifiées par le protocole d'application.
-
Le type de message est identifié par une balise CBOR. Les messages avec une balise CBOR sont connus dans cette spécification sous le nom de messages balisés, tandis que ceux sans balise CBOR sont connus sous le nom de messages non balisés. Ce document définit une balise CBOR pour chacune des structures de message. Ces balises se trouvent dans le Tableau 1.
-
Lorsqu'un objet COSE est transporté dans un type de média « application/cose », le paramètre optionnel « cose-type » peut être utilisé pour identifier l'objet intégré. Le paramètre est OPTIONNEL si la version balisée de la structure est utilisée. Le paramètre est REQUIS si la version non balisée de la structure est utilisée. La valeur à utiliser avec le paramètre pour chacune des structures se trouve dans le Tableau 1.
-
Lorsqu'un objet COSE est transporté comme charge utile CoAP, l'option CoAP Content-Format peut être utilisée pour identifier le contenu du message. Les valeurs CoAP Content-Format se trouvent dans le Tableau 2. La balise CBOR pour la structure du message n'est pas requise, car chaque message de sécurité est identifié de manière unique.
+==========+===============+===============+=======================+ | CBOR Tag | cose-type | Data Item | Semantics | +==========+===============+===============+=======================+ | 98 | cose-sign | COSE_Sign | COSE Signed Data | | | | | Object | +----------+---------------+---------------+-----------------------+ | 18 | cose-sign1 | COSE_Sign1 | COSE Single Signer | | | | | Data Object | +----------+---------------+---------------+-----------------------+ | 96 | cose-encrypt | COSE_Encrypt | COSE Encrypted Data | | | | | Object | +----------+---------------+---------------+-----------------------+ | 16 | cose-encrypt0 | COSE_Encrypt0 | COSE Single Recipient | | | | | Encrypted Data Object | +----------+---------------+---------------+-----------------------+ | 97 | cose-mac | COSE_Mac | COSE MACed Data | | | | | Object | +----------+---------------+---------------+-----------------------+ | 17 | cose-mac0 | COSE_Mac0 | COSE Mac w/o | | | | | Recipients Object | +----------+---------------+---------------+-----------------------+
Tableau 1 : Identification des messages COSE
+===========================+==========+=====+===========+
| Media Type | Encoding | ID | Reference |
+===========================+==========+=====+===========+
| application/cose; cose- | | 98 | RFC 9052 |
| type="cose-sign" | | | |
+---------------------------+----------+-----+-----------+
| application/cose; cose- | | 18 | RFC 9052 |
| type="cose-sign1" | | | |
+---------------------------+----------+-----+-----------+
| application/cose; cose- | | 96 | RFC 9052 |
| type="cose-encrypt" | | | |
+---------------------------+----------+-----+-----------+
| application/cose; cose- | | 16 | RFC 9052 |
| type="cose-encrypt0" | | | |
+---------------------------+----------+-----+-----------+
| application/cose; cose- | | 97 | RFC 9052 |
| type="cose-mac" | | | |
+---------------------------+----------+-----+-----------+
| application/cose; cose- | | 17 | RFC 9052 |
| type="cose-mac0" | | | |
+---------------------------+----------+-----+-----------+
| application/cose-key | | 101 | RFC 9052 |
+---------------------------+----------+-----+-----------+
| application/cose-key-set | | 102 | RFC 9052 |
+---------------------------+----------+-----+-----------+
Tableau 2 : CoAP Content-Formats pour COSE
Le fragment CDDL suivant identifie tous les messages de niveau supérieur définis dans ce document. Des non-terminaux distincts sont définis pour les versions balisées et non balisées des messages.
COSE_Messages = COSE_Untagged_Message / COSE_Tagged_Message
COSE_Untagged_Message = COSE_Sign / COSE_Sign1 / COSE_Encrypt / COSE_Encrypt0 / COSE_Mac / COSE_Mac0
COSE_Tagged_Message = COSE_Sign_Tagged / COSE_Sign1_Tagged / COSE_Encrypt_Tagged / COSE_Encrypt0_Tagged / COSE_Mac_Tagged / COSE_Mac0_Tagged