パスワードをそのままネットワーク上に送るのはとても危険です。盗聴されたら一発でアカウントを乗っ取られてしまいます。そこで登場するのが「チャレンジレスポンス認証」という仕組みです。
この記事では『チャレンジレスポンス認証』について、以下の内容を図を用いて分かりやすく解説します。
- チャレンジレスポンス認証とは?
- チャレンジレスポンス認証の流れ・仕組み
- チャレンジレスポンス認証のメリットとデメリット
- チャレンジレスポンス認証が使われる例
- チャレンジレスポンス認証でよく使われる表記
チャレンジレスポンス認証とは?
チャレンジレスポンス認証は、ネットワーク上にパスワードを直接流さずに認証する方法です。
「利用者が入力したパスワード」と「サーバから送られてくるランダムな文字列(チャレンジ)」からハッシュ値(レスポンス)を生成し、そのハッシュ値をサーバーに送信して認証を行います。
この仕組みにより、仮に通信内容が盗聴されても、パスワード自体が漏れることはありません。
普通の認証(例:Basic認証)は、ユーザー名やパスワードをBase64エンコードしてそのまま送信します。しかし、これでは通信を盗聴されるとパスワードが漏れてしまいます。そこで登場したのがチャレンジレスポンス認証です。
では、これから具体的にチャレンジレスポンス認証の流れを確認していきましょう。なお、サーバ側にはアカウント情報(ユーザーIDやパスワード)が保存されているとします。
あわせて読みたい
『Basic認証』については下記の記事で詳しく説明しています。興味のある方は下記のリンクからぜひチェックをしてみてください。 続きを見るBasic認証とは?仕組み・使い方・注意点をわかりやすく解説!
チャレンジレスポンス認証の流れ・仕組み


チャレンジレスポンス認証の流れを上図に示します。
- クライアント(利用者の端末)はユーザーIDとパスワードを入力します。その際、ユーザーIDをサーバに送ります。この時点では、パスワードはまだ送信しません。
- サーバーは「チャレンジ」と呼ばれるランダムな文字列(nonce)を生成し、クライアントに送信します。
- クライアントは「①で入力したパスワード」と「②で送付されたチャレンジ」から、ハッシュ関数を用いてハッシュ値(レスポンス)を生成し、サーバーに送信します。
- サーバーは「①で送付されたユーザーID」からアカウント情報を検索し、「検索結果のパスワード」と「②で生成したチャレンジ」から、同じハッシュ関数を用いてハッシュ値を生成します。
- 「③のハッシュ値(レスポンス)」と「④のハッシュ値」を比較します。同一であれば認証成功です。
③の箇所では「ハッシュ値(レスポンス)」をサーバーに送信していますが、ハッシュ関数は不可逆的なため、仮に通信内容が盗聴されても、パスワード自体が漏れることはありません。
チャレンジレスポンス認証のメリットとデメリット
チャレンジレスポンス認証のメリットとデメリットを以下に示します。
メリット
- パスワード盗聴の防止
- 通信中にパスワード自体を送らないため、もし盗聴されてもパスワードは漏れません。安全性が高まります。
- リプレイ攻撃に強い
- チャレンジやレスポンスが盗聴されても、チャレンジは一度限りの使用であり、次回認証時には異なるチャレンジを使用するため、過去のレスポンスを再利用されても問題がない。
デメリット
- クライアント側とサーバー側で同じハッシュ関数を共有しなけらばならない
- 両者が同じアルゴリズムを理解・使用できる前提が必要です。
- アルゴリズムの安全性に依存
- 古いハッシュ関数(例:MD5やSHA-1)は脆弱性が知られており、使うと安全性が落ちます。安全なハッシュ関数を選ぶことが大切です。
- 実装がやや複雑
- Basic認証等の単にIDとパスワードを送信する方法と比較すると、チャレンジレスポンス認証はチャレンジの生成やレスポンスの計算などがあるため実装が少し複雑になります。
チャレンジレスポンス認証が使われる例
チャレンジレスポンス認証は、さまざまなプロトコルで利用されています。以下に一例を示します。
- CHAP(Challenge-Handshake Authentication Protocol)
- CHAPは、インターネットプロバイダー(ISP)のダイヤルアップ接続やPPP(Point-to-Point Protocol、電話回線を使ったネット接続など)で使われる認証プロトコルです。
- ダイジェスト認証(Digest Authentication)
- ダイジェスト認証は、WebサイトのHTTP認証方式の一つで、主にWebサーバーのユーザー認証に使われます。サーバー側がチャレンジを生成するのが一般的だが、クライアント側が追加で「cnonce(クライアントノンス)」を加えて、さらにセキュリティを強化することがあります。
チャレンジレスポンス認証でよく使われる表記
チャレンジレスポンス認証は様々な表記があります。以下に示すものは、どれも本質的には同じものを指しており、特に違いはありません。ただし、英語の正式な技術用語は「Challenge-Response Authentication(英語)」なので、翻訳時にいろいろな表記が生まれているだけです。
表記パターン | 説明 |
---|---|
チャレンジレスポンス認証 | 最も一般的で標準的な呼び方。「チャレンジレスポンス方式による認証」という意味。 |
チャレンジレスポンス方式 | 認証という文脈に限らず、広く「このような仕組み」や「このような流れ」を説明する場面で使われることがある。 |
チャレンジレスポンス方式認証 | やや冗長な表現だが、意味は「チャレンジレスポンスを用いた認証」で同じ。実際の使用頻度は低め。 |
チャレンジ/レスポンス認証 | スラッシュ「/」で区切った表記。可読性のために使われることがあるが、公式文書ではあまり見かけない。 |
チャレンジ&レスポンス認証 | 「&(アンド)」を使った表記。特にカジュアルな記事や口語的な説明で見かけることがあるが、技術仕様書では通常使われない。 |
チャレンジ・レスポンス認証 | 中黒「・」を使った表記。日本語の技術記事、特にWeb記事や解説書などで比較的よく見かける。 |
チャレンジレスポンス | 認証方式を指さず単に「チャレンジとレスポンスのやりとり」という概念や流れそのものを指すときに使われる。 |
本記事のまとめ
この記事では『チャレンジレスポンス認証』について、以下の内容を説明しました。
- チャレンジレスポンス認証パスワードをそのまま送らず、チャレンジ(乱数)と組み合わせたハッシュ値で認証する仕組み。
- 特徴
- 盗聴されてもパスワードは漏れないので安全性が高い。
- チャレンジは一度限りなので、リプレイ攻撃(過去データの再利用)を防げる。
- クライアントとサーバーで同じハッシュ関数・アルゴリズムを使う必要がある。
- 実装はBasic認証より複雑だが、その分セキュリティが向上する。
お読み頂きありがとうございました。