Comment en Utiliser HMAC pour Authentication
Générer and verify HMAC signatures to authenticate messages and API requests.
问题
You besoin en prove ce un message ou API requête was sent par someone who knows un shared secret clé, et ce it was non modified en transit.
Prérequis
- Understanding of hash functions
- Knowledge of shared secret keys
Étapes
-
1. Prepare the message and key
Define the message to authenticate (e.g., an API request body or a timestamp + payload). Agree on a secret key with the other party. The key should be at least as long as the hash output (32 bytes for HMAC-SHA256).
entréemessage: 'payload' | key: 'secret'输出ready to sign -
2. Compute the HMAC
Run HMAC-SHA256 with the key and message. HMAC wraps the hash function with key mixing, producing a tag that only someone with the key can compute. The tag is typically sent as a hex or Base64 string alongside the message.
entréeHMAC-SHA256(key, message)输出tag: a1b2c3... -
3. Verify on the receiving end
The recipient recomputes the HMAC with the same key and message and compares it to the received tag using a constant-time comparison. If they match, the message is authentic and unmodified. If they differ, reject the message.
entréerecomputed tag == received tag输出verified ✓
Résultat attendu
Un HMAC étiquette ce authenticates le message source et integrity, verifiable par anyone avec le shared clé.
Erreurs courantes
- Comparing tags with a non-constant-time comparison
- Use a constant-time comparison (e.g., crypto.timingSafeEqual) to prevent timing attacks that leak the tag byte by byte.
- Including the key in the message
- The key is never sent. Only the message and the HMAC tag are transmitted. The key stays on both sides.
Dépannage指引
- If verification fails, check that the message is byte-identical on both sides (no encoding differences).
- Include a timestamp or nonce in the message to prevent replay attacks.
Limites de sécurité
- HMAC security depends on the secrecy of the key and the collision resistance of the underlying hash. Use SHA-256 or stronger.
- All computation is local.