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 ジェネレーターの使い方

  1. メッセージ を入力します(生のバイト列ならエンコーディングを Hex に切り替えます)。
  2. 秘密鍵 を入力し、テキスト(UTF-8)・Hex・Base64 のどれかを選びます。
  3. アルゴリズム を選びます(例:HMAC-SHA-256)。
  4. 出力形式 を選んで 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 の二重ハッシュはそれを防ぎます。

おすすめの次のステップ

他のカテゴリを見る