HMAC et hachage des signatures API : protection des webhooks
Lorsqu'un service tiers vous envoie des données via un webhook ou que vous devez authentifier une demande d'API, vous avez besoin d'un moyen de prouver que le message n'a pas été falsifié et provient réellement de celui qui le prétend. Le hachage seul ne résout pas ce problème ; vous avez besoin de HMAC. Comprendre la différence entre un hachage simple et un HMAC, et comment vérifier correctement les signatures, constitue la différence entre une intégration sécurisée et une intégration compromise.
Qu'est-ce qu'un hachage
Un hachage est une fonction unidirectionnelle qui transforme n'importe quelle entrée (texte, fichier, réponse API) en une chaîne de longueur fixe. La même entrée produit toujours la même sortie. Les algorithmes de hachage courants incluent SHA-256, SHA-1 et MD5. Vous pouvez utiliser un générateur de hachage pour voir cela en action : "bonjour" devient toujours le même hachage SHA-256. La propriété clé est que le hachage est déterministe mais impossible à inverser ; vous ne pouvez pas récupérer l'entrée originale du hachage.
Qu'est-ce que le HMAC
HMAC signifie Code d'authentification de message basé sur le hachage. Contrairement à un simple hachage, HMAC combine un message avec une clé secrète avant le hachage. Le fournisseur de webhook dispose d'une clé secrète, hache le message avec cette clé et vous envoie le message et le hachage. Vous répétez le processus avec la même clé secrète ; si votre hachage calculé correspond à celui envoyé, vous savez que le message est authentique et non modifié. Le Générateur HMAC L'outil vous permet de tester cela avec votre propre message et votre secret.
La différence critique : hachage vs HMAC
Voici pourquoi c'est important :
- Hachage simple : N'importe qui peut voir votre message et recalculer le hachage pour en forger un "valide". Cela ne prouve rien.
- HMAC : Seule une personne possédant la clé secrète peut produire le bon HMAC. Cela prouve cryptographiquement que le message provient du détenteur de la clé et n’a pas été modifié.
Si un service vous envoie un webhook avec uniquement un hachage, un attaquant peut l'intercepter, modifier les données, recalculer le hachage, et vous ne le remarquerez pas. Avec HMAC et un secret partagé, l'attaquant ne peut pas falsifier une signature valide sans la clé.
Vérifier les signatures de webhook dans votre code
Lorsqu'un webhook arrive, le service fournit la charge utile du message et un en-tête de signature (souvent X-Signature ou X-Webhook-Signature). Votre code doit :
- Récupérez votre clé secrète depuis une configuration sécurisée (variables d'environnement, un gestionnaire de secrets).
- Calculez le HMAC-SHA256 du corps brut de la requête à l’aide de cette clé.
- Comparez votre calcul HMAC octet par octet avec l'en-tête de signature (utilisez toujours la comparaison à temps constant pour éviter les attaques temporelles).
- S'ils correspondent, le webhook est authentique. Sinon, rejetez-le.
La plupart des fournisseurs de webhooks documentent leur algorithme HMAC et le format exact à signer : il s'agit parfois du corps JSON brut, parfois d'un horodatage concaténé au corps. Suivez exactement leurs spécifications.
HMAC vs JWT : où se situent-ils
Les JWT (JSON Web Tokens) sont souvent confondus avec les signatures HMAC. Un JWT est un jeton autonome composé de trois parties : un en-tête, une charge utile (revendications) et une signature. La signature peut être basée sur HMAC ou RSA. Décodeurs JWT vous permet d'inspecter et de vérifier les jetons. Alors que les HMAC vérifient un seul message, les JWT sont des jetons que vous stockez et envoyez à chaque demande ou appel d'API. Pour les webhooks et l’authentification de messages ponctuels, HMAC est plus simple et suffisant. Pour les jetons de session en cours ou les informations d'identification API, un JWT est souvent plus flexible.
Confidentialité : signez et vérifiez entièrement dans votre navigateur
Les outils HMAC et de hachage de TextArray fonctionnent entièrement dans votre navigateur. Aucun message, secret ou signature n'est téléchargé sur un serveur. Aucun compte n'est requis et les outils fonctionnent hors ligne après le chargement de la page. Vous pouvez coller en toute sécurité des charges utiles de webhook et des clés API pour tester et déboguer les signatures sans exposer les données à un tiers ou à un service de journalisation. Ceci est particulièrement utile lorsque vous travaillez avec des clés API sensibles ou des données client pendant le développement.
Commencer
Commencez par comprendre le hachage : utilisez le générateur de hachage pour voir comment la même entrée produit toujours la même sortie SHA-256. Puis déplacez-vous vers Génération HMAC pour voir comment une clé secrète modifie la sortie. Essayez de modifier légèrement la clé ou le message ; le HMAC se retourne complètement, contrairement à une somme de contrôle naïve. Une fois que vous avez compris les mécanismes, appliquez-les à la logique de vérification de votre webhook. Pour les charges utiles sensibles comme texte crypté ou jetons décodés, associez-les toujours aux demandes signées par HMAC pour garantir l'intégrité et l'origine.