---
title: "ハッシュ関数の衝突とは？SHA-1の弱点を整理【SG試験】"
description: "ハッシュ関数の衝突を異なるデータが同じハッシュ値になる弱点として整理し、SHA-1の危険性、改ざん検知や電子署名への影響、暗号化との混同を防ぎます。一方向性、同一性確認、署名検証で何が崩れるかをSG試験の選択肢から判断します。"
last_modified_at: "2026-07-02"
canonical_url: "https://stemtazoo.github.io/sg/hash-collision/"
section: "sg"
---

## まず結論
ハッシュ関数の衝突とは、**異なるデータから同じハッシュ値が作られてしまうこと**です。  
SG試験では、**SHA-1などのハッシュ関数の弱点として、改ざん検知や電子署名の信頼性に関わる用語**として押さえるのがポイントです。

ハッシュ関数は、入力データから固定長のハッシュ値を作ります。  
しかし、入力データの種類はほぼ無限にある一方で、出力されるハッシュ値の長さは固定です。

そのため、理論上は、別々のデータが同じハッシュ値になる可能性があります。  
これが「衝突」です。

## 直感的な説明
衝突は、別々の人が同じ番号札を持ってしまうようなイメージです。

ハッシュ値は、データの「指紋」のようなものです。  
本来は、データが少しでも違えば、別のハッシュ値になってほしいです。

しかし、もし別々のファイルから同じハッシュ値が作れてしまうと、

- 本物のファイル
- 改ざんされたファイル

をハッシュ値だけでは見分けにくくなります。

つまり、衝突は、**ハッシュ値で同一性を確認する仕組みの信頼性を下げる問題**です。

## 定義・仕組み
衝突とは、異なる入力データに対して、同じハッシュ値が出力されることです。

SHA-1の安全性低下については、CRYPTRECの[SHA-1の安全性低下について](https://www.cryptrec.go.jp/topics/cryptrec-er-0001-2016.html)でも、衝突発見と電子署名などへの影響が整理されています。

| 観点 | 内容 |
|---|---|
| 対象 | ハッシュ関数 |
| 状態 | 異なる入力から同じハッシュ値が出る |
| 問題点 | データの同一性確認が難しくなる |
| 影響 | 改ざん検知、電子署名などの信頼性低下 |
| 関連用語 | 衝突耐性、SHA-1、SHA-2、メッセージダイジェスト |

ハッシュ関数では、次のような性質が重要です。

| 性質 | 意味 |
|---|---|
| 一方向性 | ハッシュ値から元データを求めにくい |
| 衝突耐性 | 同じハッシュ値になる別データを見つけにくい |
| 改ざん検知 | データ変更によりハッシュ値が変わる |

この中で、衝突と特に関係が深いのが**衝突耐性**です。

衝突耐性が弱いと、攻撃者が「同じハッシュ値になる別のデータ」を作りやすくなります。  
その結果、改ざんされたデータを本物のように見せかけるリスクが高まります。

## どんな場面で使う？
衝突は、ハッシュ値を使ってデータの正しさを確認する場面で問題になります。

| 場面 | 衝突が起きると困る理由 |
|---|---|
| ファイルの改ざん検知 | 改ざん後も同じハッシュ値に見える可能性がある |
| 電子署名 | 別の文書を正しい文書のように見せかけられる可能性がある |
| 証明書 | 信頼してはいけない証明書を信頼してしまうリスクがある |
| ソフトウェア配布 | 偽ファイルを正規ファイルのように見せるリスクがある |

特に電子署名では、文書全体ではなく、文書から作ったハッシュ値に署名することがあります。

そのため、攻撃者が本物の文書と同じハッシュ値を持つ別文書を作れると、署名の信頼性が崩れるおそれがあります。

### SHA-1との関係
SHA-1は、ハッシュ関数の一つです。  
入力データから160ビットのメッセージダイジェストを作ります。

ただし、SHA-1は衝突に関する弱点が知られているため、現在は安全性に注意が必要な方式として扱われます。

SG試験では、SHA-1が出てきたときに、次のように整理すると判断しやすいです。

| 用語 | 試験での見方 |
|---|---|
| SHA-1 | ハッシュ関数。ただし衝突への注意が必要 |
| SHA-2 | SHA-1より安全性を高めたハッシュ関数群 |
| SHA-256 | SHA-2に含まれる代表的なハッシュ関数 |
| 衝突 | 異なる入力で同じハッシュ値になること |

「SHA-1＝暗号化方式」ではありません。  
SHA-1は、あくまでハッシュ関数です。

## よくある誤解・混同
### 誤解1：衝突すると、ハッシュ値から元データが分かる
衝突は、元データを復元できるという意味ではありません。

衝突は、**別々のデータが同じハッシュ値になること**です。  
ハッシュ値から元データを取り出せる、という話ではありません。

| 用語 | 意味 |
|---|---|
| 衝突 | 異なる入力で同じハッシュ値になる |
| 復号 | 暗号文を元の平文に戻す |
| 解析 | 秘密情報や元データを推測する |

「復号」「元に戻す」という表現が出たら、ハッシュ関数の衝突とは別の話です。

### 誤解2：衝突は暗号化方式の問題である
衝突は、主にハッシュ関数で問題になる考え方です。

暗号化では、平文を暗号文にし、復号して元に戻すことが中心です。  
一方、ハッシュ関数では、ハッシュ値を使って同一性や改ざんの有無を確認します。

そのため、衝突は**暗号化そのものの説明ではなく、ハッシュ関数の安全性の説明**として理解します。

### 誤解3：衝突は必ずすぐに悪用される
衝突が理論上存在することと、実際に攻撃に使えることは別です。

ただし、攻撃者が現実的に衝突を作れるようになると危険です。  
そのため、衝突耐性が弱くなったハッシュ関数は、安全な方式へ移行する必要があります。

### 試験での切り分けポイント
衝突で迷ったら、次の順に確認します。

### 1. 異なる入力で同じ値になる話か
「異なるデータ」「同じハッシュ値」「同じメッセージダイジェスト」という表現があれば、衝突の話です。

### 2. 改ざん検知や電子署名に影響するか
衝突は、ハッシュ値でデータの同一性を確認する場面に影響します。

そのため、改ざん検知、電子署名、証明書などの文脈で出やすいです。

### 3. 暗号化や復号の話に引っ張られない
SHA-1やSHA-256はハッシュ関数です。  
暗号化方式ではありません。

「秘匿」「復号」「鍵で元に戻す」という話なら暗号化。  
「要約値」「改ざん検知」「同じハッシュ値」という話ならハッシュです。

## 確認問題（SG試験対策）
ハッシュ関数の衝突の説明として、最も適切なものはどれか。

- ア. 異なる入力データから同じハッシュ値が作られることである。
- イ. 暗号文を正しい鍵で平文に戻すことである。
- ウ. 通信内容を第三者に読めないように変換することである。
- エ. 利用者が複数の認証要素を使って本人確認することである。

<details markdown="1">
<summary>▶ クリックして答えと解説を見る（ここを開く）</summary>

**正解：ア**

### 解説

衝突とは、異なる入力データから同じハッシュ値が作られることです。  
ハッシュ関数の安全性、特に衝突耐性に関係します。

イは復号の説明です。  
ウは暗号化の説明です。  
エは多要素認証の説明です。


👉 判断ポイント  
この問題は、用語の定義ではなく「目的と適用場面」で切り分けます。

</details>

## まとめ（試験直前用）
ハッシュ関数の衝突とは、**異なるデータから同じハッシュ値が作られること**です。

試験直前は、次の3点だけ押さえましょう。

- **衝突＝異なる入力で同じハッシュ値になること**
- **改ざん検知や電子署名の信頼性に影響する**
- **SHA-1はハッシュ関数だが、衝突への注意が必要**

「同じハッシュ値」「メッセージダイジェスト」「改ざん検知」が出てきたら、ハッシュ関数の話です。  
暗号化や復号の話と混同しないようにすると、選択肢を切り分けやすくなります。
