微軟NTLM認(rèn)證協(xié)議的特點(diǎn)講解
原創(chuàng)【51CTO獨(dú)家特稿】NTLM是一個(gè)微軟專用協(xié)議,它基于挑戰(zhàn)/響應(yīng)模型認(rèn)證用戶和計(jì)算機(jī)。NTLM(NT LanMan)是所有Windows NT系列產(chǎn)品都使用的認(rèn)證方式。與它的前任LanMan相似,NTLM使用挑戰(zhàn)/響應(yīng)模型來(lái)證實(shí)客戶端的身份,而不需要在網(wǎng)絡(luò)上發(fā)送口令或散列的口令。NTLM認(rèn)證具有下述特點(diǎn):
NTLM認(rèn)證是微軟專用的NT LAN Manager認(rèn)證,它只適用于Microsoft Internet Explorer。
集成的Windows認(rèn)證的工作方式與消息摘要認(rèn)證相同。
Windows Challenge/Response (NTLM) 是用在包括著Windows操作系統(tǒng)的網(wǎng)絡(luò)中的一種認(rèn)證(authentication)協(xié)議, 也用在stand-alone系統(tǒng)上.
在網(wǎng)絡(luò)環(huán)境中, Microsoft Kerberos 比NTLM添加了更多的安全性. 盡管Microsoft Kerberos 是一個(gè)不錯(cuò)的選擇, NTLM現(xiàn)在還是被支持的. NTLM必須被使用在stand-alone的系統(tǒng)上, 用來(lái)做登錄的認(rèn)證.
NTLM的credential是基于在交互登錄過(guò)程中維護(hù)的數(shù)據(jù)上的, 這里的數(shù)據(jù)包括域名, 用戶名, 還有一個(gè)用戶密碼的單向hash串. NTLM使用加密的challenge/response 協(xié)議來(lái)認(rèn)證一個(gè)用戶, 用戶的密碼不會(huì)被在線路上傳輸. 取明文密碼而代之的是, 系統(tǒng)會(huì)執(zhí)行一個(gè)計(jì)算, 通過(guò)這個(gè)計(jì)算證明他已經(jīng)訪問(wèn)到了安全的NTLM credentials。
網(wǎng)路上的交互式NTLM認(rèn)證典型地涉及到兩個(gè)系統(tǒng): 一個(gè)客戶端系統(tǒng), 在這個(gè)系統(tǒng)上, 用戶請(qǐng)求認(rèn)證; 一個(gè)域控制器, 其中存放著用戶的密碼.
非交互式的認(rèn)證里, 其中一個(gè)已經(jīng)登錄了的用戶要訪問(wèn)一個(gè)資源(比如說(shuō)服務(wù)器應(yīng)用程序), 這里典型地會(huì)涉及到三個(gè)系統(tǒng): 一個(gè)客戶端, 一個(gè)服務(wù)器, 和一個(gè)域控制器. 域控制器會(huì)代替服務(wù)器進(jìn)行authentication的計(jì)算.
下面的步驟展現(xiàn)了一個(gè)NTLM非交互式的認(rèn)證過(guò)程:
用戶提供NTLM credential, 這僅屬于非交互式authentication過(guò)程的部分.
(僅非交互式authentication)一個(gè)用戶訪問(wèn)一個(gè)客戶端計(jì)算機(jī), 提供一個(gè)域名, 用戶名, 和密碼. 客戶端計(jì)算機(jī)會(huì)計(jì)算出一個(gè)加密的密碼哈希值, 并丟掉真實(shí)的密碼.
客戶端把用戶名發(fā)送給服務(wù)器(使用純文本發(fā)送plaintext)
服務(wù)器生成一個(gè)十六個(gè)字節(jié)的隨機(jī)數(shù), 叫做一個(gè)challenge 或 nonce. 并把這個(gè)challenge發(fā)送給客戶端.
客戶端使用用戶密碼的hash來(lái)加密這個(gè)challenge, 然后把這個(gè)加密后的結(jié)果返回給服務(wù)器, 這叫做response.
服務(wù)器發(fā)送下面的三項(xiàng)數(shù)據(jù)給域控制器:
用戶名
發(fā)送給客戶端的Challenge
從客戶端收回來(lái)的Response
域控制器使用用戶名來(lái)從Security Account Manager 數(shù)據(jù)庫(kù)中取得用戶密碼的hash值. 域控制器使用這個(gè)hash值來(lái)加密challenge.
域控制器比較它自己加密的值和從客戶端收來(lái)的加密的值. 如果它們是一樣的, 那么認(rèn)證成功.
域控制器發(fā)送一個(gè)信號(hào)給應(yīng)用程序服務(wù)器, 告訴它說(shuō)這個(gè)用戶的認(rèn)證成功了, 他是某某人. 應(yīng)用程序服務(wù)器確認(rèn)這個(gè)用戶有權(quán)訪問(wèn)自己后, 于是開放某些資源給這個(gè)用戶訪問(wèn).
用戶的應(yīng)用程不能直接訪問(wèn)NTLM security package, 取而代之的是, 它應(yīng)該使用Negotiate security package. 如果authentication涉及到的操作系統(tǒng)允許的話, Negotiate 允許你的應(yīng)用程序來(lái)使用高級(jí)security protocols的優(yōu)勢(shì). 當(dāng)前, Negotiate security package 的選擇包括Kerberos 和NTLM兩種. Negotiate 會(huì)選擇Kerberos, 除非Kerberos不被牽扯到authentication的操作系統(tǒng)支持.
【51CTO獨(dú)家特稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處?!?/p>
【編輯推薦】
- Windows系統(tǒng)中如何完成Kerberos認(rèn)證協(xié)議
- NTFS權(quán)限的兩大要素以及六種方案選擇
- 七步輕松完成NTFS文件系統(tǒng)的權(quán)限審核