tigtools

HMACジェネレーター

メッセージと秘密鍵から鍵付きメッセージ認証コード(HMAC)を計算するか、受け取った署名を検証します。鍵とメッセージはブラウザー内に保持されます。

ブラウザー内で動作 登録不要

鍵とメッセージはこのブラウザータブ内でのみ処理され、外部に送信されることはありません。それでも、共有または信頼できないコンピューターでは、本番環境の秘密情報を貼り付けないでください。
鍵の形式

入力したとおりのUTF-8として署名されます。末尾のスペースや改行でも結果が変わります。

出力形式

16進数(大文字・小文字不問)またはBase64の署名を貼り付け、上の結果と比較します。

使い方

  1. 秘密鍵を入力し、テキストか16進数バイト列かを選択します。
  2. メッセージを貼り付けます。たとえば、Webhookのペイロードを受信したとおりに貼り付けます。
  3. サービスで使用しているアルゴリズムと出力形式を選択します。入力に応じてHMACが更新されます。
  4. 署名を確認するには、検証欄に貼り付けて「一致」と表示されるか確認します。

仕組み

HMAC(RFC 2104)は秘密鍵とハッシュ関数を組み合わせ、鍵を持つ人だけが生成できる署名を作成します。Webhookや署名付きAPIリクエストなどのサービスは、メッセージごとにHMACを送信し、受信側がメッセージの正当性と改ざんの有無を確認できるようにします。

このツールはブラウザーのWeb Crypto API(crypto.subtle.importKeyとsign)を使用し、RFC 4231およびRFC 2202のテストベクトルに照らして検証されています。テキスト形式の鍵とメッセージはUTF-8としてエンコードされます。16進数形式の鍵は生バイトにデコードされます。スペース、コロン、先頭の0xは無視されます。HMAC-SHA-256が最も一般的な選択肢です。HMAC-SHA-1もMACとしては現在も安全と見なされていますが、主に古いAPIで使われています。

署名が一致しない場合は、よく異なる次の点を確認してください。正確なメッセージバイト(多くのWebhookプロバイダーは再整形されたJSONではなく、生の本文に署名します)、署名対象の文字列にプロバイダーが追加するタイムスタンプやプレフィックス、鍵をテキストとして使うのか、先に16進数またはBase64からデコードする必要があるのか、期待する署名が16進数とBase64のどちらなのか。また、「sha256=」のようなプレフィックスが付いている場合は、比較する前に削除してください。

使用例

RFC 4231のテストケース

鍵「Jefe」(テキスト)、メッセージ「what do ya want for nothing?」を使ったHMAC-SHA-256の結果は、5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843です。「例を試す」を選ぶと読み込めます。

Webhook署名の検証

プロバイダーが各リクエストにX-Signature: sha256=…ヘッダーを付けて送信します。リクエスト本文をそのままメッセージとして貼り付け、Webhookのシークレットを鍵に指定し、HMAC-SHA-256とHexを選択します。次に、「sha256=」の後の値を検証欄に貼り付けます。

16進数でエンコードされた鍵

システムによっては、0b0b0b…のような16進数文字列で鍵が提供されます。デコード後のバイト列で署名するには、鍵の形式としてHexを選択してください。同じ文字列をテキストとして扱うと、結果はまったく異なります。

よくある質問

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

誰でもメッセージのSHA-256などの通常のハッシュを計算できます。HMACは秘密鍵にも依存するため、鍵を持つ人だけが生成または検証できます。これにより、メッセージが鍵の所有者から送られ、改ざんされていないことを確認できます。

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

多くの場合、入力バイト列が異なっています。改行コード、空白、JSONキーの順序、文字エンコーディング、または16進数やBase64からデコードする必要がある鍵などを確認してください。また、同じ形式(16進数またはBase64)で比較し、「sha256=」のようなプレフィックスを削除してください。

秘密鍵が外部に送信されることはありますか?

いいえ。鍵とメッセージは、このブラウザータブ内のWeb Crypto APIでのみ使用されます。アップロード、保存、アナリティクスへの送信はされません。

HMAC-SHA-1はまだ安全ですか?

SHA-1の衝突がHMAC-SHA-1を直接破るわけではなく、互換性のため現在も使用できます。新しいシステムでは、HMAC-SHA-256以上を使用してください。

プライバシー

鍵、メッセージ、結果はこのブラウザータブ内にのみ存在します。アップロード、保存、解析への送信は行われません。ツールが使用されたことを示す匿名イベントのみ記録されます。