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 hash). C'est un moyen de vérifier à la fois l'intégrité et l'authenticité d'un message.
Contrairement à un simple hash, 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 hash ?
A.Un simple hash 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.