← ハシトシステム トップ English ツール ブログ ポスター
入力
使い方:メッセージと共有シークレットを入れると、HMAC を16進と Base64 の両方で表示します。照合欄に受信した署名を貼ると、どちらの表記で一致したかまで判定します。
Webhook の検証で最も多い失敗:署名の対象は受信した生のボディです。JSON を読み込んで書き出し直した文字列は、空白やキーの順序が変わって別のメッセージになります。
鍵の読み方に注意:同じ文字列でも、UTF-8 として読むか16進のバイト列として読むかで鍵が変わります。仕様書の表記に合わせてください。
HMAC(署名値)
  • 16進(小文字)
  • Base64
  • 署名のバイト長
  • 照合結果
    照合したい署名を入力すると一致を判定します

使い方(5ステップ)

HMAC は「メッセージ」「ハッシュ関数」「鍵」の3つが揃って初めて決まります。1つでも送信側とずれると値が変わります。

  1. 対象のメッセージを貼る — 署名の計算対象をそのまま貼り付ける。Webhook の検証では、JSON として整形し直す前の生のボディを使う。1バイトでも違うと署名は一致しない。
  2. ハッシュ関数を選ぶ — 送信側の仕様に合わせて HMAC-SHA-256 などを選ぶ。多くのサービスは SHA-256 を使う。
  3. 鍵の解釈を選んでシークレットを入れる — 鍵が文字列ならUTF-8、16進の並びなら16進、Base64 文字列なら Base64 を選ぶ。ここを間違えると値が変わる。
  4. 出力形式を読み取る — 16進と Base64 の両方を同時に表示する。送信側がどちらの表記で送ってくるかは仕様による。
  5. 受け取った署名と照合する — 検証欄に受信した署名を貼ると一致を判定する。sha256= のような接頭辞は自動で外す。

よくある質問(FAQ)

HMAC と、ただのハッシュ(SHA-256)は何が違いますか?

ハッシュは入力だけから値を作るので、入力を知っている人なら誰でも同じ値を作れます。HMAC は入力に加えて共有シークレット(鍵)を使うため、鍵を知っている送信側と受信側だけが同じ値を作れます。したがって「誰が作ったか」の確認に使えます。Webhook の署名検証はこの性質を利用しています。

入力したシークレットはどこかに送信されますか?

送信されません。このツールはブラウザ標準の Web Crypto API(crypto.subtle)だけを使い、計算はすべてお使いのブラウザの中で行われます。サーバーへの通信も、入力内容の保存もありません。ただし本番環境のシークレットを他人のPCや共有端末のブラウザに貼ることは、ツールの実装に関係なく避けてください。

署名が一致しません。何を疑えばよいですか?

よくある原因は3つです。1つ目はメッセージの違いで、JSON を整形し直した文字列ではなく受信した生のボディを使う必要があります。2つ目は鍵の解釈で、16進文字列の鍵をUTF-8として読むと別の鍵になります。3つ目は出力表記で、送信側が Base64 で送っているのに16進と比べている場合です。このツールは16進と Base64 の両方を出し、どちらで一致したかも表示します。

MD5 の HMAC は計算できますか?

できません。ブラウザ標準の Web Crypto API が MD5 に対応していないためです。対応しているのは SHA-1 / SHA-256 / SHA-384 / SHA-512 です。なお HMAC-SHA-1 は HMAC の構造上ただちに破れるわけではありませんが、新規の設計では SHA-256 以上を選んでください。

計算結果が正しいことを自分で確かめられますか?

確かめられます。サンプルの1番目と2番目は RFC 4231 のテストベクタです。1番目は鍵が 0x0b を20回並べたもの、メッセージが Hi There で、HMAC-SHA-256 は b0344c61d8db38535ca8afceaf0bf12b881dc200c9833da726e9376c2e32cff7 になります。2番目は鍵が Jefe、メッセージが what do ya want for nothing? で、5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843 になります。

小中学生向け 学習ポスター(無料配布)はこちら →