Microsoft NTLM

Windows 质询/响应 (NTLM) 是在网络(包括运行 Windows 操作系统的系统和独立系统)上使用的身份验证协议。

与 NTLM 相比,Microsoft Kerberos 安全包可以为网络上的系统提供更高的安全性。 尽管 Microsoft Kerberos 是所选协议,但仍支持 NTLM。 NTLM 还必须用于独立系统上的登录身份验证。 有关 Kerberos 的详细信息,请参阅 Microsoft Kerberos

NTLM 凭据基于在交互式登录过程中获得的数据,由域名、用户名和用户密码的单向哈希组成。 NTLM 使用加密的质询/响应协议对用户进行身份验证,而不会通过网络发送用户密码。 请求身份验证的系统必须执行一项计算来证明它有权访问受保护的 NTLM 凭据。

通过网络进行交互式 NTLM 身份验证通常涉及两个系统:用户请求身份验证的客户端系统,以及保留与用户密码相关信息的域控制器。 非交互身份验证可能需要允许已登录的用户访问资源(如服务器应用程序)通常涉及三个系统:客户端、服务器和代表服务器执行身份验证计算的域控制器。

以下步骤概述了 NTLM 非交互身份验证。 第一步提供用户的 NTLM 凭据,并且仅在交互式身份验证(登录)过程中发生。

  1. (仅限交互式身份验证)用户访问客户端计算机并提供域名、用户名和密码。 客户端计算密码的加密 哈希,并丢弃实际密码。

  2. 客户端将用户名发送到服务器(以纯文本形式)。

  3. 服务器生成一个 8 字节随机数,称为质询nonce,并将其发送到客户端。

  4. 客户端使用用户密码的哈希加密此质询,并将结果返回到服务器。 这称为响应

  5. 服务器将以下三项发送到域控制器:

    • 用户名
    • 发送到客户端的质询
    • 从客户端接收的响应
  6. 域控制器使用用户名从安全帐户管理器数据库中检索用户密码的哈希。 它使用此密码哈希来加密质询。

  7. 域控制器将计算的加密质询(在步骤 6 中)与客户端计算的响应(步骤 4)进行比较。 如果结果相同,身份验证会成功。

应用程序不应直接访问 NTLM 安全包;而应使用 Negotiate 安全包。 协商允许应用程序利用更高级的安全协议(如果身份验证所涉及的系统支持这些协议 )。 目前,协商安全包在 Kerberos 和 NTLM 之间进行选择。 协商选择 Kerberos,除非身份验证中涉及的系统之一无法使用 Kerberos。