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 hachage à 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 charges utiles signées.
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é de la charge utile. 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 la charge utile 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.jsconst canonical = [method, path, timestamp, body].join('\n');const signature = crypto.createHmac('sha256', secret).update(canonical).digest('hex');- Ouvrez le générateur HMAC dans votre navigateur.
- Sélectionnez SHA-256 comme algorithme.
- 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.
- Collez le message ou la charge utile exacte à signer, octet pour octet.
- 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 constantconst 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 dans des variables d'environnement côté serveur ou dans un gestionnaire de secrets, et signez les requêtes côté serveur. La signature côté client ne dissuade que les manipulations occasionnelles ; un outil de navigateur sert aux tests pendant le développement, pas à protéger un point d'entrée de production.
Q.HMAC est-il du chiffrement ?
A.Non. HMAC est un hachage à clé pour l'authentification et l'intégrité : il prouve l'expéditeur et l'intégrité du message, qui reste lisible. Toute personne qui voit la requête signée peut en lire tout le contenu. Si la confidentialité compte, chiffrez la charge utile 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.
Articles liés
Déchiffrer AES-256-GCM localement
Déchiffrer AES-256-GCM est simple lorsque vous disposez du mot de passe et des bonnes métadonnées. Voici la procédure exacte – et les erreurs qui font échouer le déchiffrement.
bcrypt vs Argon2 : choisir un hachage
bcrypt protège les mots de passe depuis des décennies ; Argon2 est la recommandation moderne, résistante à la mémoire. Voici la comparaison et quand utiliser chacun en 2026.
Impression de QR codes : bonnes pratiques
Un QR code qui ne se scanne pas sur papier est un lien cassé. Réglez la taille minimale, le contraste, la correction d'erreur et la zone de silence avant d'envoyer le fichier à l'impression.
Outils de sécurité : zéro connaissance
Les outils auxquels vous vous adressez avec des données sensibles ne devraient pas voir ces données. Un guide de la boîte à outils de sécurité zéro connaissance : ce que fait chaque outil, quand l'utiliser et comment le vérifier.
Chiffrer les fichiers .env avant commit
Committer un .env en clair fuite tous les secrets de votre dépôt. Si une copie doit vivre dans git, chiffrez-la d'abord – voici le flux sûr.
Vérifier les sommes de contrôle des ISO téléchargés : Linux, Windows et macOS
Une ISO corrompue peut échouer des heures après le début de l'installation. Vérifiez la somme SHA-256 avant de la graver ou de l'écrire, et n'envoyez jamais le fichier pour le faire.