Intégrité ET authenticité

Le MAC : un code d'authentification avec clé

Pour lier une empreinte à un émetteur, on remplace le hachage nu par un code d'authentification de message, ou MAC (Message Authentication Code).

La définition

Un MAC est une fonction qui prend deux entrées et produit une courte étiquette :

tag = MAC(clé_secrète, message)

Cette étiquette (le tag) est souvent appelée balise ou code d'authentification. Le point crucial : sans la clé, on ne peut pas calculer le bon tag pour un message donné.

Le protocole complet

Alice et Bob partagent d'avance une même clé secrète K. L'échange se déroule ainsi :

   ALICE (clé K)                         BOB (clé K)
   ------------                          -----------
   tag = MAC(K, M)
        |
        |   envoie   [ M ] [ tag ]
        +----------------------------------->  reçoit M, tag
                                               tag' = MAC(K, M)
                                               tag' == tag  ?
                                                 oui -> accepte
                                                 non -> rejette

Bob recalcule lui-même le tag à partir du message reçu et de sa copie de la clé. Si son résultat tag' est identique au tag reçu, il a la preuve de deux choses en même temps : le message n'a pas changé (intégrité) et il vient de quelqu'un qui connaît K, donc d'Alice (authenticité).

Pourquoi Mallory échoue

Reprenons l'attaquant actif du chapitre précédent. Mallory veut substituer M'. Il lui faudrait joindre MAC(K, M'). Mais il ne connaît pas K. Il ne peut donc produire aucun tag valide, et Bob rejette le message forgé.

MAC contre signature

On confond parfois MAC et signature numérique. Les deux authentifient, mais le modèle de clé diffère profondément :

MAC Signature
Type de clé symétrique (partagée) asymétrique (privée/publique)
Qui peut créer un tag les deux parties seul le détenteur de la clé privée
Qui peut vérifier ceux qui ont la clé tout le monde (clé publique)
Non-répudiation non oui

Comme Alice et Bob partagent la même clé, un MAC ne prouve pas lequel des deux a émis le message : chacun aurait pu produire le tag. Il n'offre donc pas la non-répudiation. En échange, il est bien plus rapide qu'une signature et suffit quand les deux parties se font confiance.

En résumé

Un MAC combine une clé secrète et un message pour produire un tag que seul un détenteur de la clé peut calculer. L'émetteur envoie message + tag ; le récepteur recalcule le tag avec la clé partagée et compare. Cela garantit intégrité et authenticité à la fois. Contrairement à une signature (clé asymétrique, vérifiable par tous, non-répudiation), le MAC repose sur une clé symétrique partagée : plus rapide, mais sans preuve de l'émetteur exact.