Skip to main content
Aller au contenu principal
Sécurité13 juillet 2026 4 min de lecture

Signature API HMAC-SHA256

Les webhooks et clients API utilisent HMAC pour prouver qu'un message provient de quelqu'un qui détient le secret. Les détails qui cassent les intégrations sont les octets, le timing et l'endroit où vit le secret.

Créez des signatures HMAC-SHA256 localement avec le générateur HMAC. Votre secret et votre message ne quittent jamais votre navigateur.

Ce qu'est réellement HMAC

HMAC (Hash-based Message Authentication Code) est un hash à clé. Il prend un secret et un message et produit une signature de taille fixe qui dépend des deux.

Parce que le secret est intégré au calcul, seule une personne qui connaît le secret peut produire ou vérifier la signature. Cela fait de HMAC le cheval de trait de l'authentification API, de la vérification de webhooks et des payloads signés.

HMAC n'est pas du chiffrement : la signature ne cache rien, et quiconque l'intercepte peut la lire. HMAC apporte l'authentification et l'intégrité — la preuve que le message vient de quelqu'un qui détient le secret.

Quand vous avez besoin de signatures HMAC

Les cas les plus courants : les webhooks et les requêtes API. Quand un fournisseur publie un événement sur votre point de terminaison, la signature confirme l'authenticité du payload. Quand un client appelle votre API, une requête signée prouve qu'il détient le secret.

  • Webhooks : le destinataire vérifie la signature pour prouver que le payload provient de l'expéditeur
  • Authentification API : les clients signent les requêtes avec un secret partagé au lieu d'envoyer un mot de passe
  • Contrôles d'intégrité : détecter les altérations de message entre services
  • Protection contre le rejeu : signer un message qui inclut un horodatage ou un nonce

Créer une signature HMAC-SHA256 : pas à pas

La canonicalisation fait échouer les intégrations le plus souvent. Lors de ma première configuration de webhook, chaque signature échouait : l'expéditeur ajoutait un saut de ligne final inattendu. La solution : nous mettre d'accord sur les octets exacts — clés JSON, échappement, fins de ligne.

// Exemple : chaîne canonique et HMAC-SHA256 en Node.js
const canonical = [method, path, timestamp, body].join('\n');
const signature = crypto.createHmac('sha256', secret).update(canonical).digest('hex');
  1. Ouvrez le générateur HMAC dans votre navigateur.
  2. Sélectionnez SHA-256 comme algorithme.
  3. Collez votre clé secrète dans le champ clé. Générez-en une avec le générateur de mot de passe si nécessaire.
  4. Collez le message ou payload exact à signer, octet pour octet.
  5. Copiez la signature générée et joignez-la à la requête, par exemple comme en-tête Authorization ou X-Signature.

Avertissement: La signature change si un seul octet du message change, et la chaîne exacte que vous signez doit correspondre à ce que l'autre côté signe. Les fins de ligne et les espaces comptent.

Vérifier les signatures en toute sécurité côté réception

La vérification est un second calcul HMAC avec le même secret et le même message, comparé à la signature reçue.

La comparaison doit être en temps constant. Une comparaison de chaînes classique peut fuiter des informations de timing qui aident les attaquants à forger des signatures.

Une comparaison classique s'arrête au premier caractère différent ; le temps de réponse révèle la proximité de la tentative. Avec assez d'échantillons, la signature se reconstitue octet par octet ; une comparaison en temps constant exécute toujours les mêmes opérations.

// Node.js : comparaison en temps constant
const crypto = require('crypto');
const expected = Buffer.from(signature, 'hex');
const received = Buffer.from(given, 'hex');
const valid = expected.length === received.length && crypto.timingSafeEqual(expected, received);

Erreurs HMAC courantes

  • Coder le secret en dur dans le code côté client où tout le monde peut le lire
  • Signer le corps mais pas la méthode, le chemin et l'horodatage, permettant les attaques par rejeu
  • Utiliser == ou une comparaison de chaînes classique pour vérifier la signature
  • Réutiliser le même secret entre environnements ou ne jamais le faire tourner
  • Envoyer la signature dans un outil qui journalise le secret avec le message
  • Construire la chaîne canonique différemment du destinataire : ordre des clés JSON, espaces de fin
  • Comparer les octets de la signature dans des encodages différents, hex contre base64

FAQ

Q.Le secret HMAC doit-il vivre dans le code client ?

A.Non. Tout ce qui est livré dans un navigateur peut être lu : le secret apparaît dans les outils de développement. Gardez les secrets côté serveur et signez les requêtes côté serveur. La signature côté client ne dissuade que les manipulations occasionnelles.

Q.HMAC est-il du chiffrement ?

A.Non. HMAC est un hash à clé pour l'authentification et l'intégrité : il prouve l'expéditeur et l'intégrité du message, qui reste lisible. Si la confidentialité compte, chiffrez le payload avec AES-GCM ou TLS.

Q.Une signature HMAC peut-elle être inversée ?

A.Aucun moyen pratique n'existe. HMAC est à sens unique, et le secret n'apparaît jamais dans la signature. L'effort se déplace vers la devinette du secret : un secret aléatoire de 256 bits est hors de portée de la force brute. Protégez le secret et faites-le tourner régulièrement.

Références

  • RFC 2104 – HMAC : Hachage à clé pour l'authentification de message : https://www.rfc-editor.org/rfc/rfc2104
  • NIST FIPS 198-1 – The Keyed-Hash Message Authentication Code (HMAC) : https://csrc.nist.gov/pubs/fips/198-1/final
  • RFC 7515 – JSON Web Signature (JWS) : https://www.rfc-editor.org/rfc/rfc7515
  • OWASP Secrets Management Cheat Sheet : https://cheatsheetseries.owasp.org/cheatsheets/Secrets_Management_Cheat_Sheet.html

Créez une signature

HMAC-SHA256, SHA-1 ou MD5 dans votre navigateur ; votre clé ne quitte jamais l'appareil.

Signez ce que vous envoyez, vérifiez en temps constant

Signez les octets exacts que les deux côtés attendent, joignez la signature comme en-tête et rejetez les requêtes avec des horodatages obsolètes.

Comparez les signatures avec une fonction à temps constant, gardez le secret côté serveur et générez les signatures localement avec le générateur HMAC.

Commencez petit : signez un point de terminaison, vérifiez la signature, faites tourner la clé. La mécanique est simple une fois la chaîne canonique convenue.

hmac sha256signature api hmacgénérateur hmac en lignesigner payload webhookauthentification hmaccode d'authentification de messagevérification hmac temps constantexemple hmac sha256outil hmac côté clientsignature requête api