---
title: "ハッシュ関数とは？改ざん検知に使う一方向の要約値【基本情報技術者試験】"
description: "ハッシュ関数を「任意の長さのデータから固定長のハッシュ値を求める一方向関数」として整理し、SHA-256、メッセージダイジェスト、ディジタル署名、暗号化との違いをFE試験向けに解説します。"
last_modified_at: "2026-06-26"
canonical_url: "https://stemtazoo.github.io/fe/hash-function/"
section: "fe"
---

## まず結論

ハッシュ関数とは、**任意の長さのデータから、固定長のハッシュ値を求める関数**です。

基本情報技術者試験では、ハッシュ関数は **改ざん検知** に使うものとして出題されやすいです。

特に、SHA-256 はハッシュ関数の一つです。  
同じファイルからは同じハッシュ値が出るため、受け取ったファイルから計算した値と、事前に知らされた値を比較すれば、ファイルが改ざんされていないかを確認できます。

ただし、ハッシュ関数だけでは、**作成者の確認** や **改ざん箇所の修復** はできません。

## 直感的な説明

ハッシュ関数は、**ファイルの指紋を作る仕組み** と考えると分かりやすいです。

人の指紋が一人ひとり違うように、ファイルの内容が少しでも変わると、ハッシュ値も大きく変わります。

例えば、ファイルAからSHA-256で値Bを作ったとします。

```text
ファイルA
↓ SHA-256
値B
```

利用者がファイルAを受け取ったあと、同じようにSHA-256を適用します。

```text
受け取ったファイルA
↓ SHA-256
計算した値
```

この計算した値と、事前に知らされていた値Bが同じなら、ファイルAの内容は変わっていない可能性が高いです。

違っていれば、ファイルAが途中で改ざんされた、または壊れた可能性があります。

## 定義・仕組み

ハッシュ関数は、入力データから固定長のビット列を生成する関数です。

生成された値は、**ハッシュ値** や **メッセージダイジェスト** と呼ばれます。

FE試験では、次の特徴を押さえると十分です。

| 特徴 | 意味 |
|---|---|
| 固定長 | 入力が長くても短くても、出力は決まった長さになる |
| 決定性 | 同じ入力からは、同じハッシュ値が得られる |
| 一方向性 | ハッシュ値から元データを復元するのは難しい |
| 雪崩効果 | 入力が少し変わるだけで、ハッシュ値が大きく変わる |
| 衝突耐性 | 異なる入力から同じハッシュ値が出にくい |

SHA-256は、SHA-2系列のハッシュ関数の一つです。

SHA-256では、入力データから256ビットのハッシュ値を生成します。

ハッシュ関数は、次のような場面で使われます。

- ファイルが改ざんされていないか確認する
- パスワードをそのまま保存しないようにする
- ディジタル署名で、署名対象の要約値を作る
- メッセージ認証で、内容が変わっていないか確認する

このテーマは、基本情報技術者試験の「情報セキュリティ」や「暗号と認証」と関係する内容です。公式の出題範囲やシラバスは、[IPA：基本情報技術者試験](https://www.ipa.go.jp/shiken/kubun/fe.html) から確認できます。

## 科目Aでどう出る？

科目Aでは、ハッシュ関数は、SHA-256、ディジタル署名、暗号化、MAC、HMACなどと並べて出題されやすいです。

判断するときは、**固定長の値を計算し、比較して改ざんを確認しているか** を見ます。

| キーワード | 判断 |
|---|---|
| SHA-256 | ハッシュ関数 |
| ハッシュ値 | ハッシュ関数 |
| メッセージダイジェスト | ハッシュ関数 |
| 改ざんされていないか確認 | ハッシュ関数 |
| 元データを復元する | ハッシュ関数ではない |
| 作成者を確認する | ディジタル署名 |
| 内容を読めないようにする | 暗号化 |
| 改ざん箇所を修復する | ハッシュ関数ではできない |

例えば、次のような説明はハッシュ関数の使い方です。

```text
ファイルAにSHA-256を適用して値を算出し，
その値と事前に知らされた値を比較して，
ファイルAの内容が改ざんされていないかを確認する。
```

この説明では、**SHA-256を適用して値を算出する**、**値を比較する**、**改ざん有無を確認する** という点が決め手です。

一方で、次のような説明はハッシュ関数だけではできません。

```text
ハッシュ値からディジタル署名を算出し，
ファイルの作成者を確認する。
```

ディジタル署名は、ハッシュ関数だけで作るものではありません。  
通常は、ハッシュ値に対して秘密鍵で署名し、公開鍵で検証します。

科目Aでは、**値を比較して改ざん確認ならハッシュ、作成者確認なら署名、秘密にするなら暗号化** と考えると選択肢を切りやすいです。

## 科目Bでどう使う？

科目Bでは、ハッシュ関数の細かい計算そのものよりも、使い方の流れを理解しておくと役立ちます。

例えば、ファイルを配布する場面を考えます。

```text
提供者：
ファイルAにSHA-256を適用して，値Bを求める。
ファイルAと値Bを利用者へ渡す。

利用者：
受け取ったファイルAにSHA-256を適用する。
計算した値と値Bを比較する。
```

比較結果は次のように判断します。

| 比較結果 | 判断 |
|---|---|
| 値が同じ | ファイルは改ざんされていない可能性が高い |
| 値が違う | ファイルが改ざんされた、または壊れた可能性がある |

ここで大切なのは、ハッシュ値が一致しても、**ファイルの作成者そのものを確認できるわけではない** という点です。

作成者や送信者の正当性まで確認したい場合は、ディジタル署名や証明書の仕組みが関係します。

科目Bで読むときは、次の順で整理すると分かりやすいです。

1. 何にハッシュ関数を適用しているかを見る
2. 事前に知らされたハッシュ値があるかを見る
3. 受信側で同じハッシュ関数を使っているかを見る
4. 計算結果を比較しているかを見る
5. 改ざん確認なのか、作成者確認なのかを分ける

ハッシュ関数は、**確認する仕組み** であって、壊れたデータを直す仕組みではありません。

## SG試験との違い

ハッシュ関数は、情報セキュリティマネジメント試験でもよく出る用語です。

FEとSGでは、見られやすいポイントが少し違います。

| 試験 | 見られやすいポイント |
|---|---|
| FE | SHA-256、ハッシュ値、署名、暗号化との機能の切り分け |
| SG | 改ざん検知、パスワード保管、ログやファイルの完全性確認 |
| 共通 | ハッシュ関数は一方向の要約値を作る仕組み |

FEでは、技術名と機能の対応を問われやすいです。

SGでは、業務で「ファイルが改ざんされていないことをどう確認するか」「パスワードをそのまま保存してよいか」といった運用面が重視されやすいです。

どちらの試験でも、まずは **ハッシュ関数＝改ざん検知に使う一方向の要約値** と押さえるのが基本です。

## よくある誤解・混同

ハッシュ関数で混同しやすいのは、暗号化、ディジタル署名、MAC、HMACです。

| 用語 | 主な役割 | 判断の合図 |
|---|---|---|
| ハッシュ関数 | 固定長の要約値を作る | SHA-256、ハッシュ値、メッセージダイジェスト |
| 暗号化 | 内容を読めないようにする | 秘密にする、復号、共通鍵、公開鍵 |
| ディジタル署名 | 送信者の確認と改ざん検知 | 秘密鍵で署名、公開鍵で検証 |
| MAC | 共通鍵を使ったメッセージ認証 | メッセージ認証コード、共通鍵 |
| HMAC | ハッシュ関数と鍵を使ったメッセージ認証 | HMAC、鍵付きハッシュ |

ハッシュ関数と暗号化は、特に混同しやすいです。

- ハッシュ関数：元に戻さない。比較して改ざんを確認する
- 暗号化：復号して元の内容を読むことができる

ハッシュ関数とディジタル署名も近く見えます。

- ハッシュ関数：ファイルの内容が変わっていないかを確認する
- ディジタル署名：送信者の正当性と改ざんの有無を確認する

ディジタル署名の中でハッシュ関数が使われることはあります。  
ただし、ハッシュ関数だけでディジタル署名が完成するわけではありません。

## さらに注意したいひっかけ

ハッシュ関数では、次のようなひっかけにも注意します。

| ひっかけ表現 | なぜ注意する？ |
|---|---|
| ハッシュ値から元データを復元する | ハッシュ関数は一方向性があり、復元用途ではない |
| ハッシュ値からディジタル署名を算出する | 署名には秘密鍵などの仕組みが必要 |
| ファイル作成者を確認できる | ハッシュ値の比較だけでは作成者確認はできない |
| 改ざん箇所を修復できる | ハッシュ関数は差分や修復機能ではない |
| 内容を秘密にできる | 秘匿は暗号化の役割 |
| 同じハッシュ値なら絶対安全 | 衝突の可能性は理論上あるため、適切な方式選定が必要 |

特に、**ハッシュ関数は改ざん箇所を直せない** という点は大切です。

ハッシュ値が違えば、ファイルが変わった可能性は分かります。

しかし、どこが変わったのか、どう直せばよいのかまでは、ハッシュ値だけでは分かりません。

また、ハッシュ値を電話など別経路で事前に確認している場合、受け取ったファイルから計算したハッシュ値と比較することで、ファイルの完全性を確認できます。

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

- ハッシュ関数は、任意の長さのデータから固定長のハッシュ値を作る
- SHA-256はハッシュ関数の一つ
- 「ハッシュ値」「メッセージダイジェスト」「改ざん確認」が出たらハッシュ関数を疑う
- ハッシュ値を比較すれば、ファイルの内容が変わっていないか確認できる
- ハッシュ関数だけでは、作成者確認や改ざん箇所の修復はできない
- 内容を秘密にするのは暗号化、送信者確認まで行うのはディジタル署名
