802.11--WPS(Wi-Fi Protected Setup)协议简析

时间:2024-03-20 07:26:59

一、概述

WPS全称为Wi-Fi Protected Setup,是WSC规范早期的名字,WSC全称为Wi-Fi Simple Configuration,该项技术用于简化SOHO环境中无线网络的配置和使用。举一个简单的例子,配置无线网络环境时,网管需要首先为AP设置SSID、安全属性(如身份认证方法、加密方法等)。然后他还得把SSID、密码告诉给该无线网络的使用者。可是这些安全设置信息对普通大众而言还是有些复杂。而有了WSC之后,用户只需输入PIN码(Personal Identification Number,一串数字),或者摁一下专门的按钮(WSC中,该按钮被称为Push Button)甚至用户只要拿着支持NFC的手机到目标AP(它必须也支持NFC)旁刷一下,这些安全设置就能被自动配置好。有了这些信息,手机就能连接上目标无线网络了。显然,相比让用户记住SSID、密码等信息,WSC要简单多了。WFA推出WPA后不久,WPS规范便被推出。随着WPA2的出现,WFA又制订了WPS的升级版,即WSC。

二、术语介绍

WSC规范定义了三个核心组件,如下图所示:
802.11--WPS(Wi-Fi Protected Setup)协议简析
  1. Enrollee的角色类似于client端,它向Registrar发起注册请求;
  2. Registrar用于检查Enrollee的合法性,类似于server端,另外,Registrar还能对AP进行配置;
  3. AP也需要注册到Registar中,所以,从Registrar角度来看,AP也是Enrollee;
  4. AP和Registrar以及Enrollee三者交互,Enrollee从Registrar那获取AP的安全配置信息,然后Enrollee利用该信息加入AP提供的无线网络。
  注意,这三个组件只是逻辑上的概念。在具体实现时,AP和Registrar可以由同一个实体实现,也可分别由不同实体来实现。
  支持WSC的无线路由器兼具AP和Registrar的功能,这种AP在规范中被称为Standalone AP。Android智能手机扮演Enrollee的角色。
  如果AP和Registrar分别由不同实体来实现,这种Registrar也被称为External Registrar。
  三大组件之外,规范还定义了组件之间的交互接口。上图中的E、M、A代表三个核心组件之间交互的接口,这些接口定义了交互双方需要实现的一些功能。简要描述如下:
  1. STA中的Interface E包括的功能有
   1) STA首先要寻找周围支持WSC功能的Standalone AP。此步骤将通过发送携带WSC IE的Probe Request帧来实现;
   2) STA关联到Standalone AP后(注意,仅仅是关联成功。由于缺乏安全配置信息,STA无法和AP开展RSNA流程,即四次握手等工作),双方需要借助Registration Protocol协议(以后简称RP协议)来协商安全配置信息。所以,STA必须实现RP协议的Enrollee的功能;
  2. Standalone AP中Interface E包括的功能有:
   1) 回复携带WSC IE的Probe Response帧以表明自己支持WSC功能;
   2) 实现RP协议定义的Registrar的功能。另外,STA和AP可选择实现某种Out-of-Band交互手段,规范中提到的两种手段包括NFC和USB;
  3. 对于Interface A来说:
   1) STA必须实现802.1X supplicant功能,并支持EAP-WSC算法;
   2) Standalone AP需发送携带WSC IE的Beacon帧来表示自己支持WSC功能。同时,AP还必须支持802.1X authenticator功能,并实现EAP-WSC算法;
  4. 由于Standalone AP已经集成了三大组件中的AP和Registrar,所以Interface M的功能几乎简化为0。
  WSC的核心内容集中在WSC IE以及RP协议中。

三、Registration Protocol

当STA和Standalone AP采用In-Band交互方法时,RP协议的完整交互流程如图所示:
802.11--WPS(Wi-Fi Protected Setup)协议简析
  将RP协议分为两个部分,由“Enter passworkd of Enrollee”行隔开,其中:
  1. Discovery Phase为上半部分,在此阶段中,STA借助Beacon帧或Probe Request帧搜索周围的AP。对开启了WSC功能的AP来说,这些帧中都必须携带WSC IE。而没有携带WSC IE的帧则表明发送者不支持或者未开启WSC功能。Discovery Phase结束后,STA将确定一个目标AP;
  2. 如果是PIN方式,此时用户需要将STA显示的PIN码输入到目标AP的设置页面;
  3. STA将关联到目标AP。和非WSC流程不一样的是,STA和AP不会开展4次握手协议,而是先开展EAP-WSC流程;
  4. EAP-WSC流程从EAPOL-Start开始,结束于EAP-Fail帧,一共涉及14次EAPOL/EAP帧交换。在这14次帧交互过程中,STA和AP双方将协商安全配置信息(例如采用何种身份验证方法、何种加密方法,以及PSK等)。另外,这14次帧中,M1到M8属于EAP-WSC算法的内容,它们用于STA和AP双方确认身份以及传输安全配置信息;
  5. 最后EAP-WSC最终以EAP-Fail帧结束,但STA已经和AP借助M1到M8成功完成了安全信息协商。所以,STA已经获得了AP的安全配置情况。另外,由于STA收到的是EAP-Fail帧,所以它会断开和AP的连接(AP会发送Deauthentication帧给STA);
  6. STA将利用协商好的安全配置信息重新和AP进行关联,后续流程和非WSC的无线网络关联一样,即STA关联到AP后,将开展RSNA工作(RSNA工作属于WPA和WPA2规范所指定),如4次握手协议、Group Handshake流程。

四、WSC IE

WSC IE并不属于802.11规范所定义的IE,而是属于Vendor定义的IE。根据802.11规范,Vendor定义的IE有着如图所示的组成结构:
802.11--WPS(Wi-Fi Protected Setup)协议简析
  WSC IE对应的设置如下:
  1. Element ID取值为221。802.11规范中,该值意为“Vendor Specific”;
  2. Length为OUI及Data的长度;
  3. OUI取值为0x00-50-F2-04。其中00-50-F2代表Mircrosoft公司的OUI,04代表WPS;
  4. WSC IE中,Data域的组织结构为一个或多个Attribute(属性)。Attribute的格式为TLV,即Type(长度为2个字节)、Length(长度为2个字节,代表后面Value的长度),Value(最大长度为0xFFFF字节);
  属性字段涉及的就比较多了,下面介绍几个比较常见的:
  1. Version属性
   1) Type:0x104a;
   2) Length:1字节;
   3) Value:Version属性已经作废( Deprecated),但为了保持兼容性,规范要求WSC IE必须包含该属性,并且其Value字段需设为0x10。
802.11--WPS(Wi-Fi Protected Setup)协议简析
  2. Vendor Extension属性
   1) Type:0x1049;
   2) Length:;
   3) Vendor ID:该值由WFA注册, 可在IANA官方网站查询,值为0x00372a。
  Vendor Extension可包含多个子属性,常见的如下:
   1) Version2属性
   取代Version属性的是Version2属性, Version2属性并不能单独存在, 而是作为Vendor Extension的子属性被包含在WSC IE中。
    a) Sub Type:0x00;
    b) Length:1字节;
    c) Value:0x20
802.11--WPS(Wi-Fi Protected Setup)协议简析
   2) AuthorizedMACs属性
   该子属性列出了当前已经注册()的sta的mac地址,只有这些在mac地址列表中sta才可以展开EAP-WSC流程。已注册sta的mac由Registrar给AP,如果Registrar不支持该功能的话,则不使用该属性。
    a) Sub Type:0x01;
    b) Length:<=30字节;
    c) Value:
802.11--WPS(Wi-Fi Protected Setup)协议简析
   3) 其余子属性
802.11--WPS(Wi-Fi Protected Setup)协议简析
  3. Request Type属性
   1) Type:0x103a;
   2) Length:1字节。
   3) Value:Request Type属性必须包含于Probe/Association Request帧中,代表STA作为Enrollee想要发起的动作。该属性一般取值0x01(含义为Enrollee,open 802.1X),代表该设备是Enrollee,并且想要开展WSC后续流程。它还有一个取值为0x00(含义为Enrollee,Info only),代表STA只是想搜索周围支持WSC的AP,而暂时还不想加入某个网络。
802.11--WPS(Wi-Fi Protected Setup)协议简析
  4. Response Type属性
   1) Type:0x103b;
   2) Length:1字节。
   3) Value:Response Type属性代表发送者扮演的角色,包含于Probe/Association Response帧中。对于AP来说,其取值为0x03(含义为AP),对于Registrar来说,其取值为0x02,对于Enrollee来说,其取值可为0x00(Enrollee,Info only)和0x01(Enrollee,open 802.1X)。Standalone AP也属于AP,故图6-12右图的Response Type取值为0x03。
802.11--WPS(Wi-Fi Protected Setup)协议简析
  5. Select Registrar Configuration Methods属性
  用于表达Enrollee或Registrar支持的WSC配置方法。前文提到的PIN和PBC就属于WSC配置方法。考虑到支持Wi-Fi的设备类型很多,例如打印机、相机等,故WSC规范定义的WSC配置方法较多。
   1) Type:0x1053;
   2) Length:2字节;
   3) Value:共16位,每一位都代表Enrollee或Registrar支持的WSC配置方法。
  PS:Display还需细分为Physical Display或Virtual Display。二者区别是Physical Display表示PIN码能直接显示在设备自带的屏幕上,而Virtual Display只能通过其他方式来查看(由于绝大多数无线路由器都没有屏幕,所以用一般情况下,用户只能在浏览器中通过设备页面来查看)PIN码。Keypad表示可在设备中输入PIN码。另外,是否支持Push Button由Push Button位表达。同PIN码一样,它也分Physical Push Button和Virtual Push Button。由于AC9硬件上有专门的按钮,且在软件中实现了一个按钮用来触发Push Button,所以这里的设置为支持Physical Push Button和Virtual Push Button。
802.11--WPS(Wi-Fi Protected Setup)协议简析
  6. Device Password ID属性
  用于标示设备Password的类型,默认值是PIN(值为0x0000),代表Enrollee使用PIN码(静态或动态PIN码都可以)。
   1) Type:0x1012;
   2) Length:2字节。
   3) Value:可取值包括0x0001(User-Specified)、0x0002(Machine-Specified)、0x0003(Rekey)、0x0004(PushButton)等。
802.11--WPS(Wi-Fi Protected Setup)协议简析
802.11--WPS(Wi-Fi Protected Setup)协议简析
  7. RF Bands属性
  用于代表设备所支持的无线频率。
   1) Type:0x103c;
   2) Length:1字节。
   3) Value:可取值包括0x01(2.4G)、0x02(5G)、0x03(2.4G、5G)。
802.11--WPS(Wi-Fi Protected Setup)协议简析
  8. Primary Device Type属性
  代表设备的主类型。在Discovery Phase阶段,交互的一方可指定要搜索的设备类型(需设置Requested Device Type属性,该属性的结构和取值与Primary DeviceType一样)。这样,只有那些Primary Device Type和目标设备类型匹配的一方才会进行响应。
   1) Type:0x1054;
   2) Length:8字节。
   3) Value:该属性的格式如下所示:
802.11--WPS(Wi-Fi Protected Setup)协议简析

字段说明:
   a. Type(即Attribute ID)字段的值为0x1054,Length字段的值为8字节
   b. Category ID为WSC规范中定义的设备类型,Telephone设备取值为0x000a,具体参见文档;
   c. OUI默认为WFA的OUI编号,取值为0x00-50-f2-04;
   d. WSC还划分了Sub Category,如0x0005代表Smartphone-dual mode类设备,具体参见文档;
802.11--WPS(Wi-Fi Protected Setup)协议简析
  9. Selected Registrar属性
  该属性的作用是,当AP已选择合适的Registrar后,该属性值为0x01,否则为0x00。对于Standalone AP来说,如果其内部的Registrar组件启动,则设置该值为0x01。
   1) Type:0x1041;
   2) Length:1字节。
   3) Value:当AP已选择合适的Registrar后,该属性值为0x01,否则为0x00。
802.11--WPS(Wi-Fi Protected Setup)协议简析
  10. UUID属性
  全称是Universally Unique Identitifier,设备的唯一标识符,Enrollee和Registrar都有UUID,为了区分,WSC规范分别定义了UUID-E和UUID-R两个属性。
   1) Type:0x1047;
   2) Length:16字节。
   3) Value:
802.11--WPS(Wi-Fi Protected Setup)协议简析

Note:篇幅所限,并没有罗列所有的属性,详细的属性内容可以查阅WSC-V2.0.4.pdf。

五、EAP-WSC

由RP协议交互流程可知,Discovery Phase阶段之后,STA和AP将通过EAP包交换来完成安全信息协商。
  1. 在STA和AP双方开展EAP-WSC流程前,AP需要确定STA的Identity以及使用的身份验证算法。该过程涉及四次EAP包交换,EAP协议的格式如下图所示:
802.11--WPS(Wi-Fi Protected Setup)协议简析
   1) Code:EAP协议第一字节,目前仅有四种取值,分别为1(Request)、2(Response)、3(Success)、4(Failure);
   2) Identifier:消息编号(ID),用于配对Request和Response;
   3) Length:2字节,用于表示EAP消息包长度(包括EAP头和数据的长度);
   4) Data:EAP中具体的数据(Payload)。当Code为Request或Response的时候,Data字段还可细分为Type以及Type Data。Type就是上图中的EAP Method Type。
  这四次包交换的内容分别如下:
   1) sta发起EAP start;
802.11--WPS(Wi-Fi Protected Setup)协议简析
   2) AP发送EAP-Request/Identity以确定STA的ID;
802.11--WPS(Wi-Fi Protected Setup)协议简析
   3) 对于打算使用WSC认证方法的STA来说,它需要在回复的EAP-Response/Identity包中设置Identity为"WFA-SimpleConfig-Enrollee-1-0";
802.11--WPS(Wi-Fi Protected Setup)协议简析
   4) AP确定STA的Identity为"WFA-SimpleConfig-Enrollee-1-0"后,将发送EAPRequest/WSC_Start包以启动EAP-WSC认证流程。
802.11--WPS(Wi-Fi Protected Setup)协议简析
  2. WSC规范利用EAP的扩展功能新定义了一种EAP算法,即EAPWSC。EAP-WSC的包格式如图所示:
802.11--WPS(Wi-Fi Protected Setup)协议简析
  3. M1消息
  M1消息由STA发送给AP,EAP-WSC消息也是由一个一个的属性字段构成,如下所示:
802.11--WPS(Wi-Fi Protected Setup)协议简析
  M1消息中很多属性在上一章节中有讲述,这里简要讲述几个比较重要的属性:
   1) Message Type:代表Enrollee和Registrar发送的消息类型,其可取值从0x01(代表Beacon帧)到0x0F(代表WSC_DONE)。该属性一般只在EAP-WSC帧中用到。对于M1消息而言,其Message Type取值为0x04;
   2) MAC Address:代表STA的MAC地址;
   3) Enrollee Nonce:代表STA产生的一串随机数,它用于后续的**派生等工作;
   4) Public Key:STA和AP的**派生源头也是PMK。不过和PSK不同的是,在WSC PIN方法中并没有使用PSK(PIN码的作用不是PSK)。双方采用了Diffie-Hellman[6](D-H)**交换算法,该算法使得通信的双方可以用这个方法确定对称**(注意,D-H算法只能用于**的交换,而不能进行消息的加密和解密。通信双方确定要用的**后,要使用其他对称**操作加密算法以加密和解密消息。Public Key属性包含了Enrollee的D-H Key值);
   5) Authentication Type Flags和Encryption Type Flags:表示Enrollee支持的身份验证算法以及加密算法类型;
   6) Connection Type Flags:代表设备支持的802.11网络类型,值0x01代表ESS,值0x02代表IBSS;
  4. M2消息
  AP收到并处理M1后,将回复M2,M2消息如下所示:
802.11--WPS(Wi-Fi Protected Setup)协议简析
  AP的M2将携带以下信息:
   1) Registrar Nonce:Registrar生成的随机数;
   2) Public Key:D-H算法中,Registrar一方的D-H Key值;
   3) Authenticator:由HMAC-SHA-256及AuthKey算法得来一个256位的二进制串。注意,Authenticator属性只包含其中的前64位二进制内容;
  PS:AP发送M2之前,会根据Enrollee Nonce、Enrollee MAC以及Registrar Nonce并通过DH算法计算一个KDK(Key Derivation Key),KDK**用于其他三种Key派生,这三种Key分别用于加密RP协议中的一些属性的AuthKey(256位)、加密Nonce和ConfigData(即一些安全配置信息)的KeyWrapKey(128位)以及派生其他用途Key的EMSK(Extended Master Session Key)。
  5. M3消息
  STA处理完M2消息后,将回复M3消息,其内容如图所示:
802.11--WPS(Wi-Fi Protected Setup)协议简析
  sta的M3将携带以下信息:
   1) Registrar Nonce:来源于M2的Registrar Nonce属性;
   2) E Hash1和E Hash2:计算过程比较复杂,如下:
    a. 利用AuthKey和PIN码利用HMAC算法分别生成两个PSK。其中,PSK1由PIN码前半部分生成,PSK2由PIN码后半部分生成;
    b. 利用AuthKey对两个新随机数128 Nonce进行加密,以得到E-S1和E-S2;
    c. 利用HMAC算法及AuthenKey分别对(E-S1、PSK1、STA的D-H Key和AP的D-H Key)计算得到E Hash1。E Hash2则由E-S2、PSK2、STA的D-H Key和AP的D-H Key计算而来。
   3) Authenticator:STA利用AuthKey(STA收到M2的Registrar Nonce后也将计算一个AuthKey)计算出来的一串二进制位;
  6. M4消息
  AP收到并处理完M3后将回复M4,其内容如图所示:
802.11--WPS(Wi-Fi Protected Setup)协议简析
  AP的M4将携带以下信息:
   1) 计算R Hash1和R Hash2。其使用的PIN码为用户通过AP设置界面输入的PIN码。很显然,如果AP设置了错误PIN码的话,STA在比较R Hash 1/2和E Hash 1/2时就会发现二者不一致,从而可终止EAP-WSC流程;
   2) Encrypted Settings:AP利用KeyWrapKey加密R-S1得到的数据。
  7. M5消息
  M5消息和M4消息类似,Encrypted Settings为STA利用KeyWrapKey加密E-S1得来,如下图所示:
802.11--WPS(Wi-Fi Protected Setup)协议简析
  8. M6消息
  M6消息和M5消息类似,Encryped Settings为AP利用KeyWrapKey加密R-S2而来,如下图所示:
802.11--WPS(Wi-Fi Protected Setup)协议简析
  9. M7消息
  STA的M7将发送利用KeyWrapKey加密E-S2的信息给AP以进行验证,如下所示:
802.11--WPS(Wi-Fi Protected Setup)协议简析
  10. M8消息
  当AP确定M7消息正确无误后,它将发送M8消息,而M8将携带至关重要的安全配置信息,如下所示:
802.11--WPS(Wi-Fi Protected Setup)协议简析
  安全配置信息保存在Encrypted Settings中,它由KeyWrapKey加密。WSC规范规定,当Enrollee为STA时(对Registrar来说,AP也是Enrollee),Encrypted Settings将包含若干属性,其中最重要的就是Credential属性集合,该属性集的内容如下表所示:
802.11--WPS(Wi-Fi Protected Setup)协议简析
  11. WSC_DONE消息
  STA处理完M8消息后,将回复WSC_DONE消息给AP,表示自己已经成功处理M8消息。整个EAP-WSC就算完成了,接下来的就是断开重新连接的过程了:
   1) AP发送EAP-FAIL以及Deauthentication帧给STA;
   2) STA收到该帧后将取消和AP的关联;
   3) STA将重新扫描周围的无线网络。由于STA以及获取了AP的配置信息,所以它可以利用这些信息加入AP所在的无线网络。