Générez des signatures HMAC sécurisées avec notre outil HMAC. Vérifiez l'authenticité des messages sans partager de secrets.
L'incident du webhook
Vendredi soir. Votre processeur de paiement envoie une notification webhook. Un client a payé 1 000 $. Votre système traite la commande et expédie le produit.
Lundi matin, vous découvrez que le webhook était faux. Quelqu'un a forgé la notification. Vous avez expédié 1 000 $ de produit à un escroc.
Comment l'empêcher ? Vous devez vérifier que le webhook provient réellement de votre processeur de paiement. C'est là que HMAC intervient.
Qu'est-ce que HMAC ?
HMAC signifie Hash-based Message Authentication Code (code d'authentification de message basé sur un hachage). C'est un moyen de vérifier à la fois l'intégrité et l'authenticité d'un message.
Contrairement à un simple hachage, HMAC utilise une clé secrète. Seule une personne disposant de la clé peut générer un HMAC valide. Cela prouve que le message provient de quelqu'un qui connaît le secret.
Lorsque vous recevez un message avec un HMAC, vous calculez votre propre HMAC avec la même clé secrète. S'ils correspondent, le message est authentique.
Comment fonctionne HMAC
HMAC combine une fonction de hachage (comme SHA-256) avec une clé secrète. Le processus est le suivant :
1. L'expéditeur crée un HMAC en hachant le message combiné à la clé secrète
2. L'expéditeur envoie le message et le HMAC
3. Le destinataire calcule son propre HMAC avec la même clé et le même message
4. Si les HMAC correspondent, le message est authentique et n'a pas été altéré
Usages réels de HMAC
HMAC est largement utilisé dans la sécurité web :
- Authentification API – Prouver que les requêtes API proviennent de clients autorisés
- Vérification de webhook – Vérifier que les webhooks proviennent du service attendu
- URL signées – Créer des URL qui expirent ou ne peuvent être utilisées qu'une fois
- Jetons de réinitialisation de mot de passe – Des jetons sécurisés qui prouvent la légitimité de la requête
- Intégrité des données – Garantir que les données n'ont pas été modifiées en transit
Implémenter HMAC
Voici comment implémenter HMAC dans les langages populaires :
Node.js (crypto)
const crypto = require('crypto'); // Generate HMAC const hmac = crypto.createHmac('sha256', secretKey) .update(message) .digest('hex'); // Verify HMAC const isValid = crypto.timingSafeEqual( Buffer.from(receivedHmac), Buffer.from(calculatedHmac) );
Python (hmac)
import hmac import hashlib # Generate HMAC signature = hmac.new( secret_key.encode(), message.encode(), hashlib.sha256 ).hexdigest() # Verify HMAC (constant-time comparison) is_valid = hmac.compare_digest(received_sig, signature)
Considérations de sécurité
Utilisez toujours une comparaison à temps constant lors de la vérification des HMAC. La comparaison de chaînes classique s'arrête à la première différence, ce qui peut fuiter des informations via des attaques temporelles.
Gardez votre clé secrète en sécurité. Si quelqu'un l'obtient, il peut forger des HMAC. Stockez les clés dans des variables d'environnement ou des systèmes de gestion des secrets, jamais dans le code.
Utilisez une fonction de hachage robuste. SHA-256 est recommandé. Évitez MD5 et SHA-1, considérés comme faibles.
HMAC en 2026 : toujours la référence pour les webhooks
HMAC-SHA256 reste le schéma de signature par défaut de la plupart des écosystèmes de webhooks : GitHub, Stripe (v1), Twilio et bien d'autres vérifient les charges utiles avec un HMAC basé sur un secret partagé, plus une fenêtre temporelle contre les rejeux.
Les fournisseurs récents proposent aussi des signatures Ed25519 (par exemple GitHub et Stripe v2), qui utilisent des clés asymétriques afin que chacun puisse vérifier sans détenir le secret de signature. Si vous contrôlez à la fois l'émetteur et le vérificateur, HMAC-SHA256 avec une clé aléatoire de 256 bits reste un choix fort et simple.
Dans le navigateur, l'API Web Crypto prend en charge HMAC via subtle.sign, ce qui permet de vérifier des charges utiles de type webhook côté client sans bibliothèque – comparez toujours les signatures à temps constant et incluez un horodatage dans le message signé pour empêcher les rejeux.
FAQ
Q.HMAC vs simple hachage ?
A.Un simple hachage prouve l'intégrité (les données n'ont pas changé) mais pas l'authenticité (qui les a envoyées). HMAC prouve les deux car il exige la clé secrète.
Q.Quelle longueur pour la clé secrète ?
A.Au moins 256 bits (32 octets) pour SHA-256. Générez-la avec un générateur de nombres aléatoires cryptographiquement sécurisé.
Q.Quel algorithme de hachage utiliser ?
A.Utilisez SHA-256. Il est largement pris en charge et considéré comme sûr. Évitez MD5 et SHA-1 qui présentent des faiblesses connues.
Q.Comment empêcher les attaques par rejeu sur les webhooks ?
A.Incluez un horodatage dans le message signé et rejetez les messages en dehors d'une petite fenêtre (généralement 5 minutes). Les fournisseurs signent la charge utile avec un en-tête d'horodatage ; vérifiez les deux et conservez les signatures récentes si vous avez besoin d'une protection plus stricte contre les rejeux.
Q.HMAC ou Ed25519 pour les webhooks en 2026 ?
A.Les deux conviennent : HMAC-SHA256 avec un secret partagé est le choix le plus simple et le plus courant, tandis qu'Ed25519 est préférable lorsque le vérificateur ne doit pas détenir le secret de signature. Les fournisseurs proposent de plus en plus Ed25519 (par exemple GitHub et Stripe v2), mais HMAC reste une référence sûre et prise en charge.
Références
Cet article s'appuie sur les normes industrielles et les bonnes pratiques de sources autoritatives :
- RFC 2104 – HMAC : Hachage à clé pour l'authentification de message : https://www.rfc-editor.org/rfc/rfc2104
Créez des signatures HMAC
Générez des signatures HMAC-SHA256, SHA-1 ou MD5 localement — votre secret reste sur votre appareil.
Conclusion
HMAC transforme un secret partagé en authenticitié vérifiable. Créez et testez des signatures localement avec le générateur HMAC.
Articles liés
API Web Crypto : guide pour développeurs
L'API Web Crypto chiffre, hache et signe nativement dans le navigateur : generateKey, encrypt, decrypt, hash et sign. Ce que l'API couvre, et quand une bibliothèque JavaScript reste utile.
Cryptographie côté client : bonnes pratiques
Pourquoi la cryptographie côté client compte, comment elle protège vos données et les bonnes pratiques d'implémentation.
Vérifier l'intégrité d'un fichier avec SHA-256
Vérifiez l'intégrité d'un fichier avec des sommes de contrôle SHA-256 sans envoyer le fichier à un serveur. Pas à pas pour navigateurs, Linux, macOS et Windows – y compris les fichiers de sommes signés.
Chiffrement côté client : guide développeur
Le chiffrement dans le navigateur est puissant et facile à mal faire. Ce guide couvre le modèle de menace, les primitives Web Crypto, la gestion des clés et une liste de vérification pour la production.
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.