HMAC ジェネレーター
テキスト・16 進・Base64 の鍵でメッセージの HMAC-SHA256、SHA-384、SHA-512、SHA-224、SHA-1、MD5、SHA3、RIPEMD-160 を計算。16 進か Base64 で即時に出力します。
HMAC(RFC 2104)は鍵をハッシュに 2 回混ぜ込みます:H((K ⊕ opad) || H((K ⊕ ipad) || message))。ハッシュのブロック長より長い鍵は先にハッシュされます。サーバー側では MAC を定数時間で比較してください。
HMAC ジェネレーターとは?
メッセージと秘密鍵から、鍵付きハッシュのメッセージ認証コード(HMAC、RFC 2104)を計算します。SHA-2、SHA-3、SHA-1、MD5、RIPEMD-160 に対応し、鍵はテキスト・16 進・Base64 で指定でき、入力しながら MAC を小文字/大文字の 16 進または Base64 で表示します。
HMAC ジェネレーターの使い方
- メッセージ を入力します(生のバイト列ならエンコーディングを Hex に切り替えます)。
- 秘密鍵 を入力し、テキスト(UTF-8)・Hex・Base64 のどれかを選びます。
- アルゴリズム を選びます(例:HMAC-SHA-256)。
- 出力形式 を選んで HMAC をコピーします。
例
Message "what do ya want for nothing?", key "Jefe", HMAC-SHA-256
5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843
RFC 4231 のテストケース 2。
HMAC ジェネレーターを使うべき場面
Webhook 署名(Stripe、GitHub、Shopify、Slack)の検証、API リクエストの署名、AWS 形式の署名手順のデバッグ、HMAC テストベクターの確認に使えます。パスワードのハッシュ化には向かず(bcrypt や Argon2 を使ってください)、デジタル署名でもありません。鍵を持つ人なら誰でも MAC を作れます。
HMAC ジェネレーターの仕組み
HMAC(K, m) = H((K′ ⊕ opad) ‖ H((K′ ⊕ ipad) ‖ m)) です。K′ は鍵をハッシュのブロックサイズまでゼロで埋めたもの(ブロックより長い鍵は先にハッシュ化されます)で、ipad = 0x36、opad = 0x5C を繰り返したものです。この構成は、MD5 や SHA-1 のように衝突耐性が破られたハッシュでも安全性を保ちます。ダイジェストは hash-wasm で計算し、結果は RFC 4231 と RFC 2202 のテストベクターと一致します。
一般的な使用例
- GitHub の
X-Hub-Signature-256や Stripe の Webhook 署名を検証する - デバッグ中に API リクエストの署名を再現する
- RFC 4231 の HMAC テストベクターを確認する
- レガシーな OAuth 1.0 や TOTP のデバッグ用に HMAC-SHA1 の値を生成する
- 結果が食い違う 2 つの言語の出力を比較する
セキュリティ注意事項
鍵とメッセージはブラウザ内にとどまります。サーバー側で MAC を比較するときは、タイミング攻撃を避けるため定数時間の関数を使ってください。
よくある質問
HMAC が Webhook のヘッダーと一致しないのはなぜですか?
リクエスト本文をバイト単位でそのまま(整形し直した JSON ではなく)ハッシュしているか、秘密鍵が正確か(Base64 や whsec_ のような接頭辞付きで渡すプロバイダーもあります)、期待される出力のエンコーディング(GitHub は 16 進、Shopify は Base64)かを確認してください。
HMAC-SHA1 や HMAC-MD5 はまだ安全ですか?
HMAC は衝突耐性に依存しないため、MAC としては実用的な解読法がありません。ただしレガシー扱いなので、新しいシステムでは HMAC-SHA-256 以上を使ってください。
鍵は空でもよいですか?
RFC 2104 では許容され、ツールも計算しますが、空の鍵では安全性はありません。
HMAC は鍵とメッセージを連結してハッシュするのと同じですか?
いいえ。単純な hash(key + message) は SHA-2 で長さ拡張攻撃を受けますが、HMAC の二重ハッシュはそれを防ぎます。