逐步了解 NTLM 身份验证

信息安全 验证 ntlm
2021-08-21 03:22:13

我正在阅读有关ASP.Net 身份验证和授权的链接,这 5 个步骤用于解释 NTLM 身份验证。

  1. 客户端将用户名和密码发送到服务器。

  2. 服务器发送质询。

  3. 客户端以 24 字节结果响应质询。
  4. 服务器通过联系域控制器检查响应是否正确计算。
  5. 如果一切正常,它就会批准请求。

问题:

  1. 在客户端发送用户名和密码后,我无法理解发生了什么。尤其是“挑战”和“24字节结果”这两个词
  2. 向服务器发送用户名/密码时使用哪种加密方法?
1个回答

以下是官方来源的措辞

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

  1. (仅限交互式身份验证)用户访问客户端计算机并提供域名、用户名和密码。客户端计算密码的加密哈希并丢弃实际密码。
  2. 客户端将用户名发送到服务器(以明文形式)。
  3. 服务器生成一个 16 字节的随机数,称为挑战或随机数,并将其发送给客户端。
  4. 客户端使用用户密码的哈希加密这个挑战并将结果返回给服务器。这称为响应。
  5. 服务器向域控制器发送以下三项:
    • 用户名
    • 发送给客户端的挑战
    • 从客户端收到的响应
  6. 域控制器使用用户名从 Security Account Manager 数据库中检索用户密码的哈希值。它使用此密码哈希来加密挑战。
  7. 域控制器将其计算的加密质询(在步骤 6 中)与客户端计算的响应(在步骤 4 中)进行比较。如果它们相同,则认证成功。

因此,挑战是服务器生成的消息,由客户端和 DC 使用帐户密码的哈希加密,并在 DC 上进行比较。

加密方法在 NTLM 版本和不同服务器设置之间是可变的。

这是维基百科的一些内容:

LMv2 和 NTv2 都使用用户密码和其他识别信息的 NT 哈希对客户端和服务器质询进行哈希处理。确切的公式是从存储在 SAM 或 AD 中的 NT 哈希开始,然后使用 HMAC-MD5 继续对用户名和域名进行哈希处理。