Microsoft NTLM

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

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

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

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

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

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

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

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

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

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

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

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

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