跳到主要内容

5.6. KRB_SAFE 消息规范

5.6. KRB_SAFE Message Specification​

本节规定了一种消息的格式,应用(客户端或服务器)的任一方都可使用该消息向其对端发送一条防篡改(tamper-proof)消息。它假定此前已经交换过会话密钥(例如,通过使用 KRB_AP_REQ/KRB_AP_REP 消息)。

5.6.1. KRB_SAFE 定义​

KRB_SAFE 消息包含用户数据,以及一个使用最近通过子密钥协商得到的加密密钥(若未发生协商,则使用会话密钥)计算得到的抗碰撞(collision-proof)校验和。消息字段如下:

   KRB-SAFE        ::= [APPLICATION 20] SEQUENCE {
pvno [0] INTEGER (5),
msg-type [1] INTEGER (20),
safe-body [2] KRB-SAFE-BODY,
cksum [3] Checksum
}
   KRB-SAFE-BODY   ::= SEQUENCE {
user-data [0] OCTET STRING,
timestamp [1] KerberosTime OPTIONAL,
usec [2] Microseconds OPTIONAL,
seq-number [3] UInt32 OPTIONAL,
s-address [4] HostAddress,
r-address [5] HostAddress OPTIONAL
}

pvno 和 msg-type

这些字段已在第 5.4.1 节中描述。msg-type 为 KRB_SAFE。

safe-body

此字段是 KRB-SAFE 消息主体的占位符。

cksum

此字段包含应用数据的校验和,使用密钥用途值 15 计算。

该校验和计算于 KRB-SAFE 序列的编码之上。首先将 cksum 设为一个类型为零、长度为零的值,然后基于 KRB-SAFE 序列的编码计算校验和。接着,将校验和设为该计算的结果。最后,再次对 KRB-SAFE 序列进行编码。此方法虽然与 RFC 1510 中规定的不同,但符合现有实践。

user-data

此字段是 KRB_SAFE 和 KRB_PRIV 消息的一部分,包含从发送方传递给接收方的应用特定数据。

timestamp

此字段是 KRB_SAFE 和 KRB_PRIV 消息的一部分。其内容为消息发送方所知的当前时间。通过检查时间戳,消息接收方能够确认它是最近生成的,而非重放。

usec

此字段是 KRB_SAFE 和 KRB_PRIV 头部的一部分。它包含时间戳的微秒部分。

seq-number

此字段已在第 5.3.2 节中描述。

s-address

发送方地址。

此字段指定消息发送方正在使用的地址。

r-address

此字段指定消息接收方正在使用的地址。对于某些用途(例如广播协议)它可以省略,但接收方可以任意拒绝此类消息。此字段与 s-address 一起,可用于帮助检测被错误地或恶意地投递到错误接收方的消息。