Skip to the content.

まず結論

改ざん検知とは、データやメッセージが途中で書き換えられていないかを確認することです。

SG試験では、次のように切り分けると判断しやすくなります。

  • ハッシュ:データが変わっていないかを確認するための要約値
  • MAC:共通鍵を使って、改ざん検知と送信者確認を行う
  • HMAC:ハッシュ関数を使って作るMACの一種
  • デジタル署名:秘密鍵と公開鍵を使って、改ざん検知・本人確認・否認防止を行う

特に大事なのは、改ざん検知だけでは技術を1つに決められないという点です。

「鍵を使うか」「どの鍵を使うか」「否認防止が必要か」を見て選択肢を切り分けます。


直感的な説明

改ざん検知は、荷物に付ける確認用のシールのようなものです。

荷物そのものを隠すわけではありません。
荷物が途中で開けられたり、中身が入れ替えられたりしていないかを確認するためのものです。

たとえば、次のように考えるとわかりやすいです。

  • ハッシュ:荷物の特徴をメモしておく
  • MAC:合い鍵を持つ相手だけが作れる確認シールを付ける
  • HMAC:ハッシュを使って作る、鍵付きの確認シール
  • デジタル署名:本人だけが押せる印鑑を付け、誰でも確認できるようにする

どれも改ざん検知に関係しますが、使う場面と強みが違います。


定義・仕組み

ハッシュによる改ざん検知

ハッシュは、データから固定長の値を作る仕組みです。
この値をハッシュ値、またはメッセージダイジェストと呼びます。

データが少しでも変わると、ハッシュ値も大きく変わります。
そのため、元のハッシュ値と比較することで、データが変わっていないかを確認できます。

ただし、ハッシュ値は誰でも計算できます。
そのため、攻撃者がデータを書き換えたあと、新しいハッシュ値を付け直すこともできます。

つまり、ハッシュは改ざん検知の基本ですが、送信者確認には弱いと考えます。


MACによる改ざん検知

MAC(Message Authentication Code)は、メッセージと共通鍵から認証用の値を作る仕組みです。

受信者は、同じ共通鍵を使ってMAC値を再計算し、送られてきたMAC値と一致するか確認します。

一致すれば、

  • メッセージが改ざんされていない
  • 同じ共通鍵を持つ相手が作成した可能性が高い

と判断できます。

MACはハッシュよりも、送信者確認の意味が強くなります。
ただし、送信者と受信者が同じ共通鍵を持つため、否認防止には向きません


HMACによる改ざん検知

HMACは、ハッシュ関数を使って作るMACの一種です。

名前に「ハッシュ」が入っていますが、単なるハッシュではありません。
共通鍵も使うため、鍵を知らない人は正しいHMAC値を作れません。

SG試験では、次のように押さえます。

  • ハッシュ関数だけなら、ハッシュ
  • ハッシュ関数と共通鍵を使うなら、HMAC
  • HMACはMACの一種

「ハッシュ関数を用いたメッセージ認証コード」という説明が出たら、HMACを選びます。


デジタル署名による改ざん検知

デジタル署名は、送信者の秘密鍵で署名し、公開鍵で検証する仕組みです。

受信者は公開鍵を使って署名を検証し、メッセージが改ざんされていないことや、署名者の正当性を確認します。

デジタル署名の大きな特徴は、否認防止に使えることです。

本人だけが秘密鍵を持つ前提なので、あとから「自分は署名していない」と主張しにくくなります。

SG試験では、「否認防止」が出たら、MACやHMACではなくデジタル署名を選ぶのが基本です。


どんな場面で使う?

改ざん検知は、情報の完全性を守りたい場面で使われます。

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

  • ダウンロードしたファイルが壊れていないか確認する
  • 通信中のメッセージが書き換えられていないか確認する
  • API通信のリクエストが正当な相手から送られたか確認する
  • 電子文書の作成者と改ざんの有無を確認する
  • ソフトウェアの配布元と改ざんの有無を確認する

ここで注意したいのは、改ざん検知は内容を隠すことではないという点です。

内容を読まれないようにする目的なら、暗号化を選びます。


よくある誤解・混同

誤解1:改ざん検知=暗号化である

これはよくある混同です。

  • 改ざん検知:内容が変わっていないか確認する
  • 暗号化:内容を読めないようにする

暗号化しても、改ざん検知の仕組みがなければ、改ざんに気づけない場合があります。
逆に、ハッシュやMACを使っても、内容そのものは読める場合があります。

問題文に「内容を秘匿する」「盗聴を防ぐ」とあれば暗号化です。
「書き換えられていないか確認する」とあれば改ざん検知です。


誤解2:ハッシュがあれば送信者確認もできる

通常のハッシュだけでは、送信者確認は不十分です。

ハッシュ値は誰でも計算できるため、攻撃者がデータを書き換えて、新しいハッシュ値を付け直すこともできます。

送信者確認まで必要なら、共通鍵を使うMACやHMAC、または秘密鍵と公開鍵を使うデジタル署名を考えます。


誤解3:MACとデジタル署名は同じである

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

  • MAC:共通鍵を使う
  • デジタル署名:秘密鍵と公開鍵を使う

MACは、同じ共通鍵を持つ相手同士で確認します。
デジタル署名は、公開鍵を使って第三者も検証できます。

そのため、否認防止が必要ならデジタル署名です。


誤解4:HMACはハッシュと同じである

HMACはハッシュ関数を使いますが、単なるハッシュではありません。

HMACは、メッセージに加えて共通鍵を使います。
そのため、鍵を知らない人は正しいHMAC値を作れません。

「ハッシュ関数を使う」という言葉だけで、通常のハッシュと判断しないように注意しましょう。


改ざん検知に関係する技術の比較

技術 使うもの 主な目的 送信者確認 否認防止 試験でのキーワード
ハッシュ メッセージ 要約値の作成、改ざん検知の補助 弱い できない ハッシュ値、メッセージダイジェスト
MAC メッセージ+共通鍵 改ざん検知、メッセージ認証 できる 弱い 共通鍵、MAC値、メッセージ認証
HMAC メッセージ+共通鍵+ハッシュ関数 改ざん検知、メッセージ認証 できる 弱い ハッシュ関数を用いたMAC
デジタル署名 秘密鍵・公開鍵 改ざん検知、本人確認、否認防止 できる できる 秘密鍵で署名、公開鍵で検証
暗号化 内容の秘匿 方式による 目的ではない 盗聴防止、内容を読めなくする

SG試験での判断ポイント

改ざん検知の問題では、次の順番で確認すると選択肢を切りやすくなります。

1. 内容を隠したいのか、改ざんを検出したいのか

内容を読まれないようにするなら暗号化です。
内容が変わっていないか確認するなら、ハッシュ、MAC、HMAC、デジタル署名を考えます。


2. 鍵を使うか

鍵を使わずに要約値を作るなら、ハッシュです。
共通鍵を使うなら、MACまたはHMACです。
秘密鍵と公開鍵を使うなら、デジタル署名です。


3. 否認防止が必要か

否認防止が必要なら、デジタル署名を選びます。

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


確認問題

確認問題:改ざん検知と否認防止の両方に適したものはどれか 電子文書について、内容が改ざんされていないことを確認し、さらに作成者があとから作成を否認しにくくしたい。この目的に最も適したものはどれか。 - ア:ハッシュ値 - イ:HMAC - ウ:デジタル署名 - エ:暗号化 **正解:ウ** デジタル署名は、秘密鍵で署名し、公開鍵で検証する仕組みです。 改ざん検知に加えて、本人確認や否認防止に使えます。 アのハッシュ値は、改ざん検知の補助には使えますが、送信者確認や否認防止には弱いです。 イのHMACは、共通鍵を使うメッセージ認証には使えますが、否認防止には向きません。 エの暗号化は、内容を読めなくするための仕組みです。

まとめ(試験直前用)

  • 改ざん検知は、データが書き換えられていないか確認すること
  • 共通鍵ならMAC・HMAC、秘密鍵と公開鍵ならデジタル署名
  • 否認防止が必要なら、デジタル署名を選ぶ

SG試験では、改ざん検知という言葉だけで判断しないことが大切です。
鍵の種類否認防止の有無を見れば、選択肢をかなり切り分けやすくなります。