ダイジェスト チャレンジ応答の生成

サーバーからチャレンジを受け取った後、クライアントは InitializeSecurityContext (Digest) 関数を呼び出して Digest チャレンジ応答を作成します。 この関数は、要求されたリソースとチャレンジからのデータに関する情報を使用して MD5 ハッシュ フィンガープリントを生成し、部分的なセキュリティ コンテキストを表すセキュリティ トークンを出力します。 認証を完了するには、クライアントは、チャレンジを発行したサーバーにトークンを返す必要があります。

次の表では、InitializeSecurityContext (Digest) 関数のパラメーターと、Digest チャレンジ応答を構築するときに指定する値について説明します。

パラメーター 説明
fContextReq
クライアントによって要求されたセキュリティ コンテキストの属性。 詳細については、「Digest チャレンジ応答コンテキストの要件」を参照してください。
pszTargetName
HTTP: ターゲット URL を指定する Null で終わる文字列。
SASL: DNS/SPN ターゲットを指定する Null で終わる文字列。
pInput
ダイジェスト SSP に必要な情報を含むバッファー。 詳細については、「Digest チャレンジ応答の入力バッファー」を参照してください。
pfContextAttr
返されたセキュリティ コンテキストでサポートされている属性を受け取ります。 詳細については、「Digest チャレンジ応答コンテキストの要件」を参照してください。
pOutput
サーバーに送り返すセキュリティ トークンを受け取る SECBUFFER_TOKEN 型バッファーのアドレス。

Digest チャレンジ応答コンテキストの要件

コンテキスト要件は、次を決定するフラグです。

  • Microsoft Digest が SASL メカニズムまたは HTTP 認証プロトコルとして機能するかどうか。
  • クライアントとサーバーによって共有されるセキュリティ コンテキストでサポートされる保護の品質。

既定では、Microsoft Digest は SASL メカニズムとして機能します。

コンテキスト要件は、InitializeSecurityContext 関数の fContextReq パラメーターに渡されるフラグとして指定されます。 フラグは、チャレンジ応答の qop ディレクティブを制御することによって、セキュリティ コンテキストの保護の品質に作用します。

既定では、qop ディレクティブは "auth" に設定されています。 qop を "auth-int" に設定するチャレンジ応答を生成するには、次のことが必要です。

  1. Digest チャレンジでは、qop ディレクティブが "auth-int" に設定されている必要があります。

  2. クライアントは、次のフラグを 1 つ以上指定する必要があります。

    • ISC_REQ_INTEGRITY
    • ISC_REQ_REPLAY_DETECT
    • ISC_REQ_SEQUENCE_DETECT

SASL の場合のみ、ISC_REQ_CONFIDENTIALITY フラグを指定し、qop ディレクティブを "auth-conf" に設定してチャレンジ応答を生成します。 このフラグは HTTP 認証に対して有効ではないため、ASC_REQ_HTTP フラグと一緒に使用することはできません。

保護の品質の検証

クライアントは、InitializeSecurityContext 関数の pfContextAttr パラメーターで返されるセキュリティ コンテキスト属性フラグを調べる必要があります。 クライアントは、フラグによって示される保護の品質が目的を満たすのに十分な場合にのみ、チャレンジ応答をサーバーに送信する必要があります。 関連するフラグ は以下の任意の組み合わせを指定できます。

  • ISC_RET_INTEGRITY
  • ISC_RET_REPLAY_DETECT
  • ISC_RET_SEQUENCE_DETECT
  • ISC_RET_CONFIDENTIALITY (SASL コンテキストのみ)

qop ディレクティブの詳細については、「保護と暗号の品質」を参照してください。

チャレンジ応答ディレクティブの詳細については、「Digest チャレンジ応答の内容」を参照してください。