Aller au contenu principal

3. Algorithmes MAC

  1. Algorithmes de Code d'Authentification de Message (MAC)

La section 8.2 de [RFC9052] contient une description générique des algorithmes MAC. Cette section définit les conventions pour deux algorithmes MAC.

3.1. Codes d'Authentification de Message basés sur le Hachage (HMACs)

HMAC [RFC2104] [RFC4231] a été conçu pour faire face aux attaques par extension de longueur. L'algorithme HMAC a également été conçu pour permettre d'intégrer directement de nouvelles fonctions de hachage sans modification de la fonction de hachage elle-même. Le processus de conception de HMAC s'est avéré solide ; bien que la sécurité des fonctions de hachage telles que MD5 ait diminué au fil du temps, la sécurité de HMAC combinée à MD5 n'a pas encore été compromise [RFC6151].

L'algorithme HMAC est paramétré par un remplissage interne et externe, une fonction de hachage (h) et une longueur de valeur d'étiquette d'authentification. Pour cette spécification, les remplissages interne et externe sont fixés aux valeurs définies dans [RFC2104]. La longueur de l'étiquette d'authentification correspond à la difficulté de produire une falsification. Pour une utilisation dans des environnements contraints, nous définissons un algorithme HMAC qui est tronqué. Il n'y a actuellement aucun problème connu avec la troncature ; cependant, la force de sécurité de l'étiquette de message est réduite en conséquence. Lors de la troncature, les bits de longueur d'étiquette les plus à gauche sont conservés et transmis.

Les algorithmes définis dans ce document se trouvent dans le Tableau 3.

+=============+=======+=========+============+======================+ | Nom | Valeur| Hachage | Longueur | Description | | | | | d'étiquette| | +=============+=======+=========+============+======================+ | HMAC | 4 | SHA-256 | 64 | HMAC avec SHA-256 | | 256/64 | | | | tronqué à 64 bits | +-------------+-------+---------+------------+----------------------+ | HMAC | 5 | SHA-256 | 256 | HMAC avec SHA-256 | | 256/256 | | | | | +-------------+-------+---------+------------+----------------------+ | HMAC | 6 | SHA-384 | 384 | HMAC avec SHA-384 | | 384/384 | | | | | +-------------+-------+---------+------------+----------------------+ | HMAC | 7 | SHA-512 | 512 | HMAC avec SHA-512 | | 512/512 | | | | | +-------------+-------+---------+------------+----------------------+

                   Tableau 3: Valeurs de l'algorithme HMAC

Certains algorithmes de destinataire transportent la clé, tandis que d'autres dérivent une clé à partir de données secrètes. Pour les algorithmes qui transportent la clé (comme AES Key Wrap), la taille de la clé HMAC DEVRAIT être la même que la taille de la sortie de la fonction de hachage sous-jacente. Pour les algorithmes qui dérivent la clé (comme ECDH), la clé dérivée DOIT être de la même taille que la sortie de la fonction de hachage sous-jacente.

Lors de l'utilisation d'une clé COSE pour cet algorithme, les vérifications suivantes sont effectuées :

  • Le champ "kty" DOIT être présent, et il DOIT être "Symmetric".

  • Si le champ "alg" est présent, il DOIT correspondre à l'algorithme HMAC utilisé.

  • Si le champ "key_ops" est présent, il DOIT inclure "MAC create" lors de la création d'une étiquette d'authentification HMAC.

  • Si le champ "key_ops" est présent, il DOIT inclure "MAC verify" lors de la vérification d'une étiquette d'authentification HMAC.

Les implémentations créant et validant des valeurs MAC DOIVENT valider que le type de clé, la longueur de clé et l'algorithme sont corrects et appropriés pour les entités impliquées.

3.1.1. Considérations de sécurité pour HMAC

HMAC s'est avéré résistant aux attaques même lorsqu'il est utilisé avec des algorithmes de hachage affaiblis. La meilleure attaque connue actuellement est de forcer brutalement la clé. Cela signifie que la taille de la clé sera directement liée à la sécurité d'une opération HMAC.

3.2. Code d'Authentification de Message AES (AES-CBC-MAC)

AES-CBC-MAC est l'instanciation de la construction CBC-MAC (définie dans [MAC]) utilisant AES comme chiffrement par bloc. Pour plus de concision, nous utilisons également "AES-MAC" pour faire référence à AES-CBC-MAC. (Notez que ce n'est pas le même algorithme que le Code d'Authentification de Message basé sur le Chiffrement AES (AES-CMAC) [RFC4493].)

AES-CBC-MAC est paramétré par la longueur de la clé, la longueur de l'étiquette d'authentification et le Vecteur d'Initialisation (IV) utilisé. Pour tous ces algorithmes, l'IV est fixé à tous les zéros. Nous fournissons un tableau d'algorithmes pour diverses longueurs de clé et d'étiquette. Les algorithmes définis dans ce document se trouvent dans le Tableau 4.

 +=========+=======+============+============+==================+
| Nom | Valeur| Longueur | Longueur | Description |
| | | de clé | d'étiquette| |
+=========+=======+============+============+==================+
| AES-MAC | 14 | 128 | 64 | Clé AES-MAC 128 |
| 128/64 | | | | bits, étiquette |
| | | | | 64 bits |
+---------+-------+------------+------------+------------------+
| AES-MAC | 15 | 256 | 64 | Clé AES-MAC 256 |
| 256/64 | | | | bits, étiquette |
| | | | | 64 bits |
+---------+-------+------------+------------+------------------+
| AES-MAC | 25 | 128 | 128 | Clé AES-MAC 128 |
| 128/128 | | | | bits, étiquette |
| | | | | 128 bits |
+---------+-------+------------+------------+------------------+
| AES-MAC | 26 | 256 | 128 | Clé AES-MAC 256 |
| 256/128 | | | | bits, étiquette |
| | | | | 128 bits |
+---------+-------+------------+------------+------------------+

Tableau 4: Valeurs de l'algorithme AES-MAC

Les clés peuvent être obtenues à partir d'une structure de clé ou d'une structure de destinataire. Les implémentations créant et validant des valeurs MAC DOIVENT valider que le type de clé, la longueur de clé et l'algorithme sont corrects et appropriés pour les entités impliquées.

Lors de l'utilisation d'une clé COSE pour cet algorithme, les vérifications suivantes sont effectuées :

  • Le champ "kty" DOIT être présent, et il DOIT être "Symmetric".

  • Si le champ "alg" est présent, il DOIT correspondre à l'algorithme AES-MAC utilisé.

  • Si le champ "key_ops" est présent, il DOIT inclure "MAC create" lors de la création d'une étiquette d'authentification AES-MAC.

  • Si le champ "key_ops" est présent, il DOIT inclure "MAC verify" lors de la vérification d'une étiquette d'authentification AES-MAC.

3.2.1. Considérations de sécurité pour AES-CBC-MAC

Un certain nombre d'attaques existent contre le Code d'Authentification de Message par Enchaînement de Blocs Chiffrés (CBC-MAC) qui doivent être prises en compte.

  • Une clé unique ne doit être utilisée que pour des messages de longueur fixe ou connue. Si ce n'est pas le cas, un attaquant pourra générer un message avec une étiquette valide étant donné deux paires message et étiquette. Cela peut être résolu en utilisant des clés différentes pour des messages de longueurs différentes. La structure actuelle atténue ce problème, car une structure de codage spécifique qui inclut des longueurs est construite et signée. (CMAC résout également ce problème.)

  • En mode Enchaînement de Blocs Chiffrés (CBC), si la même clé est utilisée pour les opérations de chiffrement et d'authentification, un attaquant peut produire des messages avec un code d'authentification valide.

  • Si l'IV peut être modifié, alors les messages peuvent être falsifiés. Cela est résolu en fixant l'IV à tous les zéros.