Aller au contenu principal

6. Objets MAC

  1. Objets MAC

COSE prend en charge deux structures MAC différentes. COSE_Mac0 est utilisé lorsqu'une structure de destinataire n'est pas nécessaire car la clé à utiliser est connue implicitement. COSE_Mac est utilisé dans tous les autres cas. Cela inclut une exigence de destinataires multiples, la clé étant inconnue, ou un algorithme de destinataire autre que direct.

Dans cette section, nous décrivons la structure et les méthodes à utiliser lors de l'authentification MAC dans COSE. Ce document permet l'utilisation de toutes les mêmes classes d'algorithmes de destinataire que celles autorisées pour le chiffrement.

Il existe deux modes dans lesquels les opérations MAC peuvent être utilisées. Le premier est simplement une vérification que le contenu n'a pas été modifié depuis le calcul du MAC. Toute classe d'algorithme de destinataire peut être utilisée à cette fin. Le second mode consiste à la fois à vérifier que le contenu n'a pas été modifié depuis le calcul du MAC et à utiliser l'algorithme du destinataire pour vérifier qui l'a envoyé. Les classes d'algorithmes de destinataire qui prennent en charge cela sont celles qui utilisent un secret pré-partagé ou effectuent un accord de clé Statique-Statique (SS) (sans l'étape d'enveloppement de clé). Dans ces deux cas, l'entité qui a créé et envoyé le message MAC peut être validée. (Cette connaissance de l'expéditeur suppose qu'il n'y a que deux parties impliquées et que vous n'avez pas envoyé le message à vous-même.) La propriété d'origine peut être obtenue avec les deux structures de message MAC.

6.1. Message MAC avec Destinataires

Un message MAC à destinataires multiples utilise deux structures : la structure COSE_Mac définie dans cette section pour transporter le corps et la structure COSE_recipient (Section 5.1) pour contenir la clé utilisée pour le calcul du MAC. Des exemples de messages MAC peuvent être trouvés à l'Annexe C.5.

La structure MAC peut être encodée comme étiquetée ou non étiquetée selon le contexte dans lequel elle sera utilisée. Une structure COSE_Mac étiquetée est identifiée par l'étiquette CBOR 97. Le fragment CDDL qui représente cela est :

COSE_Mac_Tagged = #6.97(COSE_Mac)

La structure COSE_Mac est un tableau CBOR. Les champs du tableau, dans l'ordre, sont :

protected : Ceci est tel que décrit dans la Section 3.

unprotected : Ceci est tel que décrit dans la Section 3.

payload : Ce champ contient le contenu sérialisé à MACer. Si la charge utile n'est pas présente dans le message, l'application est tenue de fournir la charge utile séparément. La charge utile est enveloppée dans un bstr pour s'assurer qu'elle est transportée sans modifications. Si la charge utile est transportée séparément (c'est-à-dire, contenu détaché), alors une valeur CBOR nil est placée à cet endroit, et il est de la responsabilité de l'application de s'assurer qu'elle sera transportée sans modifications.

tag : Ce champ contient la valeur MAC.

recipients : Ceci est tel que décrit dans la Section 5.1.

Le fragment CDDL qui représente le texte ci-dessus pour COSE_Mac suit.

COSE_Mac = [ Headers, payload : bstr / nil, tag : bstr, recipients : [+COSE_recipient] ]

6.2. Messages MAC avec Clé Implicite

Dans cette section, nous décrivons la structure et les méthodes à utiliser lors de l'authentification MAC pour les cas où le destinataire est implicitement connu.

Le message MAC utilise la structure COSE_Mac0 définie dans cette section pour transporter le corps. Des exemples de messages MAC avec une clé implicite peuvent être trouvés à l'Annexe C.6.

La structure MAC peut être encodée comme étiquetée ou non étiquetée, selon le contexte dans lequel elle sera utilisée. Une structure COSE_Mac0 étiquetée est identifiée par l'étiquette CBOR 17. Le fragment CDDL qui représente cela est :

COSE_Mac0_Tagged = #6.17(COSE_Mac0)

La structure COSE_Mac0 est un tableau CBOR. Les champs du tableau, dans l'ordre, sont :

protected : Ceci est tel que décrit dans la Section 3.

unprotected : Ceci est tel que décrit dans la Section 3.

payload : Ceci est tel que décrit dans la Section 6.1.

tag : Ce champ contient la valeur MAC.

Le fragment CDDL qui correspond au texte ci-dessus est :

COSE_Mac0 = [ Headers, payload : bstr / nil, tag : bstr, ]

6.3. Comment Calculer et Vérifier un MAC

Afin d'obtenir un encodage cohérent des données à authentifier, la MAC_structure est utilisée pour créer la forme canonique. La MAC_structure est un tableau CBOR. Les champs de la MAC_structure, dans l'ordre, sont :

  1. Une chaîne de texte contextuelle qui identifie la structure en cours d'encodage. Cette chaîne de texte contextuelle est "MAC" pour la structure COSE_Mac. Cette chaîne de texte contextuelle est "MAC0" pour la structure COSE_Mac0.

  2. Les attributs protégés de la structure du corps. S'il n'y a pas d'attributs protégés, un bstr de longueur nulle est utilisé.

  3. Les données fournies de manière externe par l'application, encodées comme un type bstr. Si ce champ n'est pas fourni, il vaut par défaut une chaîne d'octets de longueur nulle. (Voir la Section 4.3 pour les conseils d'application sur la construction de ce champ.)

  4. La charge utile à MACer, encodée dans un type bstr. La charge utile complète est utilisée ici, indépendamment de la façon dont elle est transportée.

Le fragment CDDL qui correspond au texte ci-dessus est :

MAC_structure = [ context : "MAC" / "MAC0", protected : empty_or_serialized_map, external_aad : bstr, payload : bstr ]

Les étapes pour calculer un MAC sont :

  1. Créer une MAC_structure et la remplir avec les champs appropriés.

  2. Créer la valeur ToBeMaced en encodant la MAC_structure en une chaîne d'octets, en utilisant l'encodage décrit dans la Section 9.

  3. Appeler l'algorithme de création de MAC, en passant K (la clé à utiliser), alg (l'algorithme avec lequel MACer), et ToBeMaced (la valeur sur laquelle calculer le MAC).

  4. Placer le MAC résultant dans le champ "tag" de la structure COSE_Mac ou COSE_Mac0.

  5. Pour les structures COSE_Mac, chiffrer et encoder la clé MAC pour chaque destinataire du message.

Les étapes pour vérifier un MAC sont :

  1. Créer une MAC_structure et la remplir avec les champs appropriés.

  2. Créer la valeur ToBeMaced en encodant la MAC_structure en une chaîne d'octets, en utilisant l'encodage décrit dans la Section 9.

  3. Pour les structures COSE_Mac, obtenir la clé cryptographique en décodant et déchiffrant l'une des structures de destinataire.

  4. Appeler l'algorithme de création de MAC, en passant K (la clé à utiliser), alg (l'algorithme avec lequel MACer), et ToBeMaced (la valeur sur laquelle calculer le MAC).

  5. Comparer la valeur MAC au champ "tag" de la structure COSE_Mac ou COSE_Mac0.