HMACとは?鍵付きハッシュの仕組みとAPI署名・Webhook検証への使い方
公開日:2026年9月25日 更新日:2026年9月15日 運営:シルギア(Analyzegear, Inc.) 対象ツール:HMAC生成
API のリクエストに署名を付けたい、受け取った Webhook が本物か確かめたい――そんなときに使うのが HMAC(鍵付きハッシュ)です。名前は聞くけれど普通のハッシュとの違いが曖昧、という方に向けて、仕組みから実際の使い方までを整理します。このツールは入力したメッセージと秘密鍵から HMAC 値を計算し、16進(大文字・小文字)と Base64 の両方で表示します。計算はすべてブラウザ内で完結し、鍵もメッセージも外部に送信されません。
HMAC とは何か
HMAC は Hash-based Message Authentication Code の略で、日本語では「鍵付きハッシュ」や「メッセージ認証符号」と呼ばれます。材料は2つで、認証したい本文(メッセージ)と、送り手と受け手だけが知っている秘密鍵です。この2つを混ぜてハッシュ関数に通すことで、固定長の値を作り出します。この値を照合することで、「本文が途中で書き換えられていないこと」と「その本文を作ったのが鍵を共有している相手であること」を、同時に確かめられます。前者を完全性、後者を真正性と呼びます。
普通のハッシュとの決定的な違い
SHA-256 のような普通のハッシュは、本文だけから値が決まります。つまり本文を書き換えた人は、書き換えた後の本文からハッシュを計算し直せてしまいます。ハッシュが一致していても、それは「本文とハッシュのつじつまが合っている」ことしか保証しません。誰が作ったかは分かりません。
HMAC は計算に秘密鍵が加わる点が決定的に違います。鍵を知らない第三者は、本文を書き換えても正しい HMAC 値を作れません。逆に言えば、受け取った HMAC が自分の鍵で再計算した値と一致すれば、鍵を持つ相手が確かにその本文を送ったと判断できます。両者のいちばんの差は、この「秘密鍵の有無」です。ハッシュは指紋、HMAC は合鍵付きの封蝋のようなものと考えると分かりやすいでしょう。
アルゴリズムと出力形式
このツールは HMAC-SHA-1 / SHA-256 / SHA-384 / SHA-512 の4種類に対応します。内部で使うハッシュのビット長がそのまま出力の長さになり、SHA-256 なら32バイト、16進で64桁です。同様に SHA-1 は20バイト(16進40桁)、SHA-384 は48バイト(96桁)、SHA-512 は64バイト(128桁)になります。
出力は16進と Base64 の両方を同時に表示します。16進は0〜9とa〜fの並びで、送信先の仕様に合わせて小文字・大文字を切り替えられます。Base64 は同じバイト列を64種類の文字で表した、より短い表記です。中身のバイト列は同じで、見せ方が違うだけです。鍵とメッセージはどちらも UTF-8 でバイト列化してから計算します。ここが他ツールと値がずれる典型的な原因で、鍵を16進や Base64 として解釈する実装とは結果が変わります。
主な使いどころ
いちばん多いのは API リクエストの署名です。本文やタイムスタンプを秘密鍵で HMAC 化し、その値を署名ヘッダーに付けて送ります。受け手は同じ計算をして一致を確かめます。
- Webhook の検証:GitHub の X-Hub-Signature-256 や決済サービスの署名ヘッダーなど、送信元が付けた署名を、自分のシークレットで再計算して突き合わせます。一致すれば正当な送信元からの通知だと判断できます。
- 改ざん検知:保存・転送するデータに HMAC を添えておき、読み出し時に再計算して比較します。値が変わっていれば途中で書き換えられた可能性があります。
- ワンタイムトークンの生成:鍵と識別子から HMAC を作り、推測されにくい照合値として使います。
具体例で検算する
広く知られたテストベクトルで確かめてみましょう。秘密鍵に key、メッセージに The quick brown fox jumps over the lazy dog を入れ、アルゴリズムを SHA-256 にすると、16進(小文字)は f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8 になります。64桁ちょうどで、末尾が d1a3cd8 で終わっているはずです。同じ入力の Base64 は 97yD9DBThCSxMpjmqm+xQ+9NWaFJRhdZl0edvC0aPNg= で、44文字です。これは公開されている HMAC-SHA256 の代表的な期待値と一致します。もし手元の値が違うなら、末尾に改行や空白が紛れていないか、鍵をそのままの文字として扱っているかを疑ってください。1文字でも違えば HMAC は全く別の値になります。
使う前に知っておきたい注意点
秘密鍵は十分に長くランダムなものを使い、外部に漏らさないでください。鍵が漏れれば誰でも正しい署名を作れてしまい、HMAC の意味がなくなります。内部のハッシュは衝突耐性の観点から SHA-256 以上を選ぶのが無難です。HMAC-SHA-1 は既存システムとの互換用と考えてください。
検証で値を突き合わせるときは、単純な文字列一致ではなく定数時間比較を使うのが安全とされています。比較にかかる時間の差から鍵を推測されるタイミング攻撃を避けるためです。なお、このツールでの計算は標準の Web Crypto API を使ってすべてブラウザ内で行われ、入力した鍵もメッセージもどこにも送信されません。オフラインでも動作するので、業務で扱う本文や鍵を安心して試せます。