标题：chap
PPP 询问握手认证协议
简述询问握手认证协议（CHAP）通过三次握手周期性的校验对端的身份，在初始链路建立时完成，可以在链路建立之后的任何时候重复进行。
1. 链路建立阶段结束之后，认证者向对端点发送“challenge”消息。
2. 对端点用经过单向哈希函数计算出来的值做应答。
3. 认证者根据它自己计算的哈希值来检查应答，如果值匹配，认证得到承认；否则，连接应该终止。
4. 经过一定的随机间隔，认证者发送一个新的 challenge 给端点，重复步骤 1 到 3 。
通过递增改变的标识符和可变的询问值，CHAP 防止了来自端点的重放攻击，使用重复校验可以限制暴露于单个攻击的时间。认证者控制验证频度和时间。
特性该认证方法依赖于只有认证者和对端共享的密钥，密钥不是通过该链路发送的。
虽然该认证是单向的，但是在两个方向都进行 CHAP 协商，同一密钥可以很容易的实现相互认证。
由于 CHAP 可以用在许多不同的系统认证中，因此可以用 NAME 字段作为索引，以便在一张大型密钥表中查找正确的密钥，这样也可以在一个系统中支持多个 NAME/ 密钥对，并可以在会话中随时改变密钥。
CHAP 要求密钥以明文形式存在，无法使用通常的不可回复加密口令数据库。
CHAP 在大型网络中不适用，因为每个可能的密钥由链路的两端共同维护。
协议结构
CHAP 帧格式CHAP 的配置选项格式如下： 
8 16 32 40 bit 
Type Length Authentication-Protocol Algorithm 
Type ― 3 
Length ― 5 
Authentication-Protocol ― 对于 CHAP，为 C223（Hex）。 
Algorithm ― Algorithm 字段为八位字节，表示使用的认证方法。 
CHAP 数据包结构如下所示： 
8 16 32 bit Variable 
Code> Identifier Length Data . . . 
Code ― 识别 CHAP 数据包类型。CHAP 代码具有以下几种：1、Challenge；2、Response；3、Success；4、Failure。 
Identifier ― 用于匹配 Challenges、Responses 和 Replies 信息。 
Length ― CHAP 数据包的长度，包括 Code、Identifier、Length 和 Data 字段。 
Data ― 0或更多八位字节。该字段格式取决于 Code 字段。对于 Success 和 Failure，Data 字段包括一个独立执行的可变信息字段
CHAP安全性能分析应更强大的记忆式密码认证系统的需要——能适用在公共网络中。Intemet Engineering Task Force公布了一个被称作“CHAP”的协议标准和使用指导。利用这一协议，专门设计的应用程序和网络设备就可以发出密码写成的询问/应答对话，来确定彼此的身份。
对用户来说，CHAP认证通常是自动的和一目了然的。事实上，CHAP的主要作用不是进行用户认证，而是主要用来帮助“黑匣子”进行信息传播。CHAP在现代网关装置中比较常见，例如路由器和一般服务器，它们在允许网络连接之前，都要询问和鉴定CHAP加密的记忆式密码。
CHAP认证几乎和所有的路由器以及一般服务器设备兼容，因此可以安装在几乎所有的Intemet网关上。它也与大部分的PPP客户端软件兼容，其中包括Microsoft Windows提供的一些主流PPP客户端。然而，它与大多数的“legacy”应用不能兼容，其中包括绝大多数的主机设备和微机的登录系统。
在Internet上传输时，CHAP表现出了足够强大的抗攻击能力。然而，当CHAP全自动和透明时，它就不能够准确鉴别人类用户的身份了。即使要求输入记忆式密码而且这个密码还被CHAP加密，它也仍然存在被身后的人轻松窥视到的致命弱点。因此，通常认可的计算机操作在承认记忆式密码的地方也允许使用CHAP认证，同时可以在单独使用记忆式密码不能满足网络暴露时使用CHAP认证。
然而，即使是最好的CHAP配置也不能够解决有关环境的物理安全和可接近性的所列问题，因为使用记忆式密码时通常是不能远离身边其他电脑工作者的。
配置方法
  步骤一：配置路由器的IP地址。 基础配置省略，串行链路要记得配置时钟频率。
步骤二：将R1的 s1接口改为ppp协议. 并配置双向身份验证 R1(config)#inter serial 0/3/0
R1(config-if)#encapsulation ppp
R1(config-if)#exit
R1(config)#hostname R1 //R1 将作为PPP 的用户名
R1(config)#username R2 password cisco
//配置本地用户名密码数据库。用于确认其它设备的身份。
R1(config)#interface serial 0/3/0
R1(config-if)#ppp authentication [ chap | pap ]
//指定采用chap 的进行身份验证
步骤三：将R2的S0改为PPP协议，并配置身份验证 R2(config)#host R2
R2(config)#username R1 password cisco
R2(config)#interface serial 0
R2(config-if)#encapsulation ppp
R2(config-if)#ppp authentication [ chap | pap ]
步骤四：确认双方是否可以PING通。 步骤五：配置CHAP单向的身份验证,R2配置基础上添加一个新的用户 R2(config)#username wy password 123
步骤六：配置R1的PPP认证。 R1(config)#interface serial 1
R1(config-if)#encapsulation ppp
R1(config-if)#ppp chap hostname wy //发送chap 的用户名
R1(config-if)#ppp chap password 123 //发送chap 的密码
R1(config-if)#exit
步骤七：确认双方是否可以PING通。 步骤八：配置PAP的单向的身份验证，在原先的配置基础上将R2改为pap的认证 R2(config)#interface serial 0
R2(config-if)#encapsulation ppp
R2(config-if)#ppp authentication pap
R2(config-if)#exit
步骤九：配置R1的PPP认证 R1(config)#interface serial 1
R1(config-if)#encapsulation ppp
R1(config-if)#ppp pap sent-username wy password 123 //发送pap 的用户名和密码
步骤十：确认双方是否可以PING通。
故障排查命令
debug ppp negotiation -确定客户端是否可以通过PPP协商; 这是您检查地址协商的时候。
debug ppp authentication -确定客户端是否可以通过验证。 如果您在使用Cisco IOS软件版本11.2之前的一个版本，请发出debug ppp chap命令。
debug ppp error – 显示和PPP连接协商与操作相关的协议错误以及统计错误。
debug aaa authentication -要确定在使用哪个方法进行验证(应该是RADIUS，除非RADIUS服务器发生故障)，以及用户是否通过验证。
debug aaa authorization -要确定在使用哪个方法进行验证，并且用户是否通过验证。
debug aaa accounting -查看发送的记录。
debug radius -查看用户和服务器交换的属性。