CHAP PPP挑战握手身份验证协议( 三 )


长度的字节应该视为数据链路层填充,接收方应该忽略 。
数据 Data
数据字段是零个或多个字节,数据字段格式由代码字段确定 。
4.1. 挑战和应答
描述
挑战包是CHAP的开始,认证者必须传送代码字段为1的CHAP包,其他挑战
数据包必须在有效应答数据包成功接收之后或者可选重试计数器计满后发
 送 。
为了确保连接没有被更改,挑战包也可以在NLP阶段的任何时候发送 。
对端应该随时为认证阶段和NLP阶段的挑战做好预备,任何时候收到挑战
包,对端都必须传送代码字段为2(应答)的CHAP数据包 。
无论何时,假如收到应答包,认证者都必须把应答值和自己计算的预期值
比较,基于这种比较,认证者必须发送成功(Success)或者失败
 (Failure)CHAP包 。
注:由于成功包可能丢失,认证者在NLP阶段中必须答应重复的应答包,
为了发现更改的名字和密钥,收到具有当前挑战标识符的应答包必须返
回与先前挑战同样的响应代码(消息部分可能不相同),在任何其他阶
段收到的任何应答包必须静静丢弃 。
假如“失败包”丢失,认证者终止了链路,那么可以由LCP的“终止请
求”和“终止应答”来指示认证失败 。
挑战包和应答包的格式如下,字段从左到右传输 。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CodeIdentifierLength
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Value-SizeValue ...
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Name ...
- - - - - - - - - - - - - - - -
代码 Code
 1 挑战 Challenge;
 2 应答 Response.
标识 Identifier
标识字段一字节,每次发送挑战都必须要改变标识字段的值 。
应答标识必须由响应的挑战标识字段拷贝得来 。
值大小 Value-Size
一字节长,指示“值”字段的长度 。
值 Value
值字段一个或者多个字节,首先传输最高位 。
挑战值是可变字节流,上文已经叙述了挑战值唯一性的重要性和它与密钥
之间的关系 。挑战值必须在每次发送挑战时都要改变 。挑战值的具体长度
由产生它的方*而定,独立于所用的哈希算* 。
应答值由标识串接密钥串接挑战值然后经过哈希运算得出,其长度由所用
的哈希算*决定(对于MD5,为16字节) 。
名字 Name
名字字段一个或多个字节,代表传输数据包的系统的标识,字段内容没有
限制,如,可以是ASCII字串,或者是全局唯一的ASN.1标识,名字不应该
是NUL或者CR/LF终止符 。其长度由长度字段确定 。
4.2. 成功与失败
描述
假如接收到的应答值等于预期值,那么认证者必须传送代码字段为3(
 成功)的CHAP数据包 。
假如接收到的应答值不等于预期值,那么认证者必须传送代码字段为4
(失败)的CHAP数据包,并且应该终止链路 。
成功和失败包格式如下所示,字段从左到右传输 。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CodeIdentifierLength
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Message ...
- - - - - - - - - - - - -
代码 Code
 3成功 Success;
 4失败 Failure.
标识 Identifier
标识字段一字节,辅助匹配应答和响应,从响应的应答标识字段拷贝得
 来 。
消息 Message
消息字段是一个或者多个字节,其内容与具体实现无关,最好可以直接
阅读,但是不得影响协议*作,推荐使用可显示的ASCII字符(从32到

推荐阅读