CHAP
PPPで使われる認証プロトコルの一つである。識別子、共有する秘密、認証する側が毎回変える値(チャレンジ)からハッシュ値を計算して照合し、秘密自体は通信路に流さずに認証する。
イマシルちゃんの解説
CHAPは、2台の機器をつなぐPPPで相手を確かめる認証プロトコルだよ。
まずサーバが、毎回変える値であるチャレンジを相手へ渡すんだ。
相手はその値と共有済みのパスワードなどから、内容を決まった長さの値にまとめたハッシュ値を計算して返すの。
サーバも同じ計算をして、結果が一致するかを確かめるよ。
これならパスワードそのものを通信路に流さずに認証できるんだ。
お題が変わるので、以前の答えをそのまま使ったなりすましも防ぎやすくなるよ。
ただし弱いパスワードは、盗み見たやり取りから推測されるおそれがあるんだ。
この解説はわかりやすかったですか?
より深い解説
定義
CHAP(Challenge Handshake Authentication Protocol)は、RFC 1994で定められた、PPPの認証プロトコルである。PPPフレームのプロトコルフィールドの値は0xC223。チャレンジレスポンス方式の認証の代表例である。
認証の流れ
CHAPは3回のやり取り(3ウェイハンドシェイク)で認証する。
- 認証する側(サーバ)が、毎回異なる乱数(チャレンジ)を Challenge で送る
- 認証される側(クライアント)が、識別子、共有している秘密(パスワード)、チャレンジをつなげたもののハッシュ値(標準ではMD5)を計算し、Response で返す
- サーバも同じ計算をして一致すれば Success、しなければ Failure を返す
PAPより安全な理由
| 特徴 | 効果 |
|---|---|
| パスワードを送らない | 盗聴されても、パスワードそのものは知られない |
| チャレンジが毎回変わる | 盗聴したResponseを後で再送しても通らない(リプレイ攻撃に強い) |
| 通信中に再認証できる | 接続の途中でも、何度でもチャレンジを送り直して確かめられる |
弱点と注意点
- サーバは計算のために、パスワードを元に戻せる形(平文など)で持っている必要がある。サーバのデータが漏れると被害が大きい
- 盗聴したチャレンジとResponseの組から、辞書攻撃で弱いパスワードを割り出される可能性がある
- ハッシュに使うMD5は現在では弱いとされる
Microsoftによる拡張のMS-CHAPv2は、無線LANの企業向け認証(PEAP)の内部などでも使われてきたが、同じく辞書攻撃などの弱点が指摘されている。
チャレンジレスポンス認証の広がり
「相手が出した乱数と秘密の情報から計算した値を返す」という考え方は、PPPに限らず、HTTPのダイジェスト認証やワンタイムパスワードなど、多くの認証方式に使われている。
一度だけ使う値と、お題への応答
ワンタイムパスワードは、一回限りの利用や短い有効期間を前提とする認証用の値である。時刻やカウンタから生成する方式もあり、すべてが相手から受けた乱数に答える方式ではない。
チャレンジレスポンス認証では、認証する側が出す新しい値と秘密を使って応答を計算する。固定のパスワードを毎回同じように暗号化して送るだけでは、この仕組みにはならない。過去の応答を再利用されないよう、チャレンジの予測困難性や再使用の防止が必要になる。秘密を直接送らなくても、弱い秘密への辞書攻撃などの対策は別途必要である。