web-dev-qa-db-ja.com

ダイジェスト認証とは何ですか?

ダイジェスト認証は、資格情報をプレーンテキストとして送信すること以外、基本認証とどのように異なりますか?

88
SoftwareGeek

主な違いは、ユーザー名とパスワードをネットワーク経由でプレーンテキストで送信する必要がないことです。また、サーバーからの1回限りの番号を使用するため、リプレイ攻撃の影響を受けません。

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

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

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

ダイジェスト認証は RFC2617で標準化 です。 Wikipediaでの素敵な概要 があります:

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

  1. クライアントがリクエストを行う
  2. クライアントはサーバーからナンスと401認証要求を取得します
  3. クライアントは次の応答配列を返します(ユーザー名、レルム、generate_md5_key(nonce、ユーザー名、レルム、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()の出力をクライアントが送信したものと比較します。それらが一致しない場合、送信されたパスワードは間違っていました。
143
Ian C.

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

HA1 = MD5(username:realm:password)

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

12
Philip Fourie

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

1
Chris Oakley