Windows安全身份驗證是如何工作的?[Kerberos]
最近壹直在折騰安全,Windows認證,非對稱加密,數字證書,數字簽名,TLS/SSL,WS-Security等等。如果時間允許,我很樂意寫壹系列文章與網友分享交流。對於很多讀者來說,今天的討論可能是壹個既熟悉又陌生的話題——Windows身份驗證。目錄1。Kerberos認證介紹。憑票入場。Kerberos身份驗證簡介有兩種Windows身份驗證協議,NTLM(NT LAN Manager)和Kerberos。前者主要用於Windows NT和Windows 2000 Server(或更高版本)工作組環境,後者主要用於Windows 2000 Server(或更高版本)域環境。Kerberos比NTLM更高效、更安全,並且認證過程相對復雜。Kerberos這個名字來源於希臘神話,是冥界守護獸的名字。Kerberos是壹個三頭怪物。之所以用它來命名壹個完整的認證協議,是因為整個認證過程涉及三方:客戶端、服務器和KDC(密鑰分發中心)。在Windows域環境中,KDC的角色由DC(域控制器)扮演。當用戶用壹個域賬號登錄壹臺主機,遠程訪問同域的另壹臺主機時,如何對訪問者和被訪問者進行身份認證(這是壹種雙向認證)?這是Kerberos需要解決的場景。接下來我會盡量用比較直白的語言介紹Kerberos認證的整個過程。Kerberos實際上是壹種基於票證的身份驗證方法。為了訪問服務器的資源,客戶端需要先購買服務器認可的賬單。也就是說,客戶端需要在接入服務器前提前買票,等待服務驗票後才能入場。在此之前,客戶需要先買票,但這張票不能直接購買,需要認購權證。客戶需要在購買門票之前提前獲得認購權證。KDC公司出售該服務器的認購權證和入場券。右圖(點擊放大)基本揭示了Kerberos的整個認證過程。二、如何獲得“認股權證”?首先,我們來看看委托人是如何取得“權證”的。這裏的認購證有壹個專有名稱——TGT(ticket granting ticket),TGT是KDC-KAS (Kerberos認證服務)的壹個重要服務。當用戶嘗試通過輸入域帳戶和密碼登錄主機時,該機器的Kerberos服務將向KDC的認證服務發送認證請求。請求主要包括兩部分,明文形式的用戶名和用於證明訪問者身份的加密認證器(我實在找不到更合適的中文翻譯,這裏的認證器可以理解為只驗證雙計數器提前知道的內容,相當於聯系碼)。當KDC收到請求時,它通過AD獲取用戶的信息。由獲得的密碼信息生成密鑰以解密認證符。如果解密內容與已知內容壹致,則證明所請求的密碼是正確的,即確定了登錄者的真實身份。在成功認證了對方的身份後,許先生生成壹個會話密鑰——登錄會話密鑰,以保證用戶與之間的通信安全,並使用從用戶密碼導出的密鑰進行加密。然後,KAS為用戶TGT創建了壹個“認購權證”。TGT主要包括兩個方面:用戶相關信息和登錄會話密鑰,整個TGT用KDC自己的密鑰加密。最後,由不同密鑰加密的登錄會話密鑰和TGT被返回給客戶端。(以上內容對應流程圖中的步驟1和2。)三、如何通過“認購權證”購買“準考證”?完成上述步驟後,客戶端獲得“訂閱憑證”——TGT和登錄會話密鑰,用於購買同壹域中其他主機的機票,並在本地緩存TGT和登錄會話密鑰。如果它現在需要訪問壹個服務器的資源,它需要用這個TGT從KDC購買相應的入場券。這裏的準考證還有壹個專有名詞——服務票(ST)。具體來說,ST是通過TGS KDC的另壹項服務(門票授予服務)銷售的。客戶端首先向TGS發送st購買請求,主要包括以下內容:客戶端用戶名;認證者;由登錄會話密鑰加密;TGT和被訪問服務器的名稱(實際上是服務)。TGS收到請求後,現在通過自己的密鑰解密TGT,獲得登錄會話密鑰,然後通過登錄會話密鑰解密認證者,從而驗證對方的真實身份。TGS有兩個根本目的:壹是避免用戶的密碼在客戶端和KDC之間頻繁傳輸和竊取。其次,由於密碼屬於長期密鑰(我們壹般不會頻繁更新自己的密碼),用它作為加密密鑰的安全系數肯定小於頻繁變動的短期密鑰。這個短期密鑰就是登錄會話密鑰,它保證了客戶端和KDC之間的通信安全。TGS完成對客戶端的認證後,會生成壹個會話密鑰——服務會話密鑰,用來保證客戶端和服務器之間的通信安全。會話密鑰由登錄會話密鑰加密。然後賣給客戶端需要的入場券——ST . ST主要包括客戶端用戶信息和服務會話密鑰兩個方面,整個ST由服務器密碼導出的密鑰加密。最後,將兩個加密的服務會話密鑰和ST返回給客戶端。(以上內容對應流程圖中的步驟3、4)4。收到TGS回復後,票務準入客戶端解密緩存的登錄會話密鑰,獲得業務會話密鑰。同時,它還獲得了進入服務器的門票-ST。然後它可以在進行服務訪問時使用此ST門票進入。客戶端將緩存服務會話密鑰和ST。但是,收到ST後,服務器如何確保它是通過TGS購買的,而不是自己偽造的?這很好辦。不要忘記,ST是用從您自己的密碼中導出的密鑰加密的。具體操作過程如下:服務請求除了ST之外,還附帶壹個由服務會話密鑰加密的認證器。收到請求後,服務器用從它自己的密碼中導出的秘密密鑰解密st,並從中提取服務會話密鑰。然後,通過提取的服務會話密鑰來解密認證器,並且驗證客戶端的真實身份。事實上,到目前為止,服務器已經完成了對客戶端的認證,但是整個認證過程還沒有結束。說到認證,很多人認為只是服務器和客戶端之間的認證。事實上,在大多數情況下,我們需要的是相互認證——訪問者和受訪者相互驗證對方的身份。現在服務器可以確保客戶端是它所聲稱的,並且客戶端沒有確認它不是釣魚服務。為了解決客戶端對服務器的認證,服務需要用服務會話密鑰再次加密解密後的認證器,並播放給客戶端。客戶端用緩存的服務會話密鑰解密。如果和前面的內容完全壹樣,就可以證明自己正在訪問的服務器和自己有相同的服務會話密鑰。這個會話密鑰不為外人所知(以上內容對應流程圖中的步驟5和6)。以上內容只講述了基於Kerberos的Windows認證的壹般流程,不涉及壹些細節,比如如何保證時間的同步,如何抵抗重放攻擊等。另外,由於Windows底層知識有限,無法保證所有內容完全正確。如果有任何錯誤,請不要猶豫地改正它們。Windows安全身份驗證是如何工作的?[NTLM]