メインコンテンツへ
セキュリティ

チャレンジレスポンス認証の仕組みとして、最も適切なものはどれか。

ア.サーバが毎回異なる乱数(チャレンジ)をクライアントへ送信し、クライアントはその乱数とパスワードを組み合わせたハッシュ値(レスポンス)を返す。サーバ側でも同じ計算を行い、値が一致すれば認証成功とする。正解
イ.クライアントが乱数(チャレンジ)を生成してサーバへ送り、サーバが自身の秘密鍵でその乱数を暗号化した値(レスポンス)を返す。クライアントがサーバの公開鍵で復号して元の乱数と一致すれば認証成功とする。
ウ.クライアントがサーバの公開鍵でパスワードを暗号化してサーバへ送信し、サーバが秘密鍵で復号した値と登録済みパスワードを照合することで認証する。
エ.サーバとクライアントが事前に共有した秘密鍵と現在時刻を組み合わせて一定間隔で自動生成されるワンタイムパスワードを、互いに照合することで認証する。

解説

チャレンジレスポンス認証は「毎回問題を変えるテスト」方式です。パスワードを直接送らず、「知っている」ことだけを証明することでリプレイ攻撃を防ぎます。

なぜ ア が正解か

サーバが毎回異なる乱数(チャレンジ)を発行するのがポイントです。クライアントはその乱数と自分のパスワードを組み合わせてハッシュ値を計算し、レスポンスとして返します。通信路を流れるのはこのハッシュ値だけであり、パスワード本体は一切流れません。チャレンジが毎回変わるため、攻撃者がレスポンスを盗み見ても、次回の認証には使い回せません(リプレイ攻撃の無効化)。

なぜ イ は間違いか

チャレンジを生成するのはサーバ側であり、クライアント側ではありません。また、秘密鍵で乱数を暗号化してクライアントに見せる手順はTLSハンドシェイクでのサーバ認証(クライアントがサーバを確認する)に近い仕組みです。チャレンジレスポンス認証はユーザーがサーバに自分を証明する方向です。

なぜ ウ は間違いか

公開鍵でパスワードを暗号化して送る方法は盗聴には一定の効果があります。しかしチャレンジ(毎回変わる乱数)がないため、過去の暗号化済み通信をそのまま再送するリプレイ攻撃には全く無力です。チャレンジレスポンス認証の本質は「使い捨ての問い」によるリプレイ防止にあります。

なぜ エ は間違いか

これはTOTP(Time-based One-Time Password)の説明です。Google Authenticatorが採用している仕組みで、時刻と共有秘密鍵からワンタイムパスワードを生成します。パスワードを直接送らない点はチャレンジレスポンスと共通しますが、サーバが都度チャレンジを送信するステップがなく、別の方式として区別されます。

出典: AI生成問題(学習用)