チャレンジ/レスポンス方式(challenge and response authentication)は、
ハッシュ関数の「一方向性」の性質を利用して、平文のパスワードを直接に送出しないことで
盗聴対策した認証方法で次の手続きで行われます。
ハッシュ関数は、下記特定のアルゴリズムの部分で使われています。
step1 | クライアント →サーバ |
認証要求 |
step2 | クライアント ←サーバ |
サーバはそれに対し「チャレンジ(ランダムな数値列)」を返信 |
step3 | クライアント →サーバ |
ユーザが入力したパスワードと「チャレンジ」を特定のアルゴリズムに従って合成した数値列を、 「レスポンス」として送信 |
step4 | サーバ | 送信したチャレンジとあらかじめ登録されたそのユーザのパスワードから同じようにレスポンスを作成している。 このレスポンスと受信した「レスポンス」を比較して、一致すれば認証する。 |
これは、 PPP (Point to Point Protocol)などで 利用される認証方式の一つです。
盗聴されても安全であるという面でPAP認証よりも安全ですが,
クライアント側のパスワード解読や、盗み見られたりする場合、
またアクセスサーバ側のパスワードファイルが不正アクセスされる場合に対応できません。
この解決する方法として、毎回使用するパスワードを変化させるワンタイムパスワードが使われるようになってきています。
ワンタイムパスワードとしては、オープンな規格として使われているS/KeyやOTP(One Time Password)があります。
S/Key(エス・キー)ワンタイムパスワードは,チャレンジ/レスポンス方式を応用したものです。
(ベルコア:Bellcore で開発された方式で、商標名です。)
クライアントから最初の認証要求を受けた認証サーバは,
チャレンジコードを生成しユーザヘ送ります。
このチャレンジコードにはシード(パスワードの元になる文字列)とシーケンス番号(ハッシュする回数)が含まれているものです。
チャレンジコードを受け取ったユーザは,自身が持っているパスフレーズ(一種のパスワード)とシードを連結し,
それをシーケンス番号の数だけハッシュ化を繰り返します。
これがワンタイムパスワードとなりサーバへ送られて認証されます。
2回目以降の認証では,自動的にシーケンス番号が1ずつ減少する仕組みになっているために
ワンタイムパスワードは毎回変わることになります。
サーバには,ユーザの前回のワンタイムパスワードが保存されており,
今回受け取ったワンタイムパスワードをハッシュ化して、それが前回のワンタイムパスワードと一致することの確認でユーザを認証します。
PAP認証の補足:
パスワード認証プロトコル (PAP) は簡単な認証プロトコルです。
このプロトコルでは、ユーザー名とパスワードはプレーンテキスト (暗号化されていない) 形式でリモート アクセス サーバーに送信されます。
その意味で、セキュリティ的には使うべきではない認証方法になっています。