本文へスキップ

HMAC生成

HMAC Generator

ハッシュの種類と鍵の符号化を決めてメッセージのHMACを計算し、Webhookの署名確認に使えます。

テキストやファイルに対してHMAC——鍵を使ったダイジェスト——を計算します。鍵はテキスト、16進数、Base64のいずれかとして読めます。ハッシュのツールのHMAC側を有効にした画面と同じものです。HMACは鍵の付いたハッシュにすぎず、分けてしまえば、すべての操作部を共有するページが2つできてしまうからです。

🔒 ブラウザの中だけで動きますhmacsignaturewebhookcrypto
出力

入力

チェックサムを取るファイルを置く

このタブの中で読みます。アップロードはしません。

テキストはUTF-8のバイト列としてハッシュします。ほかの道具が文字列のハッシュと言うときの、その方式です。

ハッシュ値

公開されているチェックサムを貼り付けると、一致した行が光ります。

アルゴリズムごとに1行、ハッシュ値とコピーボタン付き。
アルゴリズムハッシュ値コピー
MD5衝突を作るのが安上がりです。チェックサムには構いませんが、署名やパスワードには使わないでください。
SHA-1衝突が実際に示されています。昔からのチェックサムならまだしも、新しく使うものではありません。
SHA-256
SHA-384
SHA-512
CRC-32ハッシュではなく誤り検出符号です。二つのファイルが偶然に同じ値を持つこともあり、故意ならなおさらです。

入力

0 byte

入力元

テキスト欄

使い方

  1. HMACを有効にします

    鍵の入力欄が現れ、表からCRC-32が外れます。ハッシュ関数ではなくチェックサムなので、HMACがありません。

  2. 鍵をどう読むかを指定します

    HMACが食い違う場所は、たいていここです。`0a1b2c`と書かれた鍵は、16進数としては3バイト、テキストとしては6バイトで、この2つはまったく違う値を出します。

  3. 送られてきた署名と突き合わせます

    比較の欄に貼り付ければ、一致した行に印が付きます。Stripe、GitHub、Slackのwebhookの署名は、どれも決まった文字列に対するHMAC-SHA256なので、鍵と同じくらい、メッセージを正確に合わせることが重要です。

よくある質問

自分のHMACがヘッダーのものと一致しないのはなぜですか

たいていは鍵ではなく、メッセージのほうです。webhookの署名は、決まった文字列——多くはタイムスタンプ、区切り、そして生の本文——に対して計算されます。JSONのパーサを通してから直列化し直した本文は、別の文字列です。受け取ったバイト列そのものに署名してください。

HMACは、鍵とメッセージをつなげてハッシュするのと同じことですか

違います。そこがHMACの存在理由です。`hash(鍵 + メッセージ)`は、MD5・SHA-1・SHA-256で長さ拡張攻撃に対して脆弱です。内側と外側のパディングを使うHMACの2パスの構成が、それを取り除きます。自分で組み立てないでください。

鍵はタブの外へ出ますか

出ません。このタブでWebCryptoの鍵を作るためだけに使います。送信もしませんし、保存もしませんし、URLにも入れません。ページを再読み込みすれば消えますが、秘密についてはそれが正しい動作です。

鍵はどれくらいの長さが必要ですか

少なくともダイジェストと同じ長さです。SHA-256なら32バイトです。HMACはどんな長さでも受け付けますが、ブロックサイズより長い鍵はまず先にハッシュして縮められますし、短い鍵はただ短い鍵です。安全性は、入れたエントロピーの分だけです。

ここから渡せます

次の一手

このツールが出したものをそのまま受け取れる道具です。