資格情報をプレーン テキストとして送信する以外に、ダイジェスト認証と基本認証との違いは何ですか?
3 に答える
主な違いは、ユーザー名とパスワードを平文で送信する必要がないことです。また、サーバーからの 1 回限りの番号を使用するため、リプレイ攻撃にも耐性があります。
サーバーは、ユーザー名、レルム、パスワード、および URI 要求と組み合わせて、1 回限り使用できる番号 (ノンス) をクライアントに提供します。クライアントは、これらすべてのフィールドを MD5 ハッシュ メソッドで実行して、ハッシュ キーを生成します。
このハッシュキーをユーザー名とレルムとともにサーバーに送信して、認証を試みます。
サーバー側では、ハッシュキーを生成するために同じ方法が使用されますが、ブラウザーに入力されたパスワードを使用する代わりに、サーバーはユーザー DB からユーザーの予想されるパスワードを検索します。このユーザー名の保存されたパスワードを検索し、同じアルゴリズムを実行して、クライアントが送信したものと比較します。それらが一致する場合、アクセスが許可されます。そうでない場合、401 Unauthorized (ログインなしまたはログイン失敗) または 403 Forbidden (アクセス拒否) が返されます。
ダイジェスト認証はRFC2617 で標準化されています。ウィキペディアにその概要があります:
次のように考えることができます。
- クライアントがリクエストを行う
- クライアントはサーバーからノンスと 401 認証要求を返します
- クライアントは次の応答配列を返します (username, realm, generate_md5_key(nonce, username, realm, URI, password_given_by_user_to_browser)) (はい、これは非常に単純化されています)
- サーバーはユーザー名とレルムを取得し (さらに、クライアントが要求している URI を認識しています)、そのユーザー名のパスワードを検索します。次に、独自のバージョンの generate_md5_key(nonce, username, realm, URI, password_I_have_for_this_user_in_my_db) を実行します。
- 取得した generate_md5() の出力とクライアントが送信した出力を比較し、クライアントが送信した正しいパスワードと一致する場合。一致しない場合は、送信されたパスワードが間違っています。
資格情報のハッシュ HA1 を取得する唯一の方法は、パスワードを知ることです。サーバーは HA1 を認識していますが、HA1 を生成したパスワードは認識していません。HA1 が攻撃者に知られている場合、システムに侵入する可能性があります。したがって、ネットワークに送信されません。これを行う前にナンスなどに基づくさらなるハッシュが行われ、これはサーバーで行われた同様の計算と一致する必要があります。したがって、サーバーが HA1 を非公開にしている限り、システムは安全です。