Kerberos

kerberos 身份驗證如何工作?

  • June 28, 2018

我試圖弄清楚 kerberos 身份驗證是如何工作的,我發現的資訊總是缺少一些東西,就好像它的一部分被認為是理所當然的。我一般都知道這個過程,但缺少一些細節。

獲得 TGT:

  1. 首先,使用者應該從 KDC 獲得 TGT(Ticket Granting Tickets) - 使用者發送的請求僅包含其使用者名 (UPN) 而沒有密碼。提供了一些額外資訊以防止重新發送請求,例如 IP 地址和時間戳。如果需要預認證,則使用使用者密碼對時間進行雜湊處理。
  2. KDC 向使用者發送以下資訊: A. TGT - 帶有時間戳、使用者名、IP 地址和會話密鑰 - TGT 使用只有 KDC 知道的秘密加密,因此任何人都無法更改。

B. 使用者和KDC在以後的通信中使用的會話密鑰。這些東西是使用使用者密碼(KDC 和使用者之間的基本共享秘密)加密的。如果使用了預身份驗證,伺服器將在發回資訊之前檢查時間戳是否有效。 3. 使用者接收資訊並使用其密碼對其進行解密 - 然後將其儲存在其記憶體(kerberos 托盤)中。

獲取 TGS:

  1. 當使用者被請求從服務中驗證自己時,他向 KDC 發送 TGS(票證授予服務)請求,該請求包含 TGT、UPN 和 SPN(服務主體名稱 - 例如網頁的 URI) .
  2. 然後 KDC 解密 TGT 並驗證它的真實性,它與 UPN 對應,來自相同的 IP 地址並且仍然有效(票證具有有效時間段)。
  3. KDC 向使用服務密碼加密的使用者發送 TGS。
  4. 使用者將 TGS 提供給服務 - 它使用自己的密碼對其進行解密。
  5. 身份驗證已完成,因為服務依賴於它的密碼僅在它和 KDC 之間共享這一事實,因此它相信 KDC 較早地對使用者進行了身份驗證。

幾個問題:

  1. 我錯過了什麼還是僅此而已?
  2. 使用者和 KDC 何時使用過會話密鑰?在什麼時候?為什麼有必要?為什麼使用者密碼不夠?
  3. 使用者和服務之間還應該有一個會話密鑰(據我所知) - 何時以及為什麼使用它(與最後一個問題相同)?
  4. Kerberos 在各方之間有 5 分鐘的間隔限制 - 我理解為什麼保持時間同步很重要,因為它被用作我們加密和解密的東西,那麼為什麼任何間隔都可以?為什麼是 5 分鐘?

如果您有任何更正,我會很高興。

提前致謝, 托默

1)這似乎很徹底,我不確定所有細節。

2)使用者的密碼是不夠的,因為它必須在兩方之間共享,並且共享它的只有兩方是 KDC 和客戶端。如果你要通過網路發送一些東西,即使是加密的,如果它沒有很長的使用壽命會更好。所以客戶端使用會話密鑰來請求服務票證(我認為)。而且,KDC 使用會話密鑰生成服務票證,因此當客戶端獲得 LDAP 或 HTTP 服務的票證時,KDC 會生成一個會話密鑰。該會話密鑰在服務票證中,並且服務票證還包含發送給服務提供代理(LDAP 或 HTTP 伺服器)的加密消息,該消息還包括會話密鑰。因此,現在客戶端和伺服器都共享一個 KDC 告訴他們雙方的臨時秘密。當有使用它的協議時使用此密鑰。因此,例如,如果啟用了 kerberos,則可能會說 telnet 伺服器可以通過線路加密流量。

4)包括時間,5分鐘的餘地是確保時鐘不必精確同步到毫秒的一種方式,您可以容忍任何正常水平的網路延遲或短暫的中斷,但您不能稍後重播請求。去拿票是不好的,它被美國國家安全域窺探,然後幾天/幾週/幾年後,在暴力破解你的密碼或使用後來發現的花哨的數學攻擊解密之後,他們去使用票再次。確保票是最近的可以防止這種問題。

會話密鑰並非一直使用。例如,如果您使用 kerberos 身份驗證連接到 https 網站,通常您會使用 kerberos 進行身份驗證,但會話密鑰是使用標準 https 方法(即 SSL/TLS)協商的

引用自:https://serverfault.com/questions/805869