チャレンジレスポンス認証方式

チャレンジ/レスポンス方式(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) は簡単な認証プロトコルです。 このプロトコルでは、ユーザー名とパスワードはプレーンテキスト (暗号化されていない) 形式でリモート アクセス サーバーに送信されます。 その意味で、セキュリティ的には使うべきではない認証方法になっています。