13.1.3 PPP认证
PPP使用LCP报文来协商连接(一种发送配置请求,然后接收响应的简单握手过程),协商中双方获得当前点对点连接的状态配置等,之后的“鉴别”阶段使用哪种鉴别方式也在这个协商中确定下来。
鉴别阶段是可选的,如果链接协商阶段并没有设置鉴别方式,则将忽略鉴别阶段直接进入“网络”阶段。鉴别阶段使用链接协商阶段确定下来的鉴别方式来为连接授权,以起到保证点对点连接安全,防止非法终端接入点对点链路的作用。常用的鉴别认证方式有CHAP认证和PAP认证。
1.PAP认证
密码认证协议(Password Authentication Protocol,PAP)是一种典型的明文认证协议。
PAP主要通过两次握手(即仅通过来回两个报文)提供一种对等节点建立认证的简单方法,这建立在初始链路确定的基础上。被认证方(客户端)向认证方(服务器端)以明文方式发送认证信息,包含用户名和密码。如果用户名和密码与服务器里保存的一致,则通过认证,否则不能通过认证(通过两次握手)。PAP认证可以分为单向认证和双向认证。
鉴于PAP认证的不安全性,我们力求寻找更加安全的协议,即CHAP认证。
2.CHAP认证
挑战握手认证协议(Challenge-Handshake Authentication Protocol,CHAP)是PPP链路上基于密文发送的三次握手协议。
LCP协商完成后,认证方发起挑战“Challenge”,将Challenge报文发送给被认证方,报文中含有Identifier信息和一个随机产生的Challenge字符串。此Identifier会被后续报文使用,一次认证过程所使用的报文均使用相同的Identifier信息,用于匹配请求报文和回应报文。
被认证方收到“Challenge”后,进行一次加密运算,运算公式为MD5{Identifier+密码+Challenge},得到一个16字节长的摘要信息,最后将此摘要信息和端口上配置的CHAP用户名一起封装在Response报文中并发回认证方。
认证方收到被认证方发送的Response报文之后,根据其中的用户名在本地查找相应的密码信息,得到密码信息后进行一次加密运算,运算方式和被认证方的加密运算方式相同,然后比较加密运算得到的摘要信息和Response报文中封装的摘要信息,相同则表示认证成功,不相同则表示认证失败。
使用CHAP认证方式时,被认证方的密码是使用Hash进行传输的密文,而MD5算法是不可逆的,无法通过结果得到原始的密码,这样就极大地提高了安全性。