0Pricing
Cryptology Academy · Leçon

HMAC dans les API : signature des requêtes

Implémentez la signature de requêtes fondée sur HMAC et la prévention des attaques par rejeu.

HMAC dans les API : signature des requêtes est une leçon Cryptology Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Cryptology Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Cryptology Academy comprend 4 leçons au total.

Bienvenue

La signature de requêtes fondée sur HMAC est utilisée par AWS, GitHub, Stripe et Twilio pour authentifier les appels d’API. Dans cette leçon, nous construisons un système complet de signature des requêtes.

Pourquoi signer les requêtes d’API ?

Les clés d’API présentes dans les URL peuvent être consignées dans les serveurs mandataires, l’historique du navigateur et les journaux des serveurs. La signature des requêtes inclut l’intégralité du corps de la requête dans le MAC, ce qui garantit que la charge utile n’a pas été modifiée et que la clé n’est pas exposée seule.

Signature AWS version 4

AWS SigV4 calcule : 1. Requête canonique (méthode + URL + en-têtes + hachage du corps) 2. Chaîne à signer (date + région + service + hachage de la requête canonique) 3. Clé de signature = HMAC(HMAC(HMAC(HMAC('AWS4'+secret, date), region), service), 'aws4_request') 4. Signature = HMAC(signing_key, string_to_sign)

Vérification des webhooks GitHub

GitHub signe chaque charge utile de webhook : X-Hub-Signature-256: sha256=HMACHEX Vérification : import hmac expected = 'sha256=' + hmac.new(secret, payload, 'sha256').hexdigest() hmac.compare_digest(expected, received_signature)

Menace des attaques par rejeu

Si un attaquant intercepte une requête signée valide, il peut la renvoyer plusieurs fois. Un transfert de 100 $ signé une seule fois pourrait être rejoué 1 000 fois. HMAC seul n’empêche pas les rejeux : NOT.

Prévention des rejeux par horodatage

Incluez un horodatage dans le message signé. Rejetez les requêtes datant de plus de 5 minutes. Stripe envoie X-Stripe-Signature avec un horodatage. GitHub utilise X-GitHub-Delivery (UUID), et non un mécanisme fondé sur l’horodatage.

Prévention des rejeux par valeur unique

Incluez une valeur aléatoire unique dans chaque requête. Le serveur conserve les valeurs déjà utilisées (dans Redis avec TTL). Rejetez toute requête contenant une valeur déjà vue. Cette méthode est plus fiable que les horodatages pour les systèmes distribués.

Implémentation de la signature des requêtes

import hmac, hashlib, time, os def sign_request(secret, method, path, body, timestamp=None): ts = timestamp or str(int(time.time())) payload = f'{method}\n{path}\n{ts}\n' + hashlib.sha256(body).hexdigest() sig = hmac.new(secret.encode(), payload.encode(), 'sha256').hexdigest() return ts, sig

Vérification côté serveur

def verify_request(secret, method, path, body, ts, received_sig): # Check timestamp freshness if abs(time.time() - int(ts)) > 300: # 5 minutes return False # Recompute and compare _, expected = sign_request(secret, method, path, body, ts) return hmac.compare_digest(expected, received_sig)

JWT avec HMAC (HS256)

Les JWT HS256 utilisent HMAC-SHA256 avec un secret partagé. Le serveur signe et vérifie les jetons. Limitation : toute partie qui possède la clé peut contrefaire des jetons. Pour une relation de confiance asymétrique (authentification par un tiers), utilisez RS256 ou ES256.

Stratégie de rotation des clés

Faites tourner régulièrement les clés HMAC : générez une nouvelle clé, prenez en charge l’ancienne et la nouvelle pendant la période de transition (24 heures), puis retirez l’ancienne clé. AWS SigV4 dérive les clés à partir de secrets datés afin de permettre une rotation quotidienne.

Vérification rapide

Pourquoi la signature des requêtes HMAC ne suffit-elle pas à elle seule pour empêcher les attaques par rejeu ?

Récapitulatif

La signature des requêtes HMAC avec protection contre les rejeux est maintenant implémentée. Nous allons ensuite comparer CMAC et Poly1305 comme solutions de remplacement de MAC fondées sur des chiffrements par blocs.

Questions Fréquemment Posées

La leçon « HMAC dans les API : signature des requêtes » est-elle gratuite ?

Oui — le texte complet de « HMAC dans les API : signature des requêtes » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Cryptology Academy, passe à CoddyKit PRO. Le cours Cryptology Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « HMAC dans les API : signature des requêtes » ?

Implémentez la signature de requêtes fondée sur HMAC et la prévention des attaques par rejeu. Tu pratiques Cryptology Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Cryptology Academy ?

Aucune expérience préalable n'est requise. Cryptology Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.

Combien de temps prend la leçon « HMAC dans les API : signature des requêtes » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Cryptology Academy ?

Oui. Chaque leçon Cryptology Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Concepts des MAC et attaques par extension de longueur
  2. Construction HMAC et preuve de sécurité
  3. HMAC dans les API : signature des requêtes
  4. CMAC et Poly1305 : MAC fondées sur un chiffrement par blocs
← Retour à Cryptology Academy