Windows挑战/响应(NTLM)是在运行Windows操作系统和独立系统的系统的网络上使用的身份验证协议。
Microsoft Kerberos 安全软件包比NTLM增加了对网络上的系统的安全性。虽然Microsoft Kerberos是协议的选择,但NTLM仍然得到支持。NTLM还必须用于独立系统上的登录身份验证。有关Kerberos的详细信息,请参阅Microsoft Kerberos。
NTLM凭证基于在交互式登录过程中获得的数据,并由用户密码的域名,用户名和单向散列组成。NTLM使用加密的质询/响应协议来认证用户,而不会通过电线发送用户的密码。相反,请求身份验证的系统必须执行证明其可以访问受保护的NTLM凭据的计算。
通过网络的交互式NTLM认证通常涉及两个系统:用户正在请求认证的客户端系统以及与用户密码有关的信息的域控制器。可能需要允许已登录用户访问资源(如服务器应用程序)的非交互式身份验证通常涉及三个系统:客户端,服务器和代表服务器进行身份验证计算的域控制器。
以下步骤介绍了NTLM非交互式身份验证。第一步提供用户的NTLM凭据,仅作为交互式身份验证(登录)过程的一部分。
- (仅限交互式身份验证)用户访问客户端计算机并提供域名,用户名和密码。客户端计算密码的加密散列,并丢弃实际密码。
- 客户端将用户名发送到服务器(以明文形式)。
- 服务器生成一个16字节随机数,称为挑战或随机数,并将其发送给客户端。
- 客户端使用用户密码的散列加密了此挑战,并将结果返回给服务器。这被称为响应。
-
服务器将以下三个项目发送到域控制器:
- 用户名
- 挑战发送给客户端
- 来自客户的回复
- 域控制器使用用户名从安全帐户管理器数据库中检索用户密码的散列。它使用此密码哈希来加密挑战。
- 域控制器将其计算的加密挑战(在步骤6中)与由客户端计算的响应进行比较(步骤4)。如果它们相同,则验证成功。
您的应用程序不应直接访问NTLM 安全包 ; 相反,它应该使用协商安全包。协商允许您的应用程序利用更高级的安全协议(如果身份验证中涉及的系统支持)。目前,Negotiate安全包在Kerberos和NTLM 之间进行选择。协商选择Kerberos,除非认证中涉及的系统之一不能使用它