天天看點

[Kerberos基礎]-- 簡介

Kerberos簡介

Kerberos協定:

Kerberos協定主要用于計算機網絡​​的身份鑒别(Authentication), 其特點是使用者隻需輸入一次身份驗證資訊就可以憑借此驗證獲得的票據(ticket-grantingticket)通路多個服務,即SSO(Single Sign On)。由于在每個Client和Service之間建立了共享密鑰,使得該協定具有相當的安全性。

條件

先來看看Kerberos協定的前提條件:

如下圖所示,Client與KDC, KDC與Service 在協定工作前已經有了各自的共享密鑰,并且由于協定中的消息無法穿透防火牆,這些條件就限制了Kerberos協定往往用于一個組織的内部,使其應用場景不同于X.509 PKI。

[Kerberos基礎]-- 簡介

過程

Kerberos協定分為兩個部分:

1 . Client向KDC發送自己的身份資訊,KDC從Ticket GrantingService得到TGT(ticket-granting ticket), 并用協定開始前Client與KDC之間的密鑰将TGT加密回複給Client。

此時隻有真正的Client才能利用它與KDC之間的密鑰将加密後的TGT解密,進而獲得TGT。

(此過程避免了Client直接向KDC發送密碼,以求通過驗證的不安全方式)

2. Client利用之前獲得的TGT向KDC請求其他Service的Ticket,進而通過其他Service的身份鑒别。

 Kerberos協定的重點在于第二部分,簡介如下:

[Kerberos基礎]-- 簡介

1.    Client将之前獲得TGT和要請求的服務資訊(服務名等)發送給KDC,KDC中的Ticket Granting Service将為Client和Service之間生成一個Session Key用于Service對Client的身份鑒别。然後KDC将這個Session Key和使用者名,使用者位址(IP),服務名,有效期, 時間戳一起包裝成一個Ticket(這些資訊最終用于Service對Client的身份鑒别)發送給Service, 不過Kerberos協定并沒有直接将Ticket發送給Service,而是通過Client轉發給Service.是以有了第二步。

2.    此時KDC将剛才的Ticket轉發給Client。由于這個Ticket是要給Service的,不能讓Client看到,是以KDC用協定開始前KDC與Service之間的密鑰将Ticket加密後再發送給Client。同時為了讓Client和Service之間共享那個秘密(KDC在第一步為它們建立的Session Key), KDC用Client與它之間的密鑰将Session Key加密随加密的Ticket一起傳回給Client。

3.    為了完成Ticket的傳遞,Client将剛才收到的Ticket轉發到Service. 由于Client不知道KDC與Service之間的密鑰,是以它無法算改Ticket中的資訊。同時Client将收到的Session Key解密出來,然後将自己的使用者名,使用者位址(IP)打包成Authenticator用Session Key加密也發送給Service。

4.    Service 收到Ticket後利用它與KDC之間的密鑰将Ticket中的資訊解密出來,進而獲得Session Key和使用者名,使用者位址(IP),服務名,有效期。然後再用Session Key将Authenticator解密進而獲得使用者名,使用者位址(IP)将其與之前Ticket中解密出來的使用者名,使用者位址(IP)做比較進而驗證Client的身份。

5.    如果Service有傳回結果,将其傳回給Client。

總結

概括起來說Kerberos協定主要做了兩件事

1.    Ticket的安全傳遞。

2.    Session Key的安全釋出。

再加上時間戳的使用就很大程度上的保證了使用者鑒别的安全性。并且利用Session Key,在通過鑒别之後Client和Service之間傳遞的消息也可以獲得Confidentiality(機密性), Integrity(完整性)的保證。不過由于沒有使用非對稱密鑰自然也就無法具有抗否認性,這也限制了它的應用。不過相對而言它比X.509 PKI的身份鑒别方式實施起來要簡單多了。

繼續閱讀