Kerberos 的工作原理

Kerberos 通常被称为第三方可信认证服务,这意味着其所有客户机都信任 Kerberos 对另一个客户机身份的判断。 Kerberos 保存着一个包含它的所有用户及其私用密钥的数据库。

要确保 Kerberos 值得信任,需要在一台专用计算机上运行认证和票证授予服务器。 确保只有管理员能直接或通过网络访问此计算机。 同时将在此计算机上运行的(网络)服务的数目降到最低 - 甚至可以不运行 sshd。

首次接触

在首次接触 Kerberos 时,您的操作与在常规网络系统进行的任何登录过程类似。 输入您的用户名。 这一信息和票证授予服务的名称被发送到身份验证服务器 (Kerberos)。 如果认证服务器确定了您的身份,则它会生成一个随机的会话密钥,供以后在客户机和票证授予服务器之间使用。 身份验证服务器现在将为票证授予服务器准备一个票证。 该票证包含以下信息 - 都用会话密钥加密过,该密钥只有认证服务器和授予票证的服务器知道:

  • 客户机和票证授予服务器的名称

  • 当前时间

  • 为此票证指派的有效期

  • 客户机的 IP 地址

  • 新生成的会话密钥

随后,还是以加密形式将此票证与会话密钥一起发送回客户机,但这次使用的是客户机的私用密钥。 只有 Kerberos 和客户机知道此私用密钥,因为它是从您的用户密码派生的。 由于客户机已经收到了此响应,计算机将提示您输入密码。 此密码被转换为一个密钥,利用它可解密认证服务器所发送的包。 然后““解开””此包,并将密码和密钥从工作站的内存中删除。 只要没有超过为用于获取其他票证的那个票证指定的有效期,工作站就能证明您的身份。

请求服务

要从网络中的任何服务器请求服务,客户机应用程序都需要向服务器证明其身份。 因此,此应用程序生成一个认证器。 认证器包含以下部分:

  • 客户机的主体

  • 客户机的 IP 地址

  • 当前时间

  • 校验和(由客户机选择)

所有这些信息都使用客户机为这个特殊服务器接收到的会话密钥进行了加密。 用于服务器的身份验证器和票证会被发送到该服务器。 该服务器使用自己的会话密钥副本来解密认证器,而该认证器为它提供所需的与请求其服务的客户机相关的所有信息,然后服务器将这些信息与票证中包含的信息进行对比。 服务器将检查票证和认证器是否来自同一客户机。

如果在服务器端没有采取任何安全措施,则这一阶段是回放攻击的理想目标。某些人可能试图重发先前从网络上窃取的请求。 为防止出现这种情况,服务器将不接受具有先前已收到过的时戳和票证的任何请求。 此外,忽略时间戳与接收请求时的时间相差太大的请求。

相互身份验证

Kerberos 认证可以双向使用。 这不仅是客户机是否是它所声称的那台客户机的问题。服务器本身也应能够向请求其服务的客户机认证自己。 因此,它本身也将发送某种认证器。 它将在客户机的身份验证器中接收的校验和加 1,然后使用它和客户机共享的会话密钥对其加密。 客户机将此响应作为对服务器的真实性的校验,然后它们开始协作。

票证授予 - 联系所有服务器

设计票证一次用于一个服务器。 这意味着您每次请求其他服务都必须获得新的票证。Kerberos 实施了一种机制来获取用于各个服务器的票证。 这种服务被称为“票证授予服务”。 票证授予服务与前面提到的任何服务一样,因此也使用已介绍过的相同的访问协议。 当应用程序需要一个尚未请求过的票证时,就会联系票证授予服务器。 此请求包含以下部分:

  • 被请求的主体

  • 票证授予票证

  • 认证器

与任何其他服务器一样,票证授予服务器现在将检查票证授予票证和身份验证器。 如果确定它们有效,票证授予服务器将构建一个将在原始客户机和新服务器之间使用的新会话密钥。 然后构建用于新服务器的票证,其中包含以下信息:

  • 客户机的主体

  • 服务器的主体

  • 当前时间

  • 客户机的 IP 地址

  • 新生成的会话密钥

为新票证指派一个有效期,该有效期是票证授予票证的剩余有效期和服务的默认有效期二者中较短的一个。 客户机接收此票证和会话密钥,它们是由票证授予服务发送的,但这次使用随原始票证授予票证一起提供的会话密钥来对响应进行加密。 当联系新服务时,客户机可以解密此响应而不需要用户的密码。 Kerberos 从而可以一个接一个地获取用于客户机的票证,而无需在登录时多次麻烦用户。

与 Windows 2000 的兼容性

Windows 2000 中包含了 Kerberos 5 的 Microsoft 实施。 因为 SUSE Linux EnterpriseŽ 使用 Kerberos 5 的 MIT 实现,请在 MIT 文档中寻找有用信息和指南。请参见第 45.4 节 “有关详细信息”