NetNTLM 和 NTLMSSP 两种协议的认证步骤 及 对应具体的计算例子

有待手动验证:
NetNTLM和NTLMSSP都是Windows操作系统中用于身份验证的协议,它们在不同的应用场景下有不同的使用方式。以下是它们各自的应用场景:
  1. NetNTLM:

NetNTLM是一种用于Windows网络上的身份验证协议,其最常见的应用场景之一就是在企业内部网络中保护敏感数据或资源的安全。以下是一些使用NetNTLM进行身份验证的具体应用:

  • Windows Active Directory: 在Windows域环境中,NetNTLM用于对域成员进行身份验证,确保只有授权的用户才能访问域资源。
  • Microsoft SharePoint: SharePoint是一种Web应用程序,可以通过NetNTLM来实现用户身份验证,确保只有授权的用户才能访问SharePoint中的内容。
  • Microsoft Exchange Server: Exchange Server是一种邮件服务器,可以通过NetNTLM来对用户进行身份验证,确保只有授权的用户才能发送和接收邮件。
  1. NTLMSSP:

NTLMSSP是一种基于NetNTLM协议的身份验证协议,其主要应用场景之一是在Windows远程桌面连接中进行身份验证。以下是一些使用NTLMSSP进行身份验证的具体应用:

  • Microsoft Remote Desktop Connection: 远程桌面连接是一种允许用户从一个计算机连接到另一个计算机的方式。在Windows远程桌面连接中,NTLMSSP用于对用户进行身份验证,确保只有授权的用户才能访问远程计算机。
  • Microsoft SQL Server: SQL Server是一种关系型数据库管理系统,可以通过NTLMSSP来对用户进行身份验证,确保只有授权的用户才能访问数据库。

下面是NetNTLM和NTLMSSP两种协议的认证步骤:

NetNTLM协议的认证步骤如下:

  1. 客户端向服务器发送认证请求。
  2. 服务器返回一个挑战值(challenge)给客户端。
  3. 客户端使用该挑战值、用户密码、用户名和域名计算出响应(response)并发送给服务器。
  4. 服务器使用相同的方式计算出响应,并将其与客户端发送的响应进行比较以验证客户端的身份。

具体计算方法如下:

假设客户端的用户名是"UserA",密码是"Password123",域名是"DomainA",服务器返回的挑战值为"abc123":

首先,需要将用户密码转换成Unicode格式,并加上域名前缀,然后将其转换成UTF-16LE格式的字节序列。例如,"DomainAUserA:Password123"转换成UTF-16LE编码后为:

44 00 6f 00 6d 00 61 00 69 00 6e 00 41 00 55 00 73 00 65 00 72 00 41 00 3a 00 50 00 61 00 73 00 73 00 77 00 6f 00 72 00 64 00 31 00 32 00 33 00

接下来,客户端将挑战值和上面的字节序列拼接在一起,形成一个新的字节序列:

61 62 63 31 32 33 44 00 6f 00 6d 00 61 00 69 00 6e 00 41 00 55 00 73 00 65 00 72 00 41 00 3a 00 50 00 61 00 73 00 73 00 77 00 6f 00 72 00 64 00 31 00 32 00 33 00

然后,客户端使用NTLM哈希函数对该字节序列进行计算,得到一个128位的哈希值。具体使用的哈希算法是MD4。

最后,客户端将该哈希值作为响应发送给服务器。服务器也使用相同的方法计算出哈希值,然后将其与客户端发送的哈希值进行比较以验证客户端的身份。

NTLMSSP协议的认证步骤如下:

  1. 客户端向服务器发送认证请求。
  2. 服务器返回一个挑战值(challenge)给客户端。
  3. 客户端使用该挑战值、用户密码、用户名和域名计算出响应(response)并将其发送给服务器。
  4. 服务器使用相同的方式计算出响应,并将其与客户端发送的响应进行比较以验证客户端的身份。

具体计算方法如下:

假设客户端的用户名是"UserA",密码是"Password123",域名是"DomainA",服务器返回的挑战值为"abc123":

首先,需要将用户密码转换成Unicode格式,并加上域名前缀,然后将其转换成UTF-16LE格式的字节序列。例如,"DomainAUserA:Password123"转换成UTF-16LE编码后为:

44 00 6f 00 6d 00 61 00 69 00 6e 00 41 00 55 00 73 00 65 00 72 00 41 00 3a 00 50 00 61 00 73 00 73 00 77 00 6f 00 72 00 64 00 31 00 32 00 33 00

接下来,客户端将挑战值和上面的字节序列拼接在一起,形成一个新的字节序列:

61 62 63 31 32 33 44 00 6f 00 6d 00 61 00 69 00 6e 00 41 00 55 00 73 00 65 00 72 00 41 00 3a 00 50 00 61 00 73 00 73 00 77 00 6f 00 72 00 64 00 31 00 32 00 33 00

然后,客户端使用NTLMSSP哈希函数对该字节序列进行计算,得到一个128位的哈希值。具体使用的哈希算法是NTLMv2哈希算法。

最后,客户端将该哈希值作为响应发送给服务器。服务器也使用相同的方法计算出哈希值,然后将其与客户端发送的哈希值进行比较以验证客户端的身份。需要注意的是,在NTLMSSP协议中,还有一些额外的步骤用于处理域控制器之间的认证和会话安全性等功能。

posted @ 2023-04-19 22:55  乘于时  阅读(287)  评论(0编辑  收藏  举报