2015年2月2日 星期一

Kerberos security


組成:
  • 憑證發放中心KDC
    • 身份鑑別伺服器AS(Authentication Server)
    • 通行證簽發中心TGS(Ticket Granting Server)
  • 使用者端(client)
  • 伺服器端(service server)

運作程序(簡化版):
  1. Client向Ticket Granting Server(TGS) 要求一張"通行證"
  2. TGS回傳給Client一個”加密”過的通行證, 只有對應Client知道解密方式, 以此確保唯有正確的Client才可以解密, 得到通行證
  3. TGS會把通行證“Client ID“有效期限”“時間戳記”...etc. 包裝成一個最終Ticket, 寄給Service server, 進行最後的認證

詳細運作程序:
首先,用戶使用客戶機(用戶自己的機器)上的程序登錄:
  1. 用戶輸入用戶ID和密碼到客戶機。
  2. 客戶機程序運行一個單向函數(大多數為雜湊)把密碼轉換成密鑰,這個就是客戶機(用戶)的"用戶密鑰"(K_client)。受信任的AS通過某些安全的途徑也獲取了與此密鑰相同的密鑰。
隨後,客戶機認證(客戶機從AS獲取票據的票據(TGT)):
  1. 客戶機向AS發送1條消息(注意:用戶不向AS發送密鑰(K_client),也不發送密碼):
    • 包含用戶ID的明文消息,例如"用戶Sunny想請求服務"(Sunny是用戶ID)
  2. AS檢查用戶ID有效性,而後返回2條消息:
    • 消息A:用戶密鑰(K_client)加密後的"客戶機-TGS會話密鑰"(K_TGS-session)(會話密鑰用在將來客戶機與TGS的通信(會話)上)
    • 消息B:TGS密鑰(K_TGS)加密後的"票據授權票據"(TGT)(TGT包括:客戶機-TGS會話密鑰(K_TGS-session),用戶ID,用戶網址,TGT有效期)
  3. 客戶機用自己的密鑰(K_client)解密A,得到客戶機-TGS會話密鑰(K_TGS-session)。(注意:客戶機不能解密消息B,因為B是用TGS密鑰(K_TGS)加密的)。
然後,服務授權(客戶機從TGS獲取票據(T)):
  1. 客戶機向TGS發送以下2條消息:
    • 消息c:即消息B(K_TGS加密後的TGT),和想獲取的服務的服務ID(注意:不是用戶ID)
    • 消息d:客戶機-TGS會話密鑰(K_TGS-session)加密後的"認證符"(認證符包括:用戶ID,時間戳)
  2. 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)
  3. 客戶機用客戶機-TGS會話密鑰(K_TGS-session)解密F,得到客戶機-SS會話密鑰(K_SS_session)。(注意:客戶機不能解密消息E,因為E是用SS密鑰(K_SS)加密的)。
最後,服務請求(客戶機從SS獲取服務):
  1. 客戶機向SS發出2條消息:
    • 消息e:即消息E
    • 消息g:客戶機-伺服器會話密鑰(K_SS_session)加密後的"新認證符"(新認證符包括:用戶ID,時間戳)
  2. SS用自己的密鑰(K_SS)解密e/E得到T,從而得到TGS提供的客戶機-伺服器會話密鑰(K_SS_session)。再用這個會話密鑰解密g得到用戶ID(認證),而後返回1條消息(確認函:確證身份真實,樂於提供服務):
    • 消息H:客戶機-伺服器會話密鑰(K_SS_session)加密後的"新時間戳"(新時間戳是:客戶機發送的時間戳加1)
  3. 客戶機用客戶機-伺服器會話密鑰(K_SS_session)解密H,得到新時間戳。
  4. 客戶機檢查時間戳被正確地更新,則客戶機可以信賴伺服器,並向伺服器(SS)發送服務請求。
  5. 伺服器(SS)提供服務。









沒有留言:

張貼留言