---
title: "パスワードはなぜハッシュ値で保存する？認証時の比較方法【基本情報技術者試験】"
description: "パスワード認証を、登録時にパスワードをハッシュ化して保存し、認証時に入力パスワードを同じ方法でハッシュ化して比較する流れで整理します。平文保存、圧縮、利用者IDのハッシュ化との違いもFE科目A向けに解説します。"
last_modified_at: "2026-08-24"
canonical_url: "https://stemtazoo.github.io/fe/password-hash-authentication/"
section: "fe"
---

## まず結論

パスワード認証では、**パスワードそのものを保存せず、ハッシュ値に変換して保存する**のが基本です。

認証時には、入力されたパスワードを同じ方法でハッシュ化し、保存済みのハッシュ値と比較します。

```text
登録時
パスワード
↓ ハッシュ関数
ハッシュ値を保存

認証時
入力パスワード
↓ 同じ方法でハッシュ化
ハッシュ値を作る
↓
保存済みハッシュ値と比較
```

科目Aでは、まず次の一文で判断します。

> **保存するのはパスワードそのものではなく、パスワードのハッシュ値。**

## 直感的な説明

パスワードをそのまま保存すると、パスワードファイルやデータベースを不正に見られたときに、利用者のパスワードそのものが知られてしまいます。

そこで、パスワードから「照合用の値」を作って保存します。

```text
元のパスワード
↓
ハッシュ化
↓
照合用の値
```

ログインするときも同じです。

入力されたパスワードから照合用の値を作り、保存してある値と一致するかを確認します。

```text
保存済み
ハッシュ値 A

入力されたパスワード
↓ ハッシュ化
ハッシュ値 A

一致
→ 認証成功
```

つまり、システムは元のパスワードを保存していなくても、**入力されたパスワードが正しいかを確認できます**。

## 定義・仕組み

### 登録時

利用者がパスワードを設定すると、その値をハッシュ関数で変換します。

```text
password
↓ ハッシュ関数
ハッシュ値
```

保存するのは、このハッシュ値です。

### 認証時

利用者が入力したパスワードを、登録時と同じ方法でハッシュ化します。

その結果と保存済みのハッシュ値を比較します。

| 段階 | 処理 |
|---|---|
| 登録時 | パスワードをハッシュ化して保存 |
| 認証時 | 入力パスワードを同じ方法でハッシュ化 |
| 比較時 | ハッシュ値同士を比較 |

ここで大切なのは、**比較する対象はパスワードのハッシュ値同士**ということです。

利用者IDは「誰か」を識別する情報であり、パスワードは「本人か」を確認する秘密情報です。

```text
利用者ID
→ 誰かを識別する

パスワード
→ 本人かを確認する
```

そのため、利用者IDをハッシュ化してパスワードと比較しても、正しい認証にはなりません。

ハッシュ関数そのものの性質は、[ハッシュ関数とは？改ざん検知に使う一方向の要約値](https://stemtazoo.github.io/fe/hash-function/)で整理しています。

## 科目Aでどう出る？

科目Aでは、パスワードファイルへの不正アクセスを想定し、どの保存方法が適切かを選ばせる問題が出ます。

### 判断表

| 選択肢の考え方 | 判断 |
|---|---|
| パスワードをハッシュ値で保存し、入力側もハッシュして比較 | 適切 |
| 利用者IDをハッシュ化して比較 | 不適切 |
| パスワードを平文で保存 | 不適切 |
| 平文パスワードを保存して、比較時だけハッシュ化 | 不適切 |
| パスワードを圧縮して保存し、認証時に復元 | 不適切 |

### 試験中の判断手順

```text
① 保存ファイルに平文パスワードが残るか？
   ↓
   残るなら危険

② 認証時にハッシュ化する対象は何か？
   ↓
   入力されたパスワード

③ 何と何を比較するか？
   ↓
   ハッシュ値同士
```

この3点で多くの選択肢を切れます。

## どんな場面で使う？

パスワードを使うログイン機能で使います。

- Webサービス
- 社内システム
- 会員サイト
- 管理画面
- 業務アプリケーション

重要なのは、認証のために元のパスワードを取り出す必要はないことです。

```text
元のパスワードを知りたい
→ 目的ではない

入力された値が正しいか確認したい
→ ハッシュ値の比較でよい
```

## よくある誤解・混同

### 平文で保存して、認証時に両方ハッシュすれば安全？

安全ではありません。

認証時にハッシュ化していても、保存ファイルに平文パスワードが残っていれば、不正アクセスされたときにパスワードそのものが知られてしまいます。

```text
保存時に平文
→ NG
```

比較方法だけでなく、**保存時点で平文を残さない**ことが重要です。

### 圧縮すれば安全？

圧縮は、データサイズを小さくするための処理です。

認証時に復元できるので、元のパスワードも取り出せてしまいます。

```text
圧縮
→ 小さくする
→ 復元できる

ハッシュ
→ 照合用の値を作る
→ 元に戻すことを前提にしない
```

したがって、圧縮はパスワード保護の代わりにはなりません。

### ハッシュ化と暗号化は同じ？

同じではありません。

| 用語 | 目的 | 元に戻す？ |
|---|---|---|
| ハッシュ化 | 照合・改ざん確認など | 基本的に戻さない |
| 暗号化 | 内容を秘密にする | 鍵を使って復号する |

パスワード認証では、元のパスワードを復元する必要がありません。

そのため、ハッシュ値を使って照合します。

### ハッシュ化すれば絶対安全？

そこまで単純ではありません。

実際のシステムでは、単純なハッシュ化だけでなく、ソルトやパスワード向けのハッシュ方式を使って、解析を難しくします。

ただし、FE科目Aで今回のような基本問題を解くときは、まず次の対応を押さえます。

```text
平文保存
→ 危険

パスワードのハッシュ値を保存
→ 適切な方向
```

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

- パスワードは平文のまま保存しない
- 登録時にパスワードをハッシュ化し、そのハッシュ値を保存する
- 認証時は入力パスワードを同じ方法でハッシュ化する
- 比較するのは、保存済みハッシュ値と入力パスワードから作ったハッシュ値
- 利用者IDをハッシュ化しても、パスワード認証にはならない
- 圧縮は復元できるので、パスワード保護の代わりにはならない
- ハッシュは元に戻すためではなく、照合するために使う

```text
保存
→ パスワードのハッシュ値

認証
→ 入力パスワードをハッシュ化

比較
→ ハッシュ値同士
```
