链路层安全扩展——L2TP协议
PPP协议
协议概念
说到数据链路层的安全协议,我们不得不先提一下PPP协议,后面的PAP、CHAP与L2TP协议都是围绕它展开的。(PPP不是本文重点,很多细节没有提到,到时候会专开一篇文章讲PPP)
PPP(Point-to-point Protocol,点到点协议)协议是为同等单元之间传输数据包设计的,主要是用来通过拨号或专线方式建立点对点连接发送数据,使其成为各种主机、网桥和路由器之间简单连接到一种共同的解决方案。
点对点网络中,一个数据帧的接收者就是固定的对等端。
PPP规定了以下内容:
- 帧格式以及成帧方法
- 用于建立、配置和测试PPP链路的链路控制协议(Link Control Protocol, LCP),以及通信双方可通过LCP包协商一些选项。
- 一组用于建立和配置网络层协议的网络控制协议(Network Control Protocol,NCP)。在PPP链路上可以传输不同网络协议的数据,NCP用于对这些网络协议相关的参数进行配置。但NCP只是一个统称,如果传输的是IP数据,则“NCP”是指IP控制协议(IPCP)。不同类型的NCP充分说明了PPP具有良好的通用性。鉴于IP的通用性,随后都以IPCP为例进行说明。
协议封装格式
PPP协议的封装格式如下:
- 协议字段分为三种:如果是
0xC021
,则数据部分是PPP的链路控制数据;如果为0x0021
,数据部分就是IP数据报;如果是0x8021
,则表示这是网络控制数据。
协议流程
PPP协议流程如下:
- 在建立PPP链路前,发送方和回应方必须建立一条物理连接。
- 双方首先利用LCP建立PPP链路。
- 用PAP或CHAP验证身份。
- 用IPCP配置IP层参数。
- 通信完成后,利用LCP断开PPP链路。
- 断开物理连接。
整个过程包括5个阶段:
- 链路不可用阶段:链路状态的起始点和终止点。
- 链路建立阶段:双方用LCP建立链路。
- 认证阶段:回应方发起身份验证。
- 网络层协议阶段:回应方给发起方分配IP地址(毕竟是对等方式连接的)。
- 链路终止阶段:PPP链路终止。
PAP和CHAP认证协议
PPP协议有两种认证协议,分别是PAP协议和CHAP协议。
PAP协议
PAP(Password Authentication Protocol)是基于口令认证的方法,被认证方发送Authenticate-Request报文(类型1),其中包含了身份(通常是账号或者说用户名)和口令信息。
若认证通过,认证方返回Authenticate-Ack(类型2),否则返回Authenticate-Nak(类型3)。
PAP协议以明文方式传输身份和口令给网络接入服务器(Network Access Server,NAS)。因此安全性较差,容易被第三方窃取用户名和口令。
另外,PAP在PPP身份认证过程中,由被认证方发起认证,并且仅在建立链路阶段使用,在数据传输过程中不能用。
下面是PAP两次握手的具体过程:
CHAP协议
**基于挑战认证的协议(Challenge-Handshake Authentication Protocol)**通过三次握手完成身份认证,我们记认证方为S
,其用户名为SU
,被认证方为U
其用户名为UU
,随机数为R
,口令为PW
,则认证成功的工作过程如下(部分字段没有体现在下文中,详细请参考包格式):
S→U:0x0001,ID,R,SUU→S:0x0002,ID,Hash(PW∣∣R),UUS→U:0x0003,ID,Message S\to U:0x0001,ID,R,SU \\ U\to S: 0x0002,ID,Hash(PW ||