为什么kerberos需要TGT?

why kerberos needs TGT?

我正在学习KDC的设计,发现这个协议需要3轮信息交换。但我认为TGT这一步是重复的,没有必要,因为KDC可以在第一轮发送票证。 那么为什么是第二轮的设计呢?兑换TGT有什么用?

没有必要。它是一项长期优化。

使用 Kerberos,您在 KDC 和客户端之间有两个流程:

  • AS-REQ:将人工提供的凭据交换为票证(例如密码、证书等)。
  • TGS-REQ 将一张 KDC-supplied 票换成另一张票。

AS-REQ 可以请求它想要的任何票证。实际上它只请求 krbtgt。 AS-REQ 旨在评估使用的凭据、在后备目录中查找身份、应用任何策略以及 KDC 认为实际上是昂贵的操作的任何其他操作。凭据 verification/derivation/etc。可能是一项昂贵的操作。在目录中查询诸如(在 Active Directory 的情况下)组成员身份之类的东西非常昂贵。这对客户端来说代价高昂,因为它很可能总是 进行密钥派生,而且对 KDC 来说代价高昂,因为它总是要查询目录。

如果您请求 krbtgt,您将解锁对 TGS-REQ 流的访问权限。

TGS-REQ流程验证krbtgt,在目录中查找请求的服务,并将krbtgt票据的内部内容复制到请求的服务票据中。这快了几个数量级,因为它跳过了 AS-REQ 流程中发生的大部分内容。它仍然查询目录,但与其他所有东西相比,这很便宜。客户端现在不做任何密钥推导。

更重要的是,现在您不再需要在内存中保留长期凭证,因为您拥有 TGT。