隨著信息技術及相關應用的不斷普及,用戶每天需要登錄不同的信息系統,如WEB服務器、郵件服務器、數據庫服務器及各種應用服務器等。
傳統的認證機制采用基于用戶名/密碼的分散管理,即用戶通過網絡世界的身份標識來訪問各種資源,不同系統生成的身份標識無法相互傳遞,導致用戶必須通過每個系統單獨的用戶名和密碼進行來認證方能進入系統。
傳統認證機制存在兩方面安全隱患:一是基于用戶名/密碼的認證方式安全強度不高;二是大量的用戶名/密碼給用戶帶來了額外的安全管理問題。在傳統認證機制逐漸無法滿足用戶需求后,新的更具安全性的認證機制由此出現--單點登錄技術。該技術在網絡資源使用過程中更為高效、安全并且更加簡便。
Kerberos是目前使用最廣泛的單點登錄協議之一,它利用集中式認證取代分散認證,通過減少用戶身份認證次數,減輕服務器負擔;同時使用對稱密碼算法實現通過可信第三方的認證服務。
Kerberos的運行環境由密鑰分配中心(KDC)、應用服務器和客戶端3個部分組成。
△ Kerberos運行環境示意圖
· KDC是整個系統的核心部分,負責維護所有用戶的賬戶信息。
KDC提供認證服務(AS)和會話授權服務(TGS)。認證服務(AS)對用戶的身份進行初始認證,若認證通過便給用戶發放授權票據(TGT);用戶使用該票據可訪問會話授權服務(TGS),從而獲得訪問應用服務器時所需的服務票據(ST)。
· 應用服務器接受用戶的服務訪問請求,驗證用戶身份,并向合法用戶提供所請求的服務。
· 客戶端在用戶登錄時發送各種請求信息,并接收從KDC返回的信息。
Kerberos基本認證過程可以分為3個階段,分別由3組消息來完成。
第一階段 獲得票據許可票據
本階段,用戶登錄客戶端請求服務,認證服務器(AS)在數據庫中驗證用戶的訪問權限,生成票據許可票據和會話密鑰。
1、用戶從客戶端向AS發送包含用戶、服務器名和隨機數N的消息KRB_AS_REQ。
2、AS驗證C的身份和訪問權限后,隨機生成一個加密密鑰作為下一階段客戶方與TGS通信的會話密鑰:生成一個包含客戶方、會話密鑰以及開始和失效時間等信息的TGT,用TGS的密鑰進行加密;AS將會話密鑰和N用客戶端的密鑰K加密,并與TGT一起構成消息KRB_AS_REP,發送給客戶端。客戶端通過用戶口令變換出K,獲得會話密鑰和N,根據N驗證該消息是新鮮的。
第二階段 獲得服務許可票據
本階段,客戶端將票據許可票據以及包含用戶名稱,網絡地址和時間的鑒別符發往票據授權服務器TGS,票據授權服務器TGS對票據和鑒別符進行解密,驗證請求,然后生成請求服務許可票據。
1、客戶端向TGS發送TGT、需要訪問的服務器名、保證消息新鮮的N、以及用戶會話密鑰簽名的客戶端認證信息,防止數據在傳輸過程中被篡改、每次客戶端要訪問某服務時,必須首先生成一個新的認證信息(鑒別符),該信息包括客戶端名、主機地址、客戶端主機時間,并且最終使用會話密鑰加密。
2、TGS用會話密鑰驗證TGT后,獲取服務器名,從數據庫獲得服務器密鑰KS,隨機生成客戶端與應用之間的通信會話密鑰和服務許可票據。使用會話密鑰加密N和應用會話密鑰與新產生的服務許可密鑰一起發送給客戶端。
第三階段 獲得服務
客戶端將服務許可票據和認證信息發送給服務器,服務器驗證票據和認證信息中的相匹配,允許訪問服務。如果需要雙向鑒別,服務器返回一個認證信息。
1、客戶端向服務器發送認證信息,并提交服務許可票據。
2、應用通過加密獲得客戶端的時間表及,同時將這些信息用應用會話密鑰加密后發送客戶端,客戶端保留最近接收到的時間標記最大值,以防止重放攻擊。
Kerberos認證系統雖然在網絡環境中有著廣泛應用,但也存在局限性。
首先,協議中的認證信息依賴于時間標記來實現抗重放攻擊,這就要求使用該協議進行認證的計算機需要時間同步,而嚴格的時間同步需要有時間服務器,因此時間服務器的安全至關重要。
其次,協議認證的基礎是通信方都無條件信任KDC,一旦其安全受到影響,將會威脅整個認證系統的安全,同時容易形成系統性能的瓶頸。