Wie in Verwenden HMAC für Authentication
Erzeugen and verify HMAC signatures to authenticate messages and API requests.
问题
You brauchen in prove das ein Nachricht oder API Anfrage was sent durch someone who knows ein shared secret Schlüssel, und das it was nicht modified in transit.
Voraussetzungen
- Understanding of hash functions
- Knowledge of shared secret keys
Schritte
-
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).
Eingabemessage: '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.
EingabeHMAC-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.
Eingaberecomputed tag == received tag输出verified ✓
Erwartetes Ergebnis
Ein HMAC Tag das authenticates der Nachricht source und integrity, verifiable durch anyone mit der shared Schlüssel.
Häufige Fehler
- 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.
Troubleshooting指引
- 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.
Sicherheitsgrenzen
- 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.