contents
下一页: CHAP 密钥文件 上一级: 使用 PPP 认证 上一页: 使用 PPP 认证

CHAP 与 PAP

使用 PPP,每个系统都可以要求其对等方使用两种认证协议之一进行身份验证。这两种协议分别是密码认证协议 (PAP) 和挑战握手认证协议 (CHAP)。当连接建立时,无论哪一方是呼叫者还是被呼叫者,每一端都可以要求另一端进行身份验证。在下文中,当我想要区分进行身份验证的系统和身份验证器时,我会粗略地使用“客户端”和“服务器”的说法。PPP 守护进程可以通过发送另一个 LCP 配置请求来要求其对等方进行身份验证,该请求标识了所需的身份验证协议。

PAP 的工作方式基本上与正常的登录过程相同。客户端通过向服务器发送用户名和(可选的加密)密码来进行身份验证,服务器会将这些信息与其密钥数据库进行比较。这种技术容易受到窃听者的攻击,他们可能会尝试通过监听串行线路来获取密码,也容易受到重复的试错攻击。

CHAP 没有这些缺陷。使用 CHAP,身份验证器(即服务器)会向客户端发送一个随机生成的“挑战”字符串,以及其主机名。客户端使用主机名查找相应的密钥,将其与挑战字符串组合,并使用单向哈希函数对字符串进行加密。结果会连同客户端的主机名一起返回给服务器。现在服务器执行相同的计算,如果得到相同的结果,则会确认客户端。

CHAP 的另一个特点是,它不仅要求客户端在启动时进行身份验证,还会定期发送挑战,以确保客户端没有被入侵者替换,例如通过简单地切换电话线。

pppd 将 CHAP 和 PAP 的密钥分别保存在两个单独的文件中,分别名为 /etc/ppp/chap-secrets 和 pap-secrets。通过在一个或另一个文件中输入远程主机,您可以精确控制是使用 CHAP 还是 PAP 来验证我们自己与对等方的身份,反之亦然。

默认情况下,pppd 不要求远程端进行身份验证,但如果远程端请求,则会同意验证自身身份。由于 CHAP 比 PAP 强大得多,pppd 会尽可能尝试使用前者。如果对等方不支持 CHAP,或者 pppd 在其 chap-secrets 文件中找不到远程系统的 CHAP 密钥,则会退回到 PAP。如果它也没有其对等方的 PAP 密钥,则会完全拒绝身份验证。结果,连接会被关闭。

这种行为可以通过多种方式修改。例如,当给定 auth 关键字时,pppd 将要求对等方验证自身身份。pppd 将同意为此使用 CHAP 或 PAP,只要它分别在其 CHAP 或 PAP 数据库中拥有对等方的密钥。还有其他选项可以打开或关闭特定的身份验证协议,但我不会在此处描述它们。有关详细信息,请参阅 pppd(8) 手册页。

如果所有与您进行 PPP 通信的系统都同意向您验证身份,则应将 auth 选项放在全局 /etc/ppp/options 文件中,并在 chap-secrets 文件中为每个系统定义密码。如果某个系统不支持 CHAP,请在 pap-secrets 文件中为其添加一个条目。这样,您可以确保没有未经身份验证的系统连接到您的主机。

接下来的两节将讨论两个 PPP 密钥文件,pap-secrets 和 chap-secrets。它们位于 /etc/ppp 中,包含客户端、服务器和密码的三元组,可选地后跟 IP 地址列表。客户端和服务器字段的解释对于 CHAP 和 PAP 是不同的,并且还取决于我们是向对等方验证自己的身份,还是要求服务器向我们验证其身份。


contents
下一页: CHAP 密钥文件 上一级: 使用 PPP 认证 上一页: 使用 PPP 认证

Andrew Anderson
Thu Mar 7 23:22:06 EST 1996