---
title: "ハッシュ化とは？固定長のハッシュ値と改ざん検知を整理【SG試験】"
description: "ハッシュ関数は、入力データの長さに関係なく固定長のハッシュ値を生成する仕組みです。SHA-256では32ビット、256ビット、2,048ビットの入力でも出力は256ビットで固定される点を押さえ、暗号化・MAC・電子署名との違いをSG試験向けに整理します。"
last_modified_at: "2026-05-20"
canonical_url: "https://stemtazoo.github.io/sg/hash-function/"
section: "sg"
---

## まず結論
ハッシュ化とは、**データをもとに固定長の値（ハッシュ値）を生成する仕組み**です。  
主に、データが改ざんされていないかを確認するために使われます。

SG試験では、次のように問われやすいです。

- ハッシュ値の長さは何で決まるか
- 暗号化とハッシュ化の違いは何か
- 改ざん検知に使う仕組みはどれか
- MACや電子署名とどう違うか

特に重要なのは、**入力データの長さが変わっても、ハッシュ値の長さはハッシュ関数によって決まる**という点です。

たとえば、SHA-256を使う場合、入力メッセージが32ビットでも、256ビットでも、2,048ビットでも、出力されるハッシュ値は常に**256ビット**です。

---

## 直感的な説明
ハッシュ値は、データの「指紋」のようなものです。

- 元データから指紋を作る
- 元データが少しでも変わると指紋も変わる
- 指紋から元データを復元することはできない

つまり、ハッシュ化は、

**中身を読むための仕組みではなく、変わっていないかを確認する仕組み**

です。

たとえば、ファイルをダウンロードしたあとに、公開されているハッシュ値と自分で計算したハッシュ値を比べれば、ファイルが途中で壊れたり、改ざんされたりしていないかを確認できます。

---

## 定義・仕組み
ハッシュ関数は、入力されたデータからハッシュ値を出力する関数です。

### ハッシュ関数の基本

| 項目 | 内容 |
|---|---|
| 入力 | 任意の長さのデータ |
| 出力 | 固定長のハッシュ値 |
| 代表例 | SHA-256、SHA-512など |
| 主な用途 | 改ざん検知、整合性確認、電子署名の内部処理など |

ポイントは、**入力は任意長、出力は固定長**という点です。

---

## 入力データの長さとハッシュ値の長さ
ここはSG試験で引っかかりやすいところです。

ハッシュ関数の出力長は、入力データの長さではなく、**使用するハッシュ関数の種類**で決まります。

### SHA-256の場合

| 入力メッセージの長さ | 出力されるハッシュ値の長さ |
|---:|---:|
| 32ビット | 256ビット |
| 256ビット | 256ビット |
| 2,048ビット | 256ビット |

SHA-256の「256」は、主に**出力されるハッシュ値の長さが256ビットであること**を表します。

そのため、問題文に

> SHA-256を用いて、32ビット、256ビット、2,048ビットの三つの長さのメッセージからハッシュ値を求めた

とあれば、答えはすべて**256ビット**です。

### 試験での判断ポイント

- 入力が長いから、ハッシュ値も長くなるわけではない
- SHA-256なら、出力は256ビットで固定
- SHA-512なら、出力は512ビットで固定

👉 覚え方  
**ハッシュ値の長さは、入力データではなく、ハッシュ関数名を見る**

---

## ハッシュ関数の主な特徴
ハッシュ関数には、次のような特徴があります。

### 同じ入力なら同じハッシュ値になる
同じデータを同じハッシュ関数に入力すると、同じハッシュ値が出力されます。

これにより、送信側と受信側でハッシュ値を比較できます。

---

### 少しでも変わるとハッシュ値が大きく変わる
元データの1文字だけを変更しても、ハッシュ値は大きく変わります。

この性質により、データが少しでも変更されたことを検知しやすくなります。

---

### 元に戻せない
ハッシュ化は、原則として一方向の変換です。

ハッシュ値から元データを復元することはできません。

ここが暗号化との大きな違いです。

---

### 固定長の値になる
入力データが短くても長くても、出力されるハッシュ値は固定長です。

たとえば、SHA-256なら常に256ビットです。

---

## どんな場面で使う？
### ファイルの改ざんチェック
ソフトウェアやファイルを配布するときに、ハッシュ値を公開しておくことがあります。

利用者は、ダウンロード後のファイルからハッシュ値を計算し、公開されているハッシュ値と一致するかを確認します。

一致すれば、少なくともファイルが途中で変わっていないことを確認できます。

---

### パスワード保存
パスワードをそのまま保存すると、漏えい時の被害が大きくなります。

そこで、パスワードそのものではなく、ハッシュ値として保存することがあります。

ただし、実務では単純なハッシュ化だけでなく、ソルトやストレッチングなどの対策も組み合わせます。

---

### 電子署名の内部処理
電子署名では、元データ全体をそのまま署名するのではなく、まずハッシュ値を作り、そのハッシュ値に対して署名処理を行うことがあります。

これにより、効率よく本人確認と改ざん検知を行えます。

---

## 暗号化との違い
ハッシュ化と暗号化は、目的が違います。

| 比較項目 | ハッシュ化 | 暗号化 |
|---|---|---|
| 主な目的 | 改ざん検知、整合性確認 | 機密性の確保 |
| 元に戻せるか | 戻せない | 鍵があれば戻せる |
| 出力の長さ | 固定長 | 方式やデータ長による |
| 鍵の有無 | 基本的に鍵を使わない | 鍵を使う |

SG試験では、

- **秘密にしたい** → 暗号化
- **変わっていないか確認したい** → ハッシュ化

と切り分けると分かりやすいです。

---

## MAC・電子署名との違い
ハッシュ関数は、MACや電子署名とも混同しやすいです。

### ハッシュ
ハッシュは、鍵を使わずにハッシュ値を生成します。

主な目的は、データの改ざん検知や整合性確認です。

---

### MAC
MACは、鍵を使ってメッセージ認証コードを生成します。

ハッシュと同じように改ざん検知に使われますが、**共通鍵を知っている相手が作成したこと**も確認できます。

つまり、MACは、

- 改ざん検知
- 送信者の正当性確認

に使われます。

---

### 電子署名
電子署名は、公開鍵暗号方式を使って、本人性と改ざん検知を確認する仕組みです。

主に、

- 本人が作成したこと
- 内容が改ざんされていないこと
- 後から否認しにくいこと

を確認するために使われます。

---

## よくある誤解・混同
SG試験では、ここがよく狙われます。

### ❌ ハッシュ化すればデータを秘密にできる
→ ⭕ ハッシュ化は、データを秘密にする仕組みではありません。

ハッシュ値から元データを復元できないため、暗号化と似て見えることがあります。  
しかし、目的は機密性ではなく、改ざん検知や整合性確認です。

---

### ❌ 入力データが長いほどハッシュ値も長くなる
→ ⭕ ハッシュ値の長さは、ハッシュ関数で決まります。

SHA-256なら、入力が32ビットでも2,048ビットでも、出力は256ビットです。

---

### ❌ SHA-256は256ビットの入力専用である
→ ⭕ SHA-256は、出力が256ビットのハッシュ関数です。

「256ビットのデータだけを入力できる」という意味ではありません。

---

### ❌ ハッシュ化だけで送信者を確認できる
→ ⭕ ハッシュ単体では、送信者の正当性までは確認できません。

送信者の確認には、MACや電子署名が関係します。

---

### ❌ ハッシュ化＝MAC
→ ⭕ MACは鍵を使います。

- ハッシュ：基本的に鍵なし
- MAC：鍵あり

と整理します。

---

### ❌ ハッシュ化＝電子署名
→ ⭕ 電子署名は本人性の確認にも使います。

- ハッシュ：改ざん検知、整合性確認
- 電子署名：本人確認、改ざん検知、否認防止

という違いがあります。

---

## 確認問題（SG試験対策）

セキュアハッシュ関数SHA-256を用いて、32ビット、256ビット、2,048ビットの三つの長さのメッセージからハッシュ値を求めた。  
それぞれのメッセージのハッシュ値の長さとして、最も適切なものはどれか。

- ア. 32ビット、256ビット、256ビット
- イ. 32ビット、256ビット、2,048ビット
- ウ. 256ビット、256ビット、256ビット
- エ. 256ビット、256ビット、2,048ビット

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

**正解：ウ**

### 解説
SHA-256が出力するハッシュ値は、入力データの長さに関係なく、常に256ビットです。

そのため、

- 32ビットのメッセージ → 256ビット
- 256ビットのメッセージ → 256ビット
- 2,048ビットのメッセージ → 256ビット

となります。

### 選択肢の見方
- ア：最初の32ビットにつられた誤りです。  
- イ：入力データの長さがそのまま出力されると考えた誤りです。  
- ウ：正しいです。SHA-256の出力は常に256ビットです。  
- エ：最後の2,048ビットにつられた誤りです。  

👉 判断ポイント  
**SHA-256の「256」は、出力されるハッシュ値の長さと考える。**

</details>

---

## まとめ（試験直前用）
- ハッシュ化は、データから固定長のハッシュ値を生成する仕組み
- 主な目的は、改ざん検知と整合性確認
- ハッシュ値から元データは復元できない
- SHA-256の出力は、入力長に関係なく256ビット
- 暗号化は機密性、ハッシュ化は改ざん検知
- MACとの違いは鍵の有無
- 電子署名は本人確認や否認防止にも関係する

👉 判断基準  
**改ざんチェック（鍵なし）→ ハッシュ  
改ざんチェック（鍵あり）→ MAC  
本人確認・否認防止 → 電子署名  
秘密にする → 暗号化**
