DevToolPal
日本語

HMAC 生成ツール

秘密鍵を使ってメッセージの HMAC-MD5、HMAC-SHA1、HMAC-SHA256、HMAC-SHA384、HMAC-SHA512 を 16 進数または Base64 で計算します。

ローカルで処理、アップロードなし

オプション

鍵の形式
出力形式

メッセージ

0 文字 · 0 B

HMAC

結果はここに表示されます

機能

HMAC(ハッシュベースのメッセージ認証コード、RFC 2104)は、秘密鍵とハッシュ関数を組み合わせてメッセージに署名します。同じ鍵を持つ受信者が HMAC を計算し直し、一緒に送られてきた値と比べます。メッセージが改ざんされていたり、送信者が鍵を知らなかったりすれば、値は一致しません。

HMAC は Webhook の署名(GitHub、Stripe、Slack)、API リクエストの署名、HS256 の JWT、Cookie の署名、ワンタイムパスワードなど、あらゆる場面で使われています。このツールは HMAC-MD5、HMAC-SHA1、HMAC-SHA256、HMAC-SHA384、HMAC-SHA512 を同時に計算するので、システムが使うものと照合できます。

使い方

  1. 秘密鍵を入力します。鍵がプレーンテキストではなく 16 進数や Base64 のバイト列なら、鍵の形式を切り替えます。
  2. メッセージを貼り付けるか、サンプルをクリックします。
  3. 入力に合わせてすべての HMAC が更新されます。16 進数か Base64 を選び、必要な値をコピーします。

メッセージは入力どおり、空白や改行も含めて UTF-8 でエンコードされます。

例

鍵 key、メッセージ The quick brown fox jumps over the lazy dog の HMAC-SHA256 は f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8 です。コマンドラインでも同じ値を確認できます:

echo -n "The quick brown fox jumps over the lazy dog" | openssl dgst -sha256 -hmac "key"

-n に注意してください。これがないと echo が改行を追加し、HMAC が変わります。

Webhook の検証

Webhook を検証するには、JSON として解析する前の生のリクエスト本文を取り、サービスのドキュメントどおりの文字列(多くは timestamp.body)を組み立て、署名用シークレットで HMAC を計算して署名ヘッダーと比べます。自分のコードでは、タイミング攻撃を防ぐため定数時間の比較関数を使ってください。

よくある質問

› ハッシュと HMAC の違いは何ですか?

SHA-256 のような通常のハッシュは誰でも計算できます。HMAC はハッシュに秘密鍵を混ぜるので、鍵を知っている人だけが値を作成・検証できます。単なるチェックサムではなく、メッセージ認証コードです。

› どの HMAC アルゴリズムを使うべきですか?

通常は HMAC-SHA256 です。ほとんどの API や Webhook がこれを求めます。HMAC-SHA512 でも構いません。HMAC-MD5 と HMAC-SHA1 も MAC としてはまだ安全とされていますが、古いシステムが要求する場合だけ使ってください。

› サーバーの HMAC と一致しないのはなぜですか?

メッセージの正確なバイト列(末尾の改行や JSON の空白の違いで結果は完全に変わります)、鍵の形式(テキストか 16 進数・Base64 か)、出力のエンコーディングを確認してください。Webhook の多くは、タイムスタンプと生のリクエスト本文から作った文字列に署名しています。

› 秘密鍵は保存・送信されますか?

いいえ。HMAC はブラウザ内で計算されます。鍵はこのページのメモリ上にだけあり、保存もアドレスバーへの書き込みも共有リンクへの追加もされません。