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