---
title: "改ざん検知とは？ハッシュ・MAC・デジタル署名の違いを整理【SG試験】"
description: "改ざん検知は、データやメッセージが途中で書き換えられていないかを確認する考え方です。ハッシュ、HMAC、MAC、デジタル署名の違い、暗号化では防げない完全性確認の役割を押さえ、SG試験で選択肢を切る基準を整理します。科目Aの用語理解と科目Bのケース判断で迷いやすい表現も確認します。"
last_modified_at: "2026-05-18"
canonical_url: "https://stemtazoo.github.io/sg/tamper-detection/"
section: "sg"
---

## まず結論

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

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

---

### 判断軸の再確認（確認問題の前に）
- **目的**を先に見る：この対策・用語は「予防」「検知」「対応」のどこを担うか。
- **対象**を切り分ける：ネットワーク／端末／利用者／運用手順のどこに効くか。
- **選択肢の言い過ぎ**に注意：「必ず」「完全に」「不要になる」といった断定は誤りになりやすい。

## 確認問題

<details>
<summary>確認問題：改ざん検知と否認防止の両方に適したものはどれか</summary>

電子文書について、内容が改ざんされていないことを確認し、さらに作成者があとから作成を否認しにくくしたい。この目的に最も適したものはどれか。

- ア：ハッシュ値
- イ：HMAC
- ウ：デジタル署名
- エ：暗号化

**正解：ウ**

デジタル署名は、秘密鍵で署名し、公開鍵で検証する仕組みです。  
改ざん検知に加えて、本人確認や否認防止に使えます。

アのハッシュ値は、改ざん検知の補助には使えますが、送信者確認や否認防止には弱いです。  
イのHMACは、共通鍵を使うメッセージ認証には使えますが、否認防止には向きません。  
エの暗号化は、内容を読めなくするための仕組みです。

</details>

---

## まとめ（試験直前用）

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

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