跳到主要内容

3.5. The KRB_PRIV Exchange (KRB_PRIV 交换)

3.5. The KRB_PRIV Exchange (KRB_PRIV 交换)

KRB_PRIV 消息可以 (MAY) 由需要机密性和检测交换消息修改能力的客户端使用。它通过加密消息并添加控制信息来实现这一点。

3.5.1. KRB_PRIV 消息的生成

当应用程序希望发送 KRB_PRIV 消息时, 它收集其数据和适当的控制信息 (在第 5.7.1 节中指定) 并在加密密钥 (通常是通过子密钥协商的最后一个密钥, 或者如果没有发生协商则是会话密钥) 下加密它们。作为控制信息的一部分, 客户端必须 (MUST) 选择使用时间戳或序列号 (或两者); 有关使用哪个的指南, 请参阅第 3.4.1 节中的讨论。在用户数据和控制信息被加密后, 客户端将密文和一些"信封"信息传输给接收者。

3.5.2. KRB_PRIV 消息的接收

当应用程序接收到 KRB_PRIV 消息时, 它按如下方式验证它。如果发生任何错误, 将报告错误代码供应用程序使用。

首先通过验证协议版本和类型字段是否分别匹配当前版本和 KRB_PRIV 来检查消息。不匹配会生成 KRB_AP_ERR_BADVERSION 或 KRB_AP_ERR_MSG_TYPE 错误。然后应用程序解密密文并处理结果明文。如果解密显示数据已被修改, 则生成 KRB_AP_ERR_BAD_INTEGRITY 错误。

发送者的地址必须 (MUST) 包含在控制信息中; 接收者验证操作系统报告的发送者地址是否与消息中的发送者地址匹配。如果指定了接收者地址或接收者需要地址, 则接收者的地址之一也必须 (MUST) 作为接收者地址出现在消息中。如果由于网络地址转换, 发送者或接收者的地址可能不匹配消息中的地址, 则应用程序可以 (MAY) 编写为使用方向地址类型的地址来代替实际网络地址。

任一情况的匹配失败都会生成 KRB_AP_ERR_BADADDR 错误。为了与网络地址转换一起工作, 实现可以 (MAY) 对发送者地址使用第 7.1 节中定义的方向地址类型, 并且不包括接收者地址。

接下来检查时间戳和 usec 和/或序列号字段。如果预期时间戳和 usec 但不存在, 或者如果它们存在但不是当前的, 则生成 KRB_AP_ERR_SKEW 错误。如果服务器名称以及来自 Authenticator 的客户端名称, 时间和微秒字段与最近看到的任何此类元组匹配, 则生成 KRB_AP_ERR_REPEAT 错误。如果包含不正确的序列号, 或者如果预期序列号但不存在, 则生成 KRB_AP_ERR_BADORDER 错误。如果既不存在时间戳和 usec 也不存在序列号, 则生成 KRB_AP_ERR_MODIFIED 错误。

如果所有检查都成功, 应用程序可以假定消息是由其对等方生成的, 并且是安全传输的 (入侵者看不到未加密的内容)。