跳到主要内容

3.1. The Authentication Service Exchange (认证服务交换)

摘要

消息方向消息类型章节
1. 客户端到 KerberosKRB_AS_REQ5.4.1
2. Kerberos 到客户端KRB_AS_REP 或 KRB_ERROR5.4.2 或 5.9.1

客户端与 Kerberos 认证服务器之间的认证服务 (Authentication Service, AS) 交换由客户端在希望获取给定服务器的认证凭证但当前不持有凭证时启动。在其基本形式中, 客户端的密钥用于加密和解密。此交换通常在登录会话开始时使用, 以获取票据授予服务器的凭证, 随后将用于获取其他服务器的凭证 (请参见第 3.3 节), 而无需进一步使用客户端的密钥。此交换也用于请求不能通过票据授予服务中介的服务的凭证, 而是需要主体密钥的知识, 例如密码更改服务 (密码更改服务拒绝请求, 除非请求者可以证明用户旧密码的知识; 要求此知识可防止有人走到无人看管的会话旁进行未经授权的密码更改)。

此交换本身不提供对用户身份的任何保证。要认证登录到本地系统的用户, 可以首先在 TGS 交换中使用 AS 交换中获得的凭证来获取本地服务器的凭证; 然后这些凭证必须由本地服务器通过成功完成客户端/服务器交换来验证。

AS 交换由两条消息组成: 从客户端到 Kerberos 的 KRB_AS_REQ, 以及作为回复的 KRB_AS_REP 或 KRB_ERROR。这些消息的格式在第 5.4.1、5.4.2 和 5.9.1 节中描述。

在请求中, 客户端发送 (明文) 其自己的身份和它请求凭证的服务器的身份、有关它请求的凭证的其他信息以及随机生成的随机数 (nonce), 可用于检测重放并将回复与匹配的请求关联。此随机数必须 (MUST) 由客户端随机生成并记住, 以便针对预期回复中的随机数进行检查。响应 KRB_AS_REP 包含客户端向服务器呈现的票据以及将由客户端和服务器共享的会话密钥。会话密钥和附加信息使用客户端的密钥加密。KRB_AS_REP 消息的加密部分还包含必须 (MUST) 与 KRB_AS_REQ 消息中的随机数匹配的随机数。

如果没有预认证, 认证服务器不知道客户端实际上是请求中命名的主体。它只是发送回复而不知道或不关心它们是否相同。这是可以接受的, 因为除了在请求中给出身份的主体之外, 没有人能够使用回复。其关键信息使用该主体的密钥加密。然而, 攻击者可以发送 KRB_AS_REQ 消息以获取已知明文以攻击主体的密钥。特别是如果密钥基于密码, 这可能会产生安全暴露。因此初始请求支持可选字段, 可用于传递初始交换可能需要的附加信息。此字段应该 (SHOULD) 用于第 3.1.1 节和第 5.2.7 节中描述的预认证。

可能会发生各种错误; 这些错误由错误响应 (KRB_ERROR) 而不是 KRB_AS_REP 响应指示。错误消息未加密。KRB_ERROR 消息包含可用于将其与它回复的消息关联的信息。KRB_ERROR 消息的内容不受完整性保护。因此, 客户端无法检测重放、伪造或修改。此问题的解决方案将包含在协议的未来版本中。