NTLM使用在Windows NT和Windows 2000 Server(or Later)工作组环境中(Kerberos用在域模式下)。在AD域环境中,如果需要认证Windows NT系统,也必须采用NTLM。NTLM采用一种质询/应答(Challenge/Response)消息交换模式。
步骤一:
用户通过输入Windows账号和密码登录客户端主机。在登录之前,客户端会缓存输入密码的哈希值(NTLM Hash),原始密码会被丢弃,成功登录客户端Windows的用户如果试图访问服务器资源,需要向对方发送一个请求。该请求中包含一个以明文表示的用户名。
步骤二:
服务器接收到请求后,生成一个16位的随机数。这个随机数被称为Challenge。这个Challenge会先被保存起来,然后服务器会将Challenge以明文的形式发送给客户端。
步骤三:
客户端在接收到服务器发回的Challenge后,用在步骤一中保存的密码哈希值(NTLM Hash)对Challenge进行加密,然后再将加密后的Challenge发送给服务器。
步骤四:
服务器接收到客户端发送回来的加密后的Challenge后,会向DC(Domain)发送针对客户端的验证请求。该请求主要包含以下三方面的内容:客户端用户名,原始的Challenge和客户端密码哈希值加密的Challenge。
步骤五、六:
DC会根据AD根据Client的用户名获取该Client账号的密码哈希值,对原始的Challenge进行加密。如果加密后的Challenge和服务器发送的客户端密码哈希值加密的Challenge一致,则意味着用户拥有正确的密码,验证通过,否则验证失败。DC将验证结果发送给服务器,并最终反馈给客户端。