ASP.Net Authentication and Authorization でこのリンクを読んでいましたが、これらの5つのステップでNTLM認証について説明しました。
クライアントはユーザー名とパスワードをサーバーに送信します。
サーバーがチャレンジを送信します。
質問:
公式ソース の表現は次のとおりです。
次の手順は、NTLM非対話型認証の概要を示しています。最初の手順では、ユーザーのNTLM資格情報を提供し、対話型認証(ログオン)プロセスの一部としてのみ実行されます。
- (インタラクティブ認証のみ)ユーザーはクライアントコンピューターにアクセスし、ドメイン名、ユーザー名、パスワードを入力します。クライアントはパスワードの暗号化ハッシュを計算し、実際のパスワードを破棄します。
- クライアントはユーザー名をサーバーに(プレーンテキストで)送信します。
- サーバーは、チャレンジまたはノンスと呼ばれる16バイトの乱数を生成し、それをクライアントに送信します。
- クライアントは、ユーザーのパスワードのハッシュを使用してこのチャレンジを暗号化し、サーバーに結果を返します。これは応答と呼ばれます。
- サーバーはドメインコントローラーに次の3つのアイテムを送信します:
- ユーザー名
- クライアントに送信されたチャレンジ
- クライアントから受け取った応答
- ドメインコントローラーは、ユーザー名を使用して、セキュリティアカウントマネージャーデータベースからユーザーのパスワードのハッシュを取得します。このパスワードハッシュを使用してチャレンジを暗号化します。
- ドメインコントローラーは、(ステップ6で)計算した暗号化されたチャレンジを、クライアント(ステップ4)で計算した応答と比較します。それらが同一の場合、認証は成功します。
したがって、チャレンジは、クライアントとDC)によってアカウントパスワードのハッシュで暗号化され、DCで比較されるサーバー生成メッセージです。
暗号化の方法は、NTLMのバージョンとサーバーの設定によって異なります。
Wikipedia からのビットです:
LMv2とNTv2はどちらも、ユーザーのパスワードとその他の識別情報のNTハッシュを使用して、クライアントとサーバーのチャレンジをハッシュします。正確な公式は、SAMまたはADに格納されているNTハッシュから始まり、ユーザー名とドメイン名であるHMAC-MD5を使用してハッシュし続けることです。