objectif
Calculer et comparer une signature HMAC de manière sûre.
code minimal
import hmac, hashlib, secrets
key = b"supersecret"
msg = b"payload"
sig = hmac.new(key, msg, hashlib.sha256).hexdigest()
# Vérification constante en temps
ok = secrets.compare_digest(sig, hmac.new(key, msg, hashlib.sha256).hexdigest())
print(ok) # attendu: True
utilisation
import hmac, hashlib
def sign(k: bytes, m: bytes) -> str:
return hmac.new(k, m, hashlib.sha256).hexdigest()
print(len(sign(b"k", b"m")) == 64)
variante(s) utile(s)
import hmac, hashlib, base64
sig = hmac.new(b"k", b"m", hashlib.sha1).digest()
print(isinstance(base64.b64encode(sig), bytes))
notes
- Toujours utiliser compare_digest pour éviter les attaques par timing.
- Ne réutilisez pas de clés HMAC entre usages distincts.