Kerberos簡介
Kerberos協議:
Kerberos協議主要用於電腦網路的身份鑒別(Authentication), 其特點是使用者只需輸入一次身分識別驗證資訊就可以憑藉此驗證獲得的票據(ticket-granting ticket)訪問多個服務,即SSO(Single Sign On)。由於在每個Client和Service之間建立了共用密鑰,使得該協議具有相當的安全性。
條件
先來看看Kerberos協議的前提條件:
Client與KDC, KDC與Service 在協議工作前已經有了各自的共用密鑰,並且由於協議中的訊息無法穿透防火牆,這些條件就限制了Kerberos協議往往用於一個組織的內部, 使其應用情境不同於X.509 PKI。
過程
Kerberos協議分為兩個部分:
1 . Client向KDC發送自己的身份資訊,KDC從Ticket Granting Service得到TGT(ticket-granting ticket), 並用協議開始前Client與KDC之間的密鑰將TGT加密回複給Client。
此時只有真正的Client才能利用它與KDC之間的密鑰將加密後的TGT解密,從而獲得TGT。
(此過程避免了Client直接向KDC發送密碼,以求通過驗證的不安全方式)
2. Client利用之前獲得的TGT向KDC請求其他Service的Ticket,從而通過其他Service的身份鑒別。
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。
kinit - Obtain and cache Kerberos ticket-granting ticket
kinit is used to obtain and cache Kerberos ticket-granting tickets. This tool is similar in functionality to the kinit tool that are commonly found in other Kerberos implementations, such as SEAM and MIT Reference implementations.
The user must be registered as a principal with the Key Distribution Center (KDC) prior to running kinit.
SYNOPSIS
kinit [ commands ] []
總結
概括起來說Kerberos協議主要做了兩件事
1. Ticket的安全傳遞。
2. Session Key的安全發布。
再加上時間戳記的使用就很大程度上的保證了使用者鑒別的安全性。並且利用Session Key,在通過鑒別之後Client和Service之間傳遞的訊息也可以獲得Confidentiality(機密性), Integrity(完整性)的保證。不過由於沒有使用非對稱金鑰自然也就無法具有抗否認性,這也限制了它的應用。不過相對而言它比X.509 PKI的身份鑒別方式實施起來要簡單多了。
具體流程
(注意:此流程使用了對稱式加密;此流程發生在某一個Kerberos領域中;小寫字母c,d,e是客戶機發出的訊息,大寫字母A,B,E,F,G,H是各個伺服器發回的訊息。)
首先,使用者使用客戶機(使用者自己的機器)上的程式登入:
- 使用者輸入使用者ID和密碼到客戶機。
- 客戶機程式運行一個單向函數(大多數為雜湊)把密碼轉換成密鑰,這個就是客戶機(使用者)的"使用者密鑰"(K_client)。受信任的AS通過某些安全的途徑也擷取了與此密鑰相同的密鑰。
隨後,客戶機認證(客戶機從AS擷取票據的票據(TGT)):
- 客戶機向AS發送1條訊息(注意:使用者不向AS發送密鑰(K_client),也不發送密碼):
- 包含使用者ID的明文訊息,例如"使用者Sunny想請求服務"(Sunny是使用者ID)
- AS檢查使用者ID有效性,而後返回2條訊息:
- 訊息A:使用者密鑰(K_client)加密後的"客戶機-TGS工作階段金鑰"(K_TGS-session)(工作階段金鑰用在將來客戶機與TGS的通訊(會話)上)
- 訊息B:TGS密鑰(K_TGS)加密後的"票據授權票據"(TGT)(TGT包括:客戶機-TGS工作階段金鑰(K_TGS-session),使用者ID,使用者網址,TGT有效期間)
- 客戶機用自己的密鑰(K_client)解密A,得到客戶機-TGS工作階段金鑰(K_TGS-session)。(注意:客戶機不能解密訊息B,因為B是用TGS密鑰(K_TGS)加密的)。
然後,服務授權(客戶機從TGS擷取票據(T)):
- 客戶機向TGS發送以下2條訊息:
- 訊息c:即訊息B(K_TGS加密後的TGT),和想擷取的服務的服務ID(注意:不是使用者ID)
- 訊息d:客戶機-TGS工作階段金鑰(K_TGS-session)加密後的"認證符"(認證符包括:使用者ID,時間戳記)
- TGS用自己的密鑰(K_TGS)解密c中的B得到TGT,從而得到AS提供的客戶機-TGS工作階段金鑰(K_TGS-session)。再用這個工作階段金鑰解密d得到使用者ID(認證),而後返回2條訊息:
- 訊息E:伺服器密鑰(K_SS)加密後的"客戶機-伺服器票據"(T)(T包括:客戶機-SS工作階段金鑰(K_SS-session),使用者ID,使用者網址,T有效期間)
- 訊息F:客戶機-TGS工作階段金鑰(K_TGS-session)加密後的"客戶機-SS工作階段金鑰"(K_SS_session)
- 客戶機用客戶機-TGS工作階段金鑰(K_TGS-session)解密F,得到客戶機-SS工作階段金鑰(K_SS_session)。(注意:客戶機不能解密訊息E,因為E是用SS密鑰(K_SS)加密的)。
最後,服務要求(客戶機從SS擷取服務):
- 客戶機向SS發出2條訊息:
- 訊息e:即訊息E
- 訊息g:客戶機-伺服器工作階段金鑰(K_SS_session)加密後的"新認證符"(新認證符包括:使用者ID,時間戳記)
- SS用自己的密鑰(K_SS)解密e/E得到T,從而得到TGS提供的客戶機-伺服器工作階段金鑰(K_SS_session)。再用這個工作階段金鑰解密g得到使用者ID(認證),而後返回1條訊息(確認函:確證身份真實,樂於提供服務):
- 訊息H:客戶機-伺服器工作階段金鑰(K_SS_session)加密後的"新時間戳記"(新時間戳記是:客戶機發送的時間戳記加1)
- 客戶機用客戶機-伺服器工作階段金鑰(K_SS_session)解密H,得到新時間戳記。
- 客戶機檢查時間戳記被正確地更新,則客戶機可以信賴伺服器,並向伺服器(SS)發送服務要求。
- 伺服器(SS)提供服務。
缺陷
- 失敗於單點:它需要中心伺服器的持續響應。當Kerberos服務結束前,沒有人可以串連到伺服器。這個缺陷可以通過使用複合Kerberos伺服器和缺陷認證機制彌補。
- Kerberos要求參與通訊的主機的時鐘同步。票據具有一定有效期間,因此,如果主機的時鐘與Kerberos伺服器的時鐘不同步,認證會失敗。預設設定要求時鐘的時間相差不超過10分鐘。在實踐中,通常用網路時間協議背景程式來保持主機時鐘同步。
- 管理協議並沒有標準化,在伺服器實現工具中有一些差別。RFC 3244描述了密碼更改。
- 因為所有使用者使用的密鑰都儲存於中心伺服器中,危及伺服器的安全的行為將危及所有使用者的密鑰。
- 一個危險客戶機將危及使用者密碼。
Reference:
http://idior.cnblogs.com/archive/2006/03/20/354027.html
http://bey2nd.blog.163.com/blog/static/12063183120141275250466/
http://docs.oracle.com/javase/1.5.0/docs/tooldocs/windows/kinit.htmlhttp://www.bkjia.com/PHPjc/1097745.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1097745.htmlTechArticleKerberos簡介 Kerberos協議: Kerberos協議主要用於電腦網路的身份鑒別(Authentication), 其特點是使用者只需輸入一次身分識別驗證資訊就可以憑藉此驗...