ダイジェスト認証は、資格情報をプレーンテキストとして送信すること以外、基本認証とどのように異なりますか?
主な違いは、ユーザー名とパスワードをネットワーク経由でプレーンテキストで送信する必要がないことです。また、サーバーからの1回限りの番号を使用するため、リプレイ攻撃の影響を受けません。
サーバーは、クライアントにユーザー名、レルム、パスワード、およびURIリクエストと組み合わせる1回限りの使用番号(nonce)を提供します。クライアントは、これらすべてのフィールドをMD5ハッシュ方式で実行して、ハッシュキーを生成します。
このハッシュキーをサーバーに送信し、ユーザー名とレルムとともに認証を試みます。
ハッシュキーの生成にはサーバー側の同じメソッドが使用されます。ブラウザーに入力されたパスワードを使用する代わりに、サーバーはユーザーDBからユーザーの予想されるパスワードを検索します。このユーザー名の保存されたパスワードを検索し、同じアルゴリズムを実行して、クライアントが送信したものと比較します。一致する場合はアクセスが許可され、そうでない場合は401 Unauthorized(ログインなしまたはログイン失敗)または403 Forbidden(アクセス拒否)が返されます。
ダイジェスト認証は RFC2617で標準化 です。 Wikipediaでの素敵な概要 があります:
次のように考えることができます。
資格情報のハッシュHA1を取得する唯一の方法は、パスワードを知ることです。サーバーはHA1を認識していますが、それを生成したパスワードは認識していません。 HA1が攻撃者に知られている場合、HA1はシステムに侵入する可能性があります。そのため、ワイヤに送信されません。これを行う前に、ナンスなどに基づくさらなるハッシュが行われ、これはサーバーで行われた同様の計算と一致する必要があります。したがって、サーバーがHA1をプライベートに保つ限り、システムは安全です。