Skip to main content
CheckTown
Outils Dev

HMAC : fonctionnement de l'authentification par hachage

Publié le 6 min de lecture
Dans cet article

Qu'est-ce que HMAC ?

HMAC (Hash-based Message Authentication Code) est un mecanisme cryptographique qui combine une cle secrete avec une fonction de hachage pour produire un code d'authentification de message. Contrairement a un simple hachage, HMAC prouve a la fois l'integrite et l'authenticite d'un message.

HMAC est defini dans la RFC 2104 et est utilise dans TLS, IPsec, les signatures JWT et la verification des webhooks d'API. L'algorithme est resistant aux attaques par extension de longueur qui affectent les fonctions de hachage simples.

Comment fonctionne HMAC

HMAC utilise une approche de hachage en deux passes avec un rembourrage interne et externe. La cle secrete est completee a la taille du bloc de la fonction de hachage, puis combinee avec deux constantes differentes.

  • Hachage interne — la cle est combinee avec ipad (0x36), concatenee avec le message et hachee : H(K XOR ipad || message)
  • Hachage externe — la cle est combinee avec opad (0x5C), concatenee avec le resultat du hachage interne et hachee : H(K XOR opad || inner_hash)
  • Resultat final — le resultat du hachage externe est la valeur HMAC, representee sous forme de chaine hexadecimale

Cette construction a double hachage empeche les attaques par extension de longueur. Meme si un attaquant connait H(message), il ne peut pas calculer HMAC(cle, message || extra) sans la cle secrete.

Algorithmes HMAC

La construction HMAC fonctionne avec n'importe quelle fonction de hachage cryptographique. Les choix les plus courants sont SHA-256, SHA-384 et SHA-512.

  • HMAC-SHA256 — sortie 256 bits, la variante la plus utilisee pour l'authentification d'API, les signatures JWT HS256 et la verification de webhooks. Taille de cle recommandee : 32 octets
  • HMAC-SHA384 — sortie 384 bits, utilise dans les suites TLS 1.3 et les applications haute securite. Taille de cle recommandee : 48 octets
  • HMAC-SHA512 — sortie 512 bits, prefere quand une marge de securite maximale est necessaire. Taille de cle recommandee : 64 octets

La cle doit etre au moins aussi longue que la sortie de hachage. Pour la plupart des applications, HMAC-SHA256 avec une cle aleatoire de 32 octets offre une excellente securite.

Essayez gratuitement — sans inscription

Generer des signatures HMAC →

Cas d'utilisation courants

HMAC est le fondement de nombreux protocoles de securite et schemas d'authentification d'API.

  • Authentification d'API — des services comme Stripe, GitHub et AWS utilisent des signatures HMAC pour verifier les charges utiles de webhooks
  • Signature JWT — les algorithmes HS256, HS384 et HS512 utilisent HMAC pour signer la charge utile du token
  • Integrite des messages — HMAC verifie que les donnees transmises n'ont pas ete alterees en transit
  • OAuth 1.0a — la methode HMAC-SHA1 signe les parametres de requete OAuth pour prouver l'autorisation du client

HMAC vs autres methodes d'authentification

HMAC est l'une des approches d'authentification de messages. Chacune a des compromis differents en securite, performance et gestion des cles.

  • HMAC vs signatures numeriques — HMAC utilise une cle partagee (symetrique), les signatures numeriques utilisent des paires de cles (asymetrique). HMAC est plus rapide mais necessite le partage du secret.
  • HMAC vs cles d'API — les cles d'API sont des jetons porteur. HMAC signe le contenu de la requete, empechant la falsification de nouvelles requetes a partir d'une interception.
  • HMAC vs hachage simple — le hachage prouve l'integrite mais pas l'authenticite. HMAC necessite la cle secrete, donc seules les parties autorisees peuvent generer des signatures valides.

Questions frequemment posees

Quelle est la longueur de cle HMAC ideale ?

La cle doit etre au moins aussi longue que la sortie de hachage — 32 octets pour HMAC-SHA256, 48 pour HMAC-SHA384, 64 pour HMAC-SHA512. Les cles plus courtes affaiblissent la securite. Les cles plus longues que la taille du bloc sont d'abord hachees.

HMAC est-il identique au chiffrement ?

Non. HMAC fournit l'authentification et l'integrite, pas la confidentialite. Le message reste lisible. Utilisez le chiffrement (AES, ChaCha20) en plus de HMAC pour masquer le contenu.

Puis-je utiliser HMAC avec l'API Web Crypto du navigateur ?

Oui. L'API Web Crypto prend en charge HMAC nativement via crypto.subtle.importKey() et crypto.subtle.sign(). Vous pouvez generer des signatures HMAC entierement cote client.

Outils associés