web-dev-qa-db-ja.com

ステップごとのNTLM認証について

ASP.Net Authentication and Authorization でこのリンクを読んでいましたが、これらの5つのステップでNTLM認証について説明しました。

  1. クライアントはユーザー名とパスワードをサーバーに送信します。

  2. サーバーがチャレンジを送信します。

  3. クライアントは24バイトの結果でチャレンジに応答します。
  4. サーバーは、ドメインコントローラーにアクセスして、応答が適切に計算されているかどうかを確認します。
  5. すべてが適切な場合は、リクエストを許可します。

質問:

  1. クライアントがユーザー名とパスワードを送信した後、何が起こっているのか理解できません。特に「チャレンジ」と「24バイトの結果」という言葉
  2. ユーザー名/パスワードをサーバーに送信する際の暗号化方法はどれですか?
6
one

公式ソース の表現は次のとおりです。

次の手順は、NTLM非対話型認証の概要を示しています。最初の手順では、ユーザーのNTLM資格情報を提供し、対話型認証(ログオン)プロセスの一部としてのみ実行されます。

  1. (インタラクティブ認証のみ)ユーザーはクライアントコンピューターにアクセスし、ドメイン名、ユーザー名、パスワードを入力します。クライアントはパスワードの暗号化ハッシュを計算し、実際のパスワードを破棄します。
  2. クライアントはユーザー名をサーバーに(プレーンテキストで)送信します。
  3. サーバーは、チャレンジまたはノンスと呼ばれる16バイトの乱数を生成し、それをクライアントに送信します。
  4. クライアントは、ユーザーのパスワードのハッシュを使用してこのチャレンジを暗号化し、サーバーに結果を返します。これは応答と呼ばれます。
  5. サーバーはドメインコントローラーに次の3つのアイテムを送信します:
    • ユーザー名
    • クライアントに送信されたチャレンジ
    • クライアントから受け取った応答
  6. ドメインコントローラーは、ユーザー名を使用して、セキュリティアカウントマネージャーデータベースからユーザーのパスワードのハッシュを取得します。このパスワードハッシュを使用してチャレンジを暗号化します。
  7. ドメインコントローラーは、(ステップ6で)計算した暗号化されたチャレンジを、クライアント(ステップ4)で計算した応答と比較します。それらが同一の場合、認証は成功します。

したがって、チャレンジは、クライアントとDC)によってアカウントパスワードのハッシュで暗号化され、DCで比較されるサーバー生成メッセージです。

暗号化の方法は、NTLMのバージョンとサーバーの設定によって異なります。

Wikipedia からのビットです:

LMv2とNTv2はどちらも、ユーザーのパスワードとその他の識別情報のNTハッシュを使用して、クライアントとサーバーのチャレンジをハッシュします。正確な公式は、SAMまたはADに格納されているNTハッシュから始まり、ユーザー名とドメイン名であるHMAC-MD5を使用してハッシュし続けることです。

9
Grigory Sergeev