如何Use HMAC 为 Authentication
生成 and verify HMAC signatures to authenticate messages and API requests.
问题
你需要prove 该消息或 API 请求是 sent 通过某人谁 knows shared secret 键, 和该 它是 不 modified 在 transit.
前置条件
- Understanding 的 hash 函数
- Knowledge 的 shared secret 关键
步骤
-
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).
输入message: '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.
输入HMAC-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.
输入recomputed tag == received tag输出verified ✓
预期结果
HMAC tag 该 authenticates 消息源 和完整性, verifiable 通过任何人具有 shared 键.
常见错误
- 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.
排障指引
- 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.
安全限制
- 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.