【51CTO独家特稿】NTLM是一个微软专用协议,它基于挑战/响应模型认证用户和计算机。NTLM(NT LanMan)是所有Windows NT系列产品都使用的认证方式。与它的前任LanMan相似,NTLM使用挑战/响应模型来证实客户端的身份,而不需要在网络上发送口令或散列的口令。NTLM认证具有下述特点:
NTLM认证是微软专用的NT LAN Manager认证,它只适用于Microsoft Internet Explorer。
集成的Windows认证的工作方式与消息摘要认证相同。
Windows Challenge/Response (NTLM) 是用在包括着Windows操作系统的网络中的一种认证(authentication)协议, 也用在stand-alone系统上.
在网络环境中, Microsoft Kerberos 比NTLM添加了更多的安全性. 尽管Microsoft Kerberos 是一个不错的选择, NTLM现在还是被支持的. NTLM必须被使用在stand-alone的系统上, 用来做登录的认证.
NTLM的credential是基于在交互登录过程中维护的数据上的, 这里的数据包括域名, 用户名, 还有一个用户密码的单向hash串. NTLM使用加密的challenge/response 协议来认证一个用户, 用户的密码不会被在线路上传输. 取明文密码而代之的是, 系统会执行一个计算, 通过这个计算证明他已经访问到了安全的NTLM credentials。
网路上的交互式NTLM认证典型地涉及到两个系统: 一个客户端系统, 在这个系统上, 用户请求认证; 一个域控制器, 其中存放着用户的密码.
非交互式的认证里, 其中一个已经登录了的用户要访问一个资源(比如说服务器应用程序), 这里典型地会涉及到三个系统: 一个客户端, 一个服务器, 和一个域控制器. 域控制器会代替服务器进行authentication的计算.
下面的步骤展现了一个NTLM非交互式的认证过程:
用户提供NTLM credential, 这仅属于非交互式authentication过程的部分.
(仅非交互式authentication)一个用户访问一个客户端计算机, 提供一个域名, 用户名, 和密码. 客户端计算机会计算出一个加密的密码哈希值, 并丢掉真实的密码.
客户端把用户名发送给服务器(使用纯文本发送plaintext)
服务器生成一个十六个字节的随机数, 叫做一个challenge 或 nonce. 并把这个challenge发送给客户端.
客户端使用用户密码的hash来加密这个challenge, 然后把这个加密后的结果返回给服务器, 这叫做response.
服务器发送下面的三项数据给域控制器:
用户名
发送给客户端的Challenge
从客户端收回来的Response
域控制器使用用户名来从Security Account Manager 数据库中取得用户密码的hash值. 域控制器使用这个hash值来加密challenge.
域控制器比较它自己加密的值和从客户端收来的加密的值. 如果它们是一样的, 那么认证成功.
域控制器发送一个信号给应用程序服务器, 告诉它说这个用户的认证成功了, 他是某某人. 应用程序服务器确认这个用户有权访问自己后, 于是开放某些资源给这个用户访问.
用户的应用程不能直接访问NTLM security package, 取而代之的是, 它应该使用Negotiate security package. 如果authentication涉及到的操作系统允许的话, Negotiate 允许你的应用程序来使用高级security protocols的优势. 当前, Negotiate security package 的选择包括Kerberos 和NTLM两种. Negotiate 会选择Kerberos, 除非Kerberos不被牵扯到authentication的操作系统支持.
【51CTO独家特稿,合作站点转载请注明原文译者和出处。】
【编辑推荐】