コンピューティングにおいて、チャレンジハンドシェイク認証プロトコル(CHAP)は、元々はポイントツーポイントプロトコル(PPP)でユーザー認証に使用されていた認証プロトコルです。CHAPは、 RADIUSやDiameterなどの他の認証プロトコルにも採用されています。
ほぼすべてのネットワーク オペレーティング システムは、CHAP を使用した PPP をサポートしています。ほとんどのネットワーク アクセス サーバーも同様です。CHAP は、DSL ユーザーの認証のために PPPoEでも使用されます。
PPPはデータを暗号化せずに「平文」で送信するため、CHAPはPPPセッションを観察できる攻撃者に対して脆弱です。攻撃者はユーザー名、CHAPチャレンジ、CHAPレスポンス、その他PPPセッションに関連する情報を見ることができます。攻撃者はオフライン辞書攻撃を仕掛け、元のパスワードを盗み出すことができます。PPPで使用される場合、CHAPは認証装置(通常はネットワークアクセスサーバー)によって生成されるチャレンジを使用することで、ピアからのリプレイ攻撃に対する保護も提供します。
他のプロトコルでCHAPが使用される場合、CHAPは平文で送信されるか、トランスポート層セキュリティ(TLS)などのセキュリティ層で保護されることがあります。例えば、CHAPがユーザーデータグラムプロトコル(UDP)を使用してRADIUS経由で送信される場合、RADIUSパケットを観測できる攻撃者は、PPPと同様にオフライン辞書攻撃を仕掛けることができます。
CHAPでは、クライアントとサーバーの両方がパスワードの平文バージョンを知っている必要がありますが、パスワード自体はネットワーク上に送信されることはありません。そのため、PPPで使用する場合、CHAPは、これらの理由の両方で脆弱なパスワード認証プロトコル(PAP)と比較して、より優れたセキュリティを提供します。
ピアがCHAPを送信すると、認証サーバーはそれを受信し、データベースから「既知の有効な」パスワードを取得し、CHAP計算を実行します。計算結果のハッシュが一致した場合、ユーザーは認証されたとみなされます。ハッシュが一致しない場合、ユーザーの認証試行は拒否されます。
認証サーバーはパスワードを平文で保存する必要があるため、保存するパスワードに異なる形式を使用することはできません。攻撃者がパスワードデータベース全体を盗んだ場合、すべてのパスワードがデータベース内で「平文」で閲覧可能になります。
その結果、 PPP リンクで使用する場合、 CHAP は PAP よりも安全ですが、PAPなどの他の方法よりも安全な「保存時」のストレージが妨げられます。
MS-CHAPは CHAP に似ていますが、異なるハッシュ アルゴリズムを使用し、各当事者がお互いを認証できるようにします。
CHAPは、元々はポイントツーポイントプロトコル(PPP)サーバーがリモートクライアントのIDを検証するために使用していた認証方式です。CHAPは、3ウェイハンドシェイクを用いてクライアントのIDを定期的に検証します。これは初期リンク(LCP)の確立時に行われ、その後もいつでも再度行われる可能性があります。検証は共有秘密(クライアントのパスワードなど)に基づいて行われます。[ 1 ]
| 説明 | 1バイト | 1バイト | 2バイト | 1バイト | 変数 | 変数 |
|---|---|---|---|---|---|---|
| チャレンジ | コード = 1 | ID | 長さ | チャレンジの長さ | チャレンジ価値 | 名前 |
| 応答 | コード = 2 | ID | 長さ | 応答の長さ | 応答値 | 名前 |
| 成功 | コード = 3 | ID | 長さ | メッセージ | ||
| 失敗 | コード = 4 | ID | 長さ | メッセージ |
ランダムチャレンジに選択されたIDは、対応するレスポンス、成功、および失敗パケットにも使用されます。新しいIDを持つ新しいチャレンジは、別のIDを持つ前回のチャレンジとは異なる必要があります。成功または失敗の通知が失われた場合、同じレスポンスを再度送信することができ、同じ成功または失敗の表示がトリガーされます。MD5ハッシュの場合、レスポンス値はMD5(ID||secret||challenge)ID、秘密鍵、およびチャレンジを連結したMD5です。[ 2 ]