メッセージと共有シークレットから HMAC を計算し、受信した署名と一致するかを判定(ブラウザ内で完結)
HMAC は「メッセージ」「ハッシュ関数」「鍵」の3つが揃って初めて決まります。1つでも送信側とずれると値が変わります。
ハッシュは入力だけから値を作るので、入力を知っている人なら誰でも同じ値を作れます。HMAC は入力に加えて共有シークレット(鍵)を使うため、鍵を知っている送信側と受信側だけが同じ値を作れます。したがって「誰が作ったか」の確認に使えます。Webhook の署名検証はこの性質を利用しています。
送信されません。このツールはブラウザ標準の Web Crypto API(crypto.subtle)だけを使い、計算はすべてお使いのブラウザの中で行われます。サーバーへの通信も、入力内容の保存もありません。ただし本番環境のシークレットを他人のPCや共有端末のブラウザに貼ることは、ツールの実装に関係なく避けてください。
よくある原因は3つです。1つ目はメッセージの違いで、JSON を整形し直した文字列ではなく受信した生のボディを使う必要があります。2つ目は鍵の解釈で、16進文字列の鍵をUTF-8として読むと別の鍵になります。3つ目は出力表記で、送信側が Base64 で送っているのに16進と比べている場合です。このツールは16進と Base64 の両方を出し、どちらで一致したかも表示します。
できません。ブラウザ標準の 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 になります。