• 从本节开始,我们将重点关注安全主题中最后一个重要部分,即身份验证。首先介绍EAP,然后介绍802.1X。

    提示 wpa_supplicant很大一部分内容就是在处理身份验证,所以本节也将花费较多的笔墨来介绍相关内容。

    (1)EAP[31][32][33]

    目前身份验证方面最基础的安全协议就是EAP(Extensible Authentication Protocol),协议文档定义在RFC3748中。EAP是一种协议,更是一种协议框架。基于这个框架,各种认证方法都可得到很好的支持。下面来认识 EAP协议。首先介绍其中涉及的几个基本概念。

    Authenticator(验证者):简单点说,Authenticator就是响应认证请求的实体(Entity)。对无线网络来说,Authenticator往往是AP。

    Supplicant(验证申请者)发起验证请求的实体。对于无线网络来说,Supplicant就是智能手机。

    BAS(Backend Authentication Server,后端认证服务器):某些情况下(例如企业级应用)Authenticator并不真正处理身份验证,它仅仅将验证请求发给后台认证服务器去处理。正是这种架构设计拓展了EAP的适用范围。

    AAA(Authentication、Authorization and Accounting,认证、授权和计费):另外一种基于EAP的协议。实现它的实体属于BAS的一种具体形式,AAA包括常用的RADIUS服务器等。 在RFC3748中,AAA和BAS的概念可互相替代。

    EAP Server:表示真正处理身份验证的实体。如果没有BAS,则EAP Server功能就在Authenticator中,否则该功能由BAS实现。

    EAP架构如图3-36所示。
    802.1X EAP 认证_服务器
     

    由图3-36所示,Supplicant通过EAPOL(EAP Over LAN,基于LAN的扩展EAP协议)发送身份验证请求给Authenticator。图中的身份验证由后台验证服务器完成。如果验证成功,Supplicant就可正常使用网络了。

    下面来认识EAP的协议栈,如图3-37所示。
    802.1X EAP 认证_服务器_02
     

    由图3-37可知,EAP没有强制定义位于最底层(Lower Layer,LL)的传输层。目前支持EAP协议的网络有PPP、有线网(EAPOL,也就是802.1X协议)、无线网络(即802.11 WLAN)、TCP、UDP等。另外,LL本身的特性(例如以太网和无线网都支持数据重排及分片的特性)会影响其上一层EAP的具体实现。

    EAP Layer用于收发数据,同时处理数据重传及重复(Duplicate)包。

    EAP Supplicant/Authenticator Layer根据收到EAP数据包中Type字段(见下文介绍)的不同,将其转给不同的EAP Method处理。

    EAP Method属于具体的身份验证算法层。不同的身份验证方法有不同的Method Type。

    EAP协议的格式非常简单,如图3-38所示。
    802.1X EAP 认证_无线网络_03
     

    Code:EAP协议第一字节,目前仅有四种取值,分别为1(Request)、2(Response)、3(Success)、4(Failure)。

    Identifier:消息编号(ID),用于配对Request和Response。

    Length:2字节,用于表示EAP消息包长度(包括EAP头和数据的长度)。

    Data:EAP中具体的数据(Payload)。当Code为Request或Response的时候,Data字段还可细分为Type以及Type Data。Type就是图3-37中的EAP Method Type。

    EAP Method Type取值如下。

    1:代表Identity。用于Request消息中。其Type Data字段一般将携带申请者的一些信息。一般简写为EAP-Request/Identity或者Request/Identity。

    2:代表Notification。Authenticator用它传递一些消息(例如密码已过期、账号被锁等)给Supplicant。一般简写为Request/Notification。

    3:代表Nak,仅用于Response帧,表示否定确认。例如Authenticator用了Supplicant不支持的验证类型发起请求,Supplicant可利用Response/Nak消息以告知Authenticator其支持的验证类型。

    4:代表身份验证方法中的MD5质询法。Authenticator将发送一段随机的明文给Supplicant。Supplicant收到该明文 后,将其和密码一起做MD5计算得到结果A,然后将结果A返回给Authenticator。Authenticator再根据正确密码和MD5质询文做 MD5计算得到结果B。A和B一比较就知道Supplicant使用的密码是否正确。

    5:代表身份验证方法为OTP(One Time Password,一次性密码)。这是目前最安全的身份验证机制。相信网购过的读者都用过它,例如网银付费时系统会通过短信发送一个密码,这就是OTP。

    6:代表身份验证方法为GTC(Generic Token Card,通用令牌卡)。GTC和OTP类似,只不过GTC往往对应一个实际的设备,例如许多国内银行都会给申请网银的用户一个动态口令牌。它就是GTC。

    254:代表扩展验证方法(Expanded Types)。

    255:代表其他试验性用途(Experimental Use)。

    图3-39所示为一个简单的EAP交互。第三和第四步时,Authenticator要求使用MD5质询法进行身份验证,但Supplicant不 支持,故其回复NAK消息,并通知Authenticator使用GTC方法进行身份验证。第六步中,如果Supplicant回复了错误的GTC密码 时,Authenticator可能会重新发送Request消息以允许Supplicant重新尝试身份验证。一般认证失败超过3次才会回复 Failure消息。
    802.1X EAP 认证_无线网络_04
     

    EAP的基本情况就介绍到此,读者可通过RFC3748了解它的详细情况。下面介绍802.1X。

    提示 可阅读参考资料[32]以了解EAP的其他几种验证方法。

    (2)802.1X[34][35]

    802.1X是802.1规范家族中的一员。简单来说,802.1X详细讨论了EAP在Wired LAN上的实现,即EAPOL。先来认识802.1X中的两个重要概念,如图3-40所示。

    由图3-40可知,802.1X定义了:Controlled Port和UnControlled Port(受控和非受控端口)。

    Port是802.1X的核心概念,其形象和我们常见的以太网中网口很类似。Port的定义和图3-4中所述的定义一样。802.1X定义了两种 Port,对于UnControlled Port来说,只允许少量类型的数据流通(例如用于认证的EAPOL帧)。Controlled Port在端口认证通过前(即Port处于Unauthorized状态),不允许传输任何数据。

    802.1X身份验证通过后,Control Port转入Port Authorized状态。这时,双方就可通过Controlled Port传递任何数据了。

    提示 802.1X-2010文档只有200来页,但难度不小,引用的参考资料也非常多。建议读者看完本节后再结合实际需求去阅读它。另外 802.1X中还定义了一个很重要对象叫PAE (Port Access Entity)。Entity的概念在3.3.1节曾介绍过,它代表封装了一组功能的模块。在802.1X中,PAE负责和PACP(Port Access Control Protocol)协议相关的算法及处理工作。PAE分为Supplicant PAE和Authenticator PAE两种。

    下面来看EAPOL的数据格式,如图3-41所示。
    802.1X EAP 认证_服务器_05
     

    由图3-41可知EAPOL消息格式如下。

    Protocol Version:占1字节,代表当前使用的802.1X版本号。值为0x03代表802.1X-2010,值为0x02则表示802.1X-2004,值为0x01表示802.1X-2001。

    Packet Type:EAPOL对EAP进行了扩展,该字段取值详细内容见表3-14。

    Packet Body Length:指明Packet Body的长度。

    EAPOL消息中最重要的是Packet Type,目前规范定义的几种常见取值如表3-14所示。

    表3-14 EAPOL Packet Type常见取值
    Packet Type取值(二进制) 名  称 说  明
    0000-0000 EAPOL-Packet 以前叫EAP-Packet,用于携带EAP消息帧
    0000-0001 EAPOL-Start Supplicant发起认证请求
    0000-0010 EAPOL-Logoff Supplicant退出身份验证以停止使用网络
    0000-0011 EAPOL-Key 用于交换加密密钥信息,其对应的数据格式见下文

    EAPOL-Key用于交换身份验证过程中使用的密钥信息,其对应的Packet Body格式如图3-42所示。Descriptor Type表示后面Descriptor Body的类型。802.1X中,Descriptor Type值为2时,Descriptor Body的内容由802.11定义。此处给读者展示一个实际的例子,如图3-43所示。
    802.1X EAP 认证_主题_06802.1X EAP 认证_无线网络_07
    图3-43中:

    0x888e代表EAPOL在802.11帧中的类型。

    Key Descriptor Type值为2,表示EAPOL RSN Key。

    Descriptor Body的内容就是大括号中所包含的信息。其细节请读者阅读802.11第11.6.2节。

    最后,看看用MD5质询算法作为身份验证的EAPOL认证流程,如图3-44所示。
    802.1X EAP 认证_服务器_08
     

    Supplicant主动向Authenticator发送EAPOL-Start消息来触发认证。注意,EAPOL-Start消息不是必需的。

    Authenticator收到EAPOL-Start消息后,将发出EAP-Request/Identity消息以要求Supplicant输 入用户名。由于EAPOL-Start消息不是必需的,所以一个未经验证的Supplicant发送了其他数据包也将触发Authenticator发送 EAP-Request/Identity消息。

    Supplicant将用户名信息通过EAP-Response/Identity消息发送给Authenticator。 Authenticator再将它经过封包处理后(转换成RADIUS Access-Request消息)送给AS(Authenticator Server)进行处理。

    AS收到Authenticator转发的用户名信息后,将其与数据库中的用户名表对比,找到该用户名对应的密码信息。然后随机生成的一个MD5质询文并通过RADIUS Access-Challenge消息发送给Authenticator,最后再由Authenticator转发给Supplicant。

    Supplicant收到EAP-Request/MD5 Challenge消息后,将结合自己的密码对MD5质询文进行处理,处理结果最终通过EAP-Response/MD5 Challenge消息经由Authenticator返回给AS。

    AS将收到RADIUS Access-Request消息和本地经过加密运算后的密码信息进行对比,如果相同,则认为该Supplicant为合法用户,然后反馈认证成功消息(RADIUS Access-Accept和EAP-Success)。

    Authenticator收到认证通过消息后将端口改为授权状态,允许Supplicant访问网络。注意,有些Supplicant还会定期向 Supplicant发送握手消息以检测Supplicant的在线情况。如果Supplicant状态异常,Authenticator将禁止其上线。

    Supplicant也可以发送EAPOL-Logoff消息给Authenticator以主动要求下线。

    至此,我们对EAP和802.1X进行了简单介绍,EAP和802.1X的目前是为了进行身份验证,二者有自己的数据格式。如果没有特殊需要,掌握上述知识就可以了。

    提示 后续分析wpa_supplicant时还将对802.1X进行更为详尽的介绍。

    下面介绍安全部分最后一个内容,RSNA。