CHAP过程
说明,这是一个单向挑战验证过程:
understanding_ppp_chap1.gif 
首先,766路由器拨入到3640上来,在3640上的接口中有这样的配置:ppp authentication chap. 如上图.
understanding_ppp_chap2.gif 
LCP协议负责验证过程,3640在接到拨入后,开始对766发出挑战数据包.如上图,3640产生一个挑战包, 发给766,内容包括:
1. 01所在字段是类型字段,01表示这是一个挑战.
2.ID字段表示这次挑战,是挑战序列号
3.RANDOM, 随机数字,它由挑战方产生.
4.最后一个字段是用户名字段,用于对方根据该名称查找对应的PASSWORD
在发出这个挑战包后,3640 在自己的路由器里保存了ID和RANDOM值,供下面的MD5计算用.
understanding_ppp_chap3.gif
如上图,766接到了挑战包,它从挑战数据包中搜集以下信息:
1.ID值
2.RANDOM值
3. 根据包中的用户名,在自己的数据库(本地的或者TACACS+,RADIUS)查找对应的密码.
将上面的三个信息使用MD5进行计算,获得一个 HASH.
understanding_ppp_chap4.gif

如上图,766路由器产生一个挑战回应数据包,它包含:
1.类型字段,02表示回应.
2.ID 值,从挑战包中直接复制过来的.
3.HASH,就是刚才766计算出来的HAS
4.用户名字段,供一会3640查找密码用.
understanding_ppp_chap5.gif
如上图,3640接到回应包,3640从回应包中抽取用户名,并查找到对应的密码,然后利用之前保存的 ID,RANDOM以及查到的密码来计算自己的HASH,然后将自己计算得到的HASH与回应中的HASH比较,如果相同,验证成功.如果不同验证失败.
understanding_ppp_chap6.gif
验证成功的返回示意.注意类型字段=03表示成功,后面的WELCOME IN 只是为了图示形象化.
如果验证失 败,则返回的类型字段=04.
从上面整个过程可以看出,在整个验证过程中,只有用户名,ID,随机数,以及ID+密码+随机数的HASH被 发送,真实密码始终没有被发送,同时根据2边计算所需的参数看,在2台路由器上配置的密码一定要相同,否则验证将失败.
上面这是一个单向验 证过程,如果是配置的双向验证,那么首先发起挑战的是发起呼叫的一方.整过过程是上面过程的2次重复.
单/双向验证问题:

One-way authentication is often required when you connect to non-Cisco devices.
ppp authentication { chap | ms-chap | ms-chap-v2 | eap |pap} [ callin]
后面的CALLIN 参数表示,只在接受到呼叫时才发出挑战.
那么根据2边以及有无该参数,我们 可以产生2*2=4种组合.由于没有环境作该实验,所以无法验证4种是否都合法,但参考思科在线文档,给出的是以下配置组合:
Authentication Type
Client (calling)
NAS (called)
One-way (unidirectional)
ppp authentication chap callin
ppp authentication chap
Two-way (bidirectional)
ppp authentication chap
ppp authentication chap
从上面可以看出,单向验证只在 主动呼叫方配置该参数,单向时将由被呼叫方发起验证.双向验证则双边都无需配置.
参考CISCO原文解释:

Configuring Unidirectional CHAP Authentication

When two devices normally use CHAP authentication, each side sends out a challenge to which the other side responds and is authenticated by the challenger. Each sides authenticates one another independently. If you want to operate with non-Cisco routers that do not support authentication by the calling router or device(不支持被呼叫路由器来验证,也就是说不支持主动呼叫的来发出挑战), you must use the ppp authentication chap callin command. When using the ppp authentication command with the callin keyword, the Access Server will only authenticate the remote device if the remote device initiated the call (for example, if the remote device "called in").
ppp_callin_hostname.gif
R1配置了callin 参数,R1向R2拨号.验证过程:
点击看清晰大图(mycisco.cn)
具体配置过程请 参 考这里
另外,本人在看关于单双文档的时候,遇到CISCO这一段话,让我难以理解:
In the Cisco CHAP implementation, by default, the called party must authenticate the calling party (unless authentication is completely turned off). Therefore, a one-way authentication initiated by the called party is the minimum possible authentication.
这段话意思我这么翻译:CISCO的 CHAP ,默认情况下,被呼叫方必须验证呼叫方(除非验证完全关闭).因此,由被呼叫方发起的单向验证是可能性最小的验证(或者是最不可能的验证).
从 这话看,怎么和CISCO实例解释的完全相反呢?请英文好的朋友帮理解下,不知道是否是CISCO的笔误?也不知道是否我理解有错,请朋友们指正。


转自:http://www.mycisco.cn/post/116.html