跳到主要内容

5.2 User-Password

5.2. User-Password

Description (描述)

此 Attribute 指示要认证的用户的密码, 或在 Access-Challenge 之后用户的输入。它仅用于 Access-Request 数据包中。

在传输时, 密码是隐藏的。密码首先在末尾填充空值到 16 个八位字节的倍数。对由共享密钥后跟 Request Authenticator 组成的八位字节流计算单向 MD5 哈希。此值与密码的第一个 16 个八位字节段进行 XOR, 并放置在 User-Password Attribute 的 String 字段的前 16 个八位字节中。

如果密码长度超过 16 个字符, 则对由共享密钥后跟第一次 xor 的结果组成的八位字节流计算第二个单向 MD5 哈希。该哈希与密码的第二个 16 个八位字节段进行 XOR, 并放置在 User-Password Attribute 的 String 字段的第二个 16 个八位字节中。

如果需要, 重复此操作, 每个 xor 结果与共享密钥一起使用以生成下一个哈希来对密码的下一个段进行 xor, 最多不超过 128 个字符。

该方法取自 Kaufman, Perlman 和 Speciner [9] 的 "Network Security" 一书第 109-110 页。该方法的更精确解释如下:

将共享密钥称为 S, 将伪随机 128 位 Request Authenticator 称为 RA。将密码分成 16 个八位字节的块 p1, p2 等, 最后一个在末尾填充空值到 16 个八位字节的边界。将密文块称为 c(1), c(2) 等。我们需要中间值 b1, b2 等。

b1 = MD5(S + RA)       c(1) = p1 xor b1
b2 = MD5(S + c(1)) c(2) = p2 xor b2
. .
. .
. .
bi = MD5(S + c(i-1)) c(i) = pi xor bi

String 将包含 c(1)+c(2)+...+c(i), 其中 + 表示连接。

在接收时, 该过程被反转以产生原始密码。

User-Password Attribute 格式的摘要如下所示。字段从左到右传输。

 0                   1                   2
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
| Type | Length | String ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-

Type

2 表示 User-Password。

Length

至少 18, 不大于 130。

String

String 字段的长度在 16 到 128 个八位字节之间, 包括首尾。