HMAC (Hash-based Message Authentication Code) est une technologie d'authentification de messages très répandue, définie par la RFC 2104. HMAC traite une clé et un message dans une fonction de hash afin de produire une signature de longueur fixe. Contrairement à un hash classique, HMAC exige de connaître la clé pour générer ou vérifier la signature, ce qui permet de garantir à la fois l'intégrité et l'authenticité du message.
**HMAC est l'un des fondements de la sécurité moderne des APIs**. Stripe, GitHub, Shopify, Slack et Twilio utilisent HMAC-SHA256 pour signer les événements de webhook et confirmer que les requêtes proviennent bien de la plateforme. AWS utilise aussi HMAC-SHA256 pour la signature de requêtes Signature V4. L'algorithme HS256 de JWT est, dans son principe, HMAC-SHA256. Comprendre HMAC est donc une étape essentielle pour maîtriser la sécurité des APIs.
**Chaque plateforme a son propre format de signature** : Stripe utilise `t=timestamp,v1=hex_signature` et signe `timestamp.payload` ; GitHub utilise `X-Hub-Signature-256` au format `sha256=hex_signature` ; Shopify envoie `X-Shopify-Hmac-Sha256` sous forme de valeur encodée en Base64. Cet outil peut analyser et vérifier automatiquement ces formats courants.
**Pourquoi une vérification de signature peut-elle échouer ?** Le plus souvent, le format du message ne correspond pas : la plateforme peut signer `timestamp.payload` au lieu du corps brut du message, le contenu peut contenir des retours à la ligne en trop, ou la signature peut inclure un préfixe (comme `sha256=`) à supprimer. Consultez attentivement la documentation de la plateforme et comparez avec la valeur hexadécimale brute.
Cet outil utilise la **Web Crypto API** native du navigateur (SubtleCrypto) pour les calculs HMAC, la même base cryptographique que celle utilisée par HTTPS et TLS. Tous les calculs se font localement ; les clés et les messages ne sont jamais envoyés à un serveur. Vous pouvez ouvrir le panneau Network des DevTools du navigateur pour vérifier qu'aucune requête externe n'est effectuée.