Kerberos 身份验证如何工作?

Kerberos 身份验证如何工作?

我试图弄清楚 Kerberos 身份验证的工作原理,我找到的信息总是缺少一些东西,好像其中的一部分是理所当然的。我大致了解这个过程,但缺少一些细节。

获取 TGT:

  1. 首先,用户应该从 KDC 获得 TGT(票证授予票证)——用户发送仅包含其用户名(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

1) 这看起来相当详尽,但我不确定所有的细节。

2) 用户的密码是不够的,因为它必须在两方之间共享,而共享它的只有 KDC 和客户端。如果您要通过网络发送某些东西,即使是加密的,最好也不要有很长的使用寿命。因此,客户端使用会话密钥来请求服务票证(我认为)。而且,KDC 使用会话密钥生成服务票证,因此当客户端获得 LDAP 或 HTTP 服务的票证时,KDC 会生成会话密钥。该会话密钥位于服务票证中,并且服务票证还包含发送给服务提供代理(LDAP 或 HTTP 服务器)的加密消息,其中还包括会话密钥。因此,现在客户端和服务器都共享 KDC 告诉他们双方的临时秘密。当有协议可以使用时,使用此密钥。因此,例如,如果启用了 kerberos,telnet 服务器可以加密网络上的流量。

4) 包括时间,5 分钟的余地是一种确保时钟不必精确同步到毫秒的方法,您可以容忍任何正常级别的网络延迟或短暂中断,但您不能稍后重放请求。去拿一张票,让 NSA 通过网络窃取它,然后在几天/几周/几年后,在暴力破解您的密码或使用后来发现的花哨数学攻击解密后,他们再次使用这张票,这是没有用的。确保票是最近的,可以防止出现这种问题。

会话密钥并非一直使用。例如,如果您使用 kerberos 身份验证连接到 https 网站,通常您会使用 kerberos 进行身份验证,但会话密钥是使用标准 https 方法(即 SSL/TLS)进行协商的

相关内容