---
title: "チャレンジレスポンス認証とは？誰が誰を認証するかの見分け方【基本情報技術者試験】"
description: "チャレンジレスポンス認証を、チャレンジを送る側・レスポンスを返す側・検証する側の役割で整理し、片方向認証、相互認証、リプレイ攻撃との違いをFE試験向けに解説します。"
last_modified_at: "2026-07-20"
canonical_url: "https://stemtazoo.github.io/fe/challenge-response-authentication/"
section: "fe"
---

## まず結論

チャレンジレスポンス認証とは、**毎回異なる値（チャレンジ）を送り、その値と秘密情報から作られた応答（レスポンス）を検証して相手を認証する方式**です。

基本情報技術者試験では、次の判断軸が重要です。

```text
チャレンジを送る
↓
相手がレスポンスを作る
↓
レスポンスを検証する
↓
検証した側が、応答した側を認証する
```

つまり、**レスポンスを確認する側が認証する側**です。

## 直感的な説明

チャレンジレスポンス認証は、合言葉そのものを言わせずに、相手が合言葉を知っているか確かめる仕組みです。

例えば、YがXを認証する場合を考えます。

```text
Y：「今回のチャレンジ値は4821です」
X：「秘密の規則で計算するとA7C9です」
Y：「正しい。Xは正当な相手だ」
```

Yが送る値がチャレンジ、Xが返す答えがレスポンスです。

Xは秘密情報そのものを送っていません。Yは、正しいレスポンスを返せたかによって、Xが秘密情報を知っている正当な相手かどうかを確認します。

## 定義・仕組み

チャレンジレスポンス認証の流れは、次の3段階です。

```text
1. 認証する側が、毎回異なるチャレンジを送る
2. 認証される側が、秘密情報とチャレンジからレスポンスを作る
3. 認証する側が、返されたレスポンスを検証する
```

役割を整理すると次のようになります。

| 役割 | 行うこと |
|---|---|
| 認証する側 | チャレンジを送り、レスポンスを検証する |
| 認証される側 | チャレンジを受け取り、レスポンスを作って返す |
| 秘密情報 | レスポンスを作るために使う。通常はそのまま送らない |

### なぜ毎回違うチャレンジを使うのか

毎回同じ応答を送る方式では、通信を盗聴した攻撃者が、過去の応答をそのまま再送して認証を通過するおそれがあります。

```text
過去の認証情報を盗む
↓
同じ内容を再送する
↓
不正に認証を通過する
```

これがリプレイ攻撃です。

チャレンジレスポンス認証では、チャレンジを毎回変えるため、過去に使ったレスポンスをそのまま再利用しにくくなります。

```text
毎回違うチャレンジ
↓
毎回違うレスポンス
↓
過去のレスポンスを再送しても一致しない
```

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

## 科目Aでどう出る？

科目Aでは、通信手順を読んで、**誰が誰を認証しているか**を選ぶ問題として出題されます。

次の流れを見ます。

```text
YがチャレンジをXへ送る
XがレスポンスをYへ返す
Yがレスポンスを確認する
```

この場合は、YがXを認証しています。

```text
チャレンジを送った側：Y
レスポンスを返した側：X
レスポンスを確認した側：Y

→ YがXを認証する
```

試験では、最初に情報を送った側ではなく、**最後にレスポンスの正しさを確認した側**を見ることが大切です。

### 選択肢を切る判断軸

| 問題文の動作 | 判断 |
|---|---|
| チャレンジを送る | 相手を認証しようとしている側 |
| レスポンスを生成する | 認証される側 |
| レスポンスを検証する | 認証する側 |
| 両方向でチャレンジと検証を行う | 相互認証 |

覚え方は次のとおりです。

```text
問題を出す
→ 相手を試す

答えを返す
→ 試される

答えを確認する
→ 相手を認証する
```

## 科目Bでどう使う？

チャレンジレスポンス認証は、科目Bの情報セキュリティ分野と直接関係します。

長文問題では、用語名を答えるだけでなく、認証手順にどのような意味があるかを読み取る必要があります。

確認したいポイントは次のとおりです。

1. 誰がチャレンジを送っているか
2. 誰がレスポンスを生成しているか
3. 誰がレスポンスを検証しているか
4. チャレンジが毎回変化するか
5. 秘密情報そのものを送っていないか
6. 片方向認証か相互認証か

例えば、YがXだけを認証する流れは次のとおりです。

```text
Y → X：チャレンジ
X → Y：レスポンス
Y：レスポンスを検証
```

一方、相互認証では、逆方向の確認も必要です。

```text
YがXを認証する処理
＋
XがYを認証する処理
↓
相互認証
```

科目Bでは、手順の中に次の弱点がないかも確認します。

- 毎回同じチャレンジを使っていないか
- 過去のレスポンスを再利用できないか
- 秘密情報を平文で送っていないか
- 一方だけしか認証していないのに、相互認証と判断していないか

## よくある誤解・混同

### チャレンジを受け取った側が、送信者を認証する

これは誤りです。

チャレンジは、相手を試すための任意の値です。チャレンジを受け取っただけでは、送信者が正当な相手かどうかは確認できません。

```text
チャレンジを受け取る
≠
送信者を認証する
```

### チャレンジを送ること自体が認証である

認証は、レスポンスを受け取り、その内容を検証して初めて成立します。

```text
チャレンジを送るだけ
→ まだ認証は完了していない
```

### 片方向認証と相互認証は同じ

片方向認証では、一方だけが相手を確認します。

| 認証方式 | 認証する関係 |
|---|---|
| 片方向認証 | YがXだけを認証する |
| 相互認証 | YがXを認証し、XもYを認証する |

### パスワードを送る方式と同じ

チャレンジレスポンス認証では、通常、秘密情報そのものを送信しません。

```text
固定パスワードをそのまま送る
→ 盗聴されると再利用されるおそれ

チャレンジから毎回レスポンスを作る
→ 過去の値を再利用しにくい
```

### 毎回同じレスポンスでも安全である

毎回同じレスポンスを使うと、盗聴した値を再送される危険があります。

そのため、チャレンジは毎回異なる値にすることが重要です。

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

- チャレンジレスポンス認証は、チャレンジに対する応答を検証して相手を認証する方式
- チャレンジを送る側が認証する側、レスポンスを返す側が認証される側
- レスポンスを最終的に確認する側が、相手の正当性を判断する
- 毎回異なるチャレンジを使うため、過去のレスポンスを再利用しにくい
- リプレイ攻撃への対策として有効
- 両方向で同様の確認を行うと相互認証になる
- 科目Bでは、誰が誰を認証するか、毎回値が変わるか、秘密情報を直接送っていないかを見る
