118

資格情報をプレーン テキストとして送信する以外に、ダイジェスト認証と基本認証との違いは何ですか?

4

3 に答える 3

206

主な違いは、ユーザー名とパスワードを平文で送信する必要がないことです。また、サーバーからの 1 回限りの番号を使用するため、リプレイ攻撃にも耐性があります。

サーバーは、ユーザー名、レルム、パスワード、および URI 要求と組み合わせて、1 回限り使用できる番号 (ノンス) をクライアントに提供します。クライアントは、これらすべてのフィールドを MD5 ハッシュ メソッドで実行して、ハッシュ キーを生成します。

このハッシュキーをユーザー名とレルムとともにサーバーに送信して、認証を試みます。

サーバー側では、ハッシュキーを生成するために同じ方法が使用されますが、ブラウザーに入力されたパスワードを使用する代わりに、サーバーはユーザー DB からユーザーの予想されるパスワードを検索します。このユーザー名の保存されたパスワードを検索し、同じアルゴリズムを実行して、クライアントが送信したものと比較します。それらが一致する場合、アクセスが許可されます。そうでない場合、401 Unauthorized (ログインなしまたはログイン失敗) または 403 Forbidden (アクセス拒否) が返されます。

ダイジェスト認証はRFC2617 で標準化されていますウィキペディアにその概要があります:

次のように考えることができます。

  1. クライアントがリクエストを行う
  2. クライアントはサーバーからノンスと 401 認証要求を返します
  3. クライアントは次の応答配列を返します (username, realm, generate_md5_key(nonce, username, realm, URI, password_given_by_user_to_browser)) (はい、これは非常に単純化されています)
  4. サーバーはユーザー名とレルムを取得し (さらに、クライアントが要求している URI を認識しています)、そのユーザー名のパスワードを検索します。次に、独自のバージョンの generate_md5_key(nonce, username, realm, URI, password_I_have_for_this_user_in_my_db) を実行します。
  5. 取得した generate_md5() の出力とクライアントが送信した出力を比較し、クライアントが送信した正しいパスワードと一致する場合。一致しない場合は、送信されたパスワードが間違っています。
于 2010-03-05T02:57:35.650 に答える
16

資格情報のハッシュがネットワーク経由で送信されます。

HA1 = MD5(username:realm:password)

ウィキペディアには、このトピックに関する優れた記事があります

于 2010-03-05T02:47:23.407 に答える
1

資格情報のハッシュ HA1 を取得する唯一の方法は、パスワードを知ることです。サーバーは HA1 を認識していますが、HA1 を生成したパスワードは認識していません。HA1 が攻撃者に知られている場合、システムに侵入する可能性があります。したがって、ネットワークに送信されません。これを行う前にナンスなどに基づくさらなるハッシュが行われ、これはサーバーで行われた同様の計算と一致する必要があります。したがって、サーバーが HA1 を非公開にしている限り、システムは安全です。

于 2016-01-07T14:27:18.297 に答える