Skip to the content.

まず結論

HMAC(Hash-based Message Authentication Code)とは、ハッシュ関数と共通鍵を組み合わせて、メッセージの改ざんを検出する仕組みです。

SG試験では、次のように押さえると判断しやすくなります。

  • ハッシュ:データから要約値を作る
  • MAC:共通鍵を使ってメッセージを認証する
  • HMAC:ハッシュ関数を使って作るMACの一種
  • デジタル署名:秘密鍵と公開鍵で、改ざん検知と否認防止を行う

HMACは、単なるハッシュではありません。
共通鍵を使うことで、鍵を知らない人が正しい認証値を作れないようにしている点がポイントです。


直感的な説明

HMACは、メッセージに付ける鍵付きの確認シールのようなものです。

通常のハッシュは、誰でも同じメッセージから同じハッシュ値を作れます。
そのため、攻撃者がメッセージを書き換えて、新しいハッシュ値を付け直すこともできてしまいます。

一方、HMACでは、メッセージだけでなく共通鍵も使って認証値を作ります。

そのため、鍵を知らない人は、正しいHMAC値を作れません。

つまりHMACは、

  • メッセージが途中で変わっていないか
  • 同じ共通鍵を持つ相手が作ったものか

を確認するための仕組みです。


定義・仕組み

HMACは、ハッシュ関数をもとにしたメッセージ認証コードです。

基本的な流れは次のとおりです。

  1. 送信者と受信者が、あらかじめ共通鍵を共有する
  2. 送信者が、メッセージと共通鍵からHMAC値を作る
  3. メッセージとHMAC値を一緒に送る
  4. 受信者も、受け取ったメッセージと共通鍵からHMAC値を計算する
  5. 送られてきたHMAC値と一致するか確認する

一致すれば、メッセージが改ざんされていない可能性が高いと判断できます。
一致しなければ、改ざんや不正な送信の可能性を疑います。

ここで大切なのは、HMACがハッシュ関数だけでなく、共通鍵を使うという点です。


どんな場面で使う?

HMACは、通信やシステム間のデータ連携で、リクエストやメッセージが改ざんされていないか確認したい場面で使われます。

たとえば、次のような場面です。

  • API通信で、リクエストが正当な相手から送られたか確認する
  • Webサービス間の通信で、データが途中で改ざんされていないか確認する
  • メッセージ認証が必要な通信プロトコルで使う
  • 共通鍵を共有しているシステム同士で、送信元と完全性を確認する

SG試験では、HMACを「暗号化」ではなく、メッセージ認証と改ざん検知の仕組みとして整理しましょう。


よくある誤解・混同

HMACとハッシュの違い

HMACとハッシュは似ていますが、役割が違います。

項目 ハッシュ HMAC
使うもの メッセージ メッセージ+共通鍵
使わない 使う
主な目的 要約値の作成、改ざん検知の補助 メッセージ認証、改ざん検知
誰でも作れるか 作れる 鍵を知らないと作れない

通常のハッシュ値は誰でも計算できます。
一方、HMAC値は共通鍵を知らないと正しく作れません。

この違いが、SG試験での重要ポイントです。


HMACとMACの違い

HMACは、MACの一種です。

  • MAC:共通鍵を使うメッセージ認証コードの総称
  • HMAC:ハッシュ関数を使って作るMAC

つまり、HMACはMACの具体的な方式の1つです。

問題文に「ハッシュ関数を用いたメッセージ認証コード」とあれば、HMACを選びます。


HMACとデジタル署名の違い

HMACとデジタル署名は、どちらも改ざん検知に使えます。
ただし、鍵の使い方と否認防止の有無が違います。

項目 HMAC デジタル署名
共通鍵 秘密鍵・公開鍵
改ざん検知 できる できる
送信者確認 できる できる
否認防止 弱い できる
検証できる人 共通鍵を持つ人 公開鍵を持つ人

HMACでは、送信者と受信者が同じ共通鍵を持っています。
そのため、第三者に対して「誰が作ったか」を強く証明する用途には向きません。

否認防止が問われたら、HMACではなくデジタル署名を選びます。


HMACと暗号化の違い

HMACは、メッセージの内容を読めなくする仕組みではありません。

  • HMAC:改ざんされていないか、正当な相手からかを確認する
  • 暗号化:第三者に内容を読まれないようにする

問題文に「盗聴を防ぐ」「内容を秘匿する」とあれば、HMACではなく暗号化の話です。


SG試験での判断ポイント

HMACが選択肢に出たら、次の言葉に注目します。

問題文のキーワード 判断
ハッシュ関数を使うMAC HMAC
共通鍵、メッセージ認証、改ざん検知 MACまたはHMAC
鍵を使わない要約値 ハッシュ
秘密鍵で署名、公開鍵で検証 デジタル署名
否認防止 デジタル署名
内容を読めなくする 暗号化

特に、HMACはハッシュ関数を使うが、ただのハッシュではないという点が狙われやすいです。

「ハッシュ関数」だけに引っ張られず、共通鍵を使うかどうかを確認しましょう。


確認問題

確認問題:HMACの説明として最も適切なものはどれか HMACの説明として、最も適切なものはどれか。 - ア:ハッシュ関数と共通鍵を用いて、メッセージの改ざん検知と認証を行う。 - イ:画像や音声の中にメッセージを埋め込み、存在を隠す。 - ウ:公開鍵を使って署名を作成し、秘密鍵で検証する。 - エ:メッセージを一定の手順で変換し、第三者に内容を読めなくする。 **正解:ア** HMACは、ハッシュ関数と共通鍵を組み合わせたメッセージ認証コードです。 メッセージが改ざんされていないか、同じ共通鍵を持つ正当な相手から送られたものかを確認します。 イはステガノグラフィ、ウはデジタル署名の鍵の説明が逆、エは暗号化の説明です。

まとめ(試験直前用)

  • HMACは、ハッシュ関数と共通鍵を使うMACの一種
  • 通常のハッシュと違い、鍵を知らない人は正しいHMAC値を作れない
  • 否認防止が問われたら、HMACではなくデジタル署名を選ぶ

HMACは「ハッシュ」という名前に引っ張られやすい用語です。
SG試験では、ハッシュ関数+共通鍵=メッセージ認証と整理しておきましょう。