Ticket-Granting 票证
由于 Kerberos 协议 最初设计,因此用户的主密钥派生自用户提供的密码。 当用户登录时,用户工作站上的 Kerberos 客户端接受用户的密码,并通过单向 哈希 函数传递文本将其转换为加密密钥。 生成的哈希是用户 的主密钥。 客户端使用此 主密钥 解密从 KDC 收到的 会话密钥 。
原始 Kerberos 设计的问题在于,每次从 KDC 解密会话密钥时,客户端都需要用户的主密钥。 这意味着客户端必须在每个客户端/服务器交换开始时要求用户输入密码,或者客户端必须将用户的密钥存储在工作站上。 频繁中断用户太具有侵入性。 在工作站上存储密钥可能会破坏从用户密码派生的密钥,而该密钥是长期密钥。
Kerberos 协议解决此问题的办法是让客户端从 KDC 获取临时密钥。 此临时密钥仅适用于此 登录会话。 当用户登录时,客户端请求 KDC 的票证,就像请求任何其他服务的票证一样。 KDC 通过为特殊服务器(KDC 的完整票证授予服务)创建登录会话密钥和票证来做出响应。 登录会话密钥的一个副本嵌入到票证中,票证使用 KDC 的主密钥进行加密。 使用派生自用户登录密码的用户主密钥加密登录会话密钥的另一个副本。 票证和加密的会话密钥都发送到客户端。
当客户端收到 KDC 的答复时,它会使用派生自用户密码的用户主密钥解密登录会话密钥。 客户端不再需要从用户密码派生的密钥,因为客户端现在将使用登录会话密钥来解密它从 KDC 获取的任何服务器会话密钥的副本。 客户端将登录会话密钥存储在其票证缓存中,以及 KDC 的完整票证授予服务的票证。
完整票证授予服务的票证称为票证授予票证 (TGT) 。 当客户端要求 KDC 提供到服务器的票证时,它会以验证器消息和票证(在本例中为 TGT)的形式提供 凭据 ,就像向任何其他服务提供凭据一样。 票证授予服务使用其主密钥打开 TGT,提取此客户端的登录会话密钥,并使用登录会话密钥加密客户端的服务器会话密钥副本。