チャレンジコード

チャレンジコード

 HTTP認証には、基本認証やダイジェスト認証などがあります。ここでは、ダイジェスト認証に焦点を当てて説明します。

ダイジェスト認証は、HTTPリクエストを送信するクライアントと、リクエストを受信するサーバーの両方が、暗号化されたチャレンジコードを共有することによって、セキュアな認証を実現する方式です。

以下は、ダイジェスト認証の流れです。

  1. クライアントがサーバーにリクエストを送信すると、サーバーはレスポンスとして、ランダムなチャレンジコードを生成し、WWW-Authenticateヘッダーにチャレンジコードを含めてクライアントに返します。
  2. クライアントは、ユーザー名とパスワードを含めたリクエストを再度サーバーに送信します。この際、Authorizationヘッダーに、ダイジェスト認証で必要な情報を含めます。
  3. サーバーは、クライアントが送信した情報をもとに、暗号化されたレスポンス値を生成します。
  4. クライアントは、レスポンス値をもとに、ハッシュ関数を使用して、チャレンジコードとパスワードを含めたダイジェストを計算します。
  5. クライアントは、計算されたダイジェストをAuthorizationヘッダーに含めてサーバーに送信します。
  6. サーバーは、クライアントが送信したダイジェストを計算し、自身が生成したレスポンス値と照合します。照合が成功した場合、クライアントのリクエストを受け付けます。

 ダイジェスト認証では、クライアントがパスワードを暗号化することができるため、基本認証よりもセキュリティが高いとされています。ただし、暗号化された情報がネットワーク上を流れるため、中間者攻撃などのリスクが存在します。そのため、SSL/TLSなどの暗号化通信を併用することが推奨されています。