チャレンジ/レスポンス認証 【challenge and response authentication】
概要
チャレンジ/レスポンス認証(challenge and response authentication)とは、通信回線やネットワークを介して利用者の認証を行う際に、パスワードなどの秘密の情報を直接やり取りすることなく確認する方式の一つ。暗号学的ハッシュ関数の性質を利用して、パスワードそのものは回線に流さずにパスワードを知っていることを証明する。クライアントが認証の開始を申し出ると、サーバは「チャレンジ」と呼ばれる乱数を元に決めた毎回異なるデータ列を送信する。クライアントは利用者が自分の知っているパスワードとして入力した文字列とチャレンジを組み合わせ、これをハッシュ関数を通してハッシュ値に変換したものを「レスポンス」としてサーバに返信する。
サーバは手元の認証情報から正しいパスワードとチャレンジを組み合わせてハッシュ値を算出し、レスポンスと比較・照合する。両者が一致すれば確かにクライアントに入力されたパスワードはサーバ上のものと同一であると確認できる。
一連の手順でパスワードそのもの(平文)はサーバとクライアントの間でやり取りされず、経路上で攻撃者が盗聴することはできない。また、チャレンジやレスポンスを盗聴したとしても、暗号学的ハッシュ関数の性質によりパスワードを導き出すのは極めて難しい。チャレンジやレスポンスに十分な長さがあれば事実上不可能である。
チャレンジは認証を行うごとに不規則に変化し予測不能であるため、ある種のワンタイムパスワードのように働き、盗聴した情報をそのまま送りつける反射攻撃(リプレイアタック)などの攻撃手法にも耐性がある。
チャレンジ/レスポンス認証は様々な認証方式に採用されており、有名なものではPPP(Point-to-Point Protocol)の認証などに用いられるCHAP(Challenge-Handshake Authentication Protocol)がある。SSHのチャレンジ/レスポンス認証のようにハッシュ関数ではなく公開鍵暗号を利用する方式や、HTTPのDigest認証のようにクライアントがチャレンジを生成する方式など、いくつかのバリエーションがある。
(2018.7.23更新)