HMAC(Hash-based Message Authentication Code)は、RFC 2104 で定義されたメッセージ認証の仕組みです。メッセージと秘密鍵を一緒にハッシュ関数へ通し、固定長の署名を生成します。通常のハッシュと違い、HMAC はキーを知っている相手だけが正しい署名を生成・検証できるため、メッセージの改ざん検知だけでなく「その送信元が本当にキーを持っているか」も確認できます。
**HMAC は現代的な API セキュリティの土台です**。Stripe、GitHub、Shopify、Slack、Twilio は Webhook イベントに HMAC-SHA256 署名を付け、リクエストが本当にそのサービスから来たかを確認します。AWS Signature V4 も HMAC-SHA256 を使います。JWT の HS256 も本質的には HMAC-SHA256 です。API 署名を理解するなら、まず HMAC を押さえるのが近道です。
**プラットフォームごとに署名形式は違います**。Stripe は `Stripe-Signature` ヘッダーで `t=timestamp,v1=hex_signature` 形式を使い、`timestamp.payload` を署名します。GitHub は `X-Hub-Signature-256` に `sha256=hex_signature` を入れます。Shopify は `X-Shopify-Hmac-Sha256` に Base64 形式の値を入れます。このツールは、こうしたよく使われる形式の解析と検証を支援します。
**署名検証が失敗する理由**で最も多いのは、署名対象の文字列が違うことです。生の本文ではなく `timestamp.payload` を署名している、末尾に改行が入っている、`sha256=` のような接頭辞を含めたまま比較している、といった小さな差で結果は一致しません。各サービスのドキュメントを確認し、実際に署名された文字列と出力形式をそろえてください。
このツールはブラウザ標準の **Web Crypto API**(SubtleCrypto)で HMAC を計算します。HTTPS や TLS と同じ系統の暗号 API を使い、すべてローカルで処理します。キーやメッセージはサーバーへ送信されません。DevTools の Network パネルを開けば、外部送信がないことを確認できます。