WPS学习笔记

Architecture

2016011401.png

概述

Wi-Fi Simple Configuration 定义了一些新的802.11 IE。 这些IE包含在 Beacon,Probe Request和Probe Response帧中 。 这些IE的目的主要是告知其他设备执行WSC操作的能力。

Registration Protocol

协议主要有如下一些目的:

  1. 解决基本的连接性问题。
  2. 提供Enrollee和Registar之间的相互标识信息,启用私密配置功能。
  3. 安全地将WLAN设置和其他的配置信息从Registar传递到Enrollee。
  4. 建立每个设备的角色(AP,Registar和Enrollee)
  5. 建立Extended Master Session Key EMSK,用于保护更多的应用相关的配 置功能。

协议工作于两个阶段:

  1. discovery phase 交互Registar和Enrollee之间的描述性信息。 目的主要是能发现周围的Registrar设备,使自己能被Registar发现。 STA enrollee会先发送一个M1消息请求关联到Registar。
  2. 第二阶段 该阶段会到达Credential provisioning, 在M2,M2D,M8 消息结束。
    • M2D: Registar不能认证Enrollee。
    • M2: 只针对NFC等out of band传输的情况。
    • M8: 在M8中,会携带WLAN Credentials给Enrollee。

Timeout处理

Recommended timeout values are: retransmission timeout = 5 seconds, individual message processing timeout = 15 seconds, overall timeout for the entire protocol to complete = 2 minutes.

EAP Transport of Registration Protocol

WSC使用802.1X和EAP来传输带内注册协议消息,属性值以大端顺序传输。协 议映射到EAP的某个客制的方法中。 WSC不要求AP支持RADIUS,网络中也不需要包含一个认证服务器。

  1. Enrollees using Wi-Fi Simple Configuration are not granted direct access to the WLAN through the Wi-Fi Simple Configuration custom EAP method. The EAP method is used to configure the Enrollee with a Credential that can be used subsequently with whatever access method is supported by that WLAN. (注意EAP method与Access Method supported by the WLAN)

    如果AP只支持WPA2-Personal,则Enrollee只通过802.11X过程获取PSK, 然后解除关联,并使用获取的PSK重新连接网络。 如果AP支持802.1X认证,则Enrollee会首先运行WSC EAP的方法获取共享 的Credential,然后使用该密钥通过其他的EAP方法与网络重新连接。

  2. EAP message format

    2016042103.png

  3. EAP State Machine for Enrollee Registration

    2016042104.png

  4. EAP State Machine for Adding an External Registrar

    2016042105.png

消息

Registration Protocol消息通常封装在其他的消息类型中,如EAP或UPnP。

TLV

大部分WSC属性是简单的数据结构,但是有些是嵌套的数据结构,本身包含 其他的TLV属性。

2016042101.png

管理帧

  • 管理帧格式

    WSC Device Discovery是通过使用包含在Beacon,Probe Request和Probe Response中的IE信息来完成的。WSC的IE信息格式遵循IEEE 802.11的格式, 如下图所示 : 2016031401.png

  • 要点提要
    1. AP必须在Beacon和Probe Response帧中提供WSC IE信息,STA则必须在 Probe Request帧中提供WSC IE信息,以表明其支持WSC。
    2. STA要想使用EAP-WSC方法与AP进行连接,必须在(re)association request中包含一个WSC IE信息。
    3. 在WSC关联过程中, Capability IE中的Privacy域,RSN IE和WPA IE都 不相关,STA和AP都应该忽略。
    4. 如果(re)association request中包含WSC IE,AP必须与STA执行 EAP-WSC过程,而不能使用其他的安全握手协议。
    5. 成功关联后,STA会发送一个EAPOL-Start数据包给AP,并等待AP回复 EAP-Request/Identity。 如果(re)association request中包含一个 WSC IE信息,并且WSC IE的版本在2.0以后,则AP也可以在收到 EAPOL-Start之前直接向AP发送EAP-Request/Identiry。 当STA收到此 包后,它会响应一个EAP-Response-Identity来表明它将成功Enrollee 或Registar。
    6. 为了与1.0之前的版本兼容,启用WPA2-Personal网络,且支持WSC的AP 也要允许与这样的STA进行EAP-WSC关联交互:
      • 在Associate Request帧中不包含RSN IE或WPA IE,同时也不包含WSC IE。
      • 与这种STA进行EAP-WSC交互时,AP必须等待STA发送EAPOL-Start交互 帧,才允许进行之后的WAP-WSC交互过程。
    7. WSC的Element ID值为221, OUI的值为 0x 00 50 F2 04

消息类型

2016042102.png

In-band Setup Using a Standalone AP/Registrar

2016011402.png

Setup Steps

  1. The Enrollee sends its Discovery data in a probe request to a Wi-Fi Simple Configuration AP. The AP or wireless Registrar responds with its own Discovery data in the probe response.
  2. The user is prompted to enter the Enrollee’s device password into the AP/Registrar using a keypad interface or an out-of-band channel.
  3. The Enrollee connects and initiates 802.1X using the identity “WFASimpleConfig-Enrollee-1-0”.
  4. The Enrollee and Registrar exchange messages M1-M8 to provision the Enrollee.
  5. The Enrollee disassociates and reconnects, using its new WLAN authentication Credential.

P2P EAP WSC交互过程

P2P GO协商成功之后 ,作为GC,会调用 wpas_start_wps_enrollee 开始WPS 协商过程,以获取GO提供的PMK。 如果WPS方法使用PBC方式,则直接进入 wpas_wps_start_pbc 在该函数中,会添加一个新网络,并设置一些参数:

key_mgmt  WPS
eap  WSC
identity  "WFA-SimpleConfig-Enrollee-1-0"
phase1  "pbc=1"

然后扫描特定的SSID,即GO创建的SSID。

在函数 wpas_start_assoc_cb 会向GO发出Association Request。 之后,会调用:

  1. wpa_supplicant_rsn_supp_set_config 设置 rsn_supp_config
  2. wpa_supplicant_initiate_eapol 配置EAPOL状态机。

关联成功后, 在函数 wpa_supplicant_event_assoc ,首先会调用 wpa_sm_notify_assoc 通知WPA状态机,当前网络已经连接上。 调用 eapol_sm_notify_portEnabled ,发生如下变化: SUPP_PAE 进入 CONNECTING, 启用timer, 1秒钟执行一次,之后进入 IDLE EAP 进入 INITIALIZE ,完成初始化进入 IDLE

设置等待对方一第一包EAPOL Packet的超时时间为10秒。

1秒钟后,Enrolle会发送 EAPOL-START ,使用的函数是: wpa_supplicant_eapol_send

接收EAPOL Packet的代码如下:

drv->eapol_sock = socket(PF_PACKET, SOCK_DGRAM, htons(ETH_P_PAE));
if (drv->eapol_sock < 0) {
        wpa_printf(MSG_ERROR, "nl80211: socket(PF_PACKET, SOCK_DGRAM, ETH_P_PAE) failed: %s",
                   strerror(errno));
        goto failed;
}

if (eloop_register_read_sock(drv->eapol_sock, handle_eapol, drv, NULL))
{
        wpa_printf(MSG_INFO, "nl80211: Could not register read socket for eapol");
        goto failed;
}

负责处理的函数是 handle_eapol

现在观察一下 PAE_BE 状态机与 EAP 状态机的状态变化:

PAE_BE 为1号状态机, EAP 为2号状态机

  1. 准备发送 EAPOL-START 阶段 从 IDLE 进入 CONNECTING 发送 txStart
  2. 收到 EAPOL-Identity SUPP_PAE 进入 RESTART 状态 EAP 状态机进入 INITIALIZE 进入实始化,之后进入 IDLE 。 之后, SUPP_PAE 进入状态 AUTHENTICATING 后,进行一些变量设置后, 进入 REQUEST 状态. EAP 进入 RECEIVED 状态,解析EAP Request Packet后,进入 IDENTITY 状态。 处理完后,随后进入 SEND_RESPONSE ,随后进 入 IDLE
  3. 发送 EAPOL-Identity 的响应包 SUPP_BE 进入状态 RESPONSE ,发送成功后,进入 RECEIVE
  4. 接收 Start EAP Response帧中。 SUPP_BE 进入 REQUEST EAP 进入状态 RECEIVED , 解析数据包后,进入 GET_METHOD . 比如Methods为(WSC), 接受请求的方法后,会调用对应方法的初始化函数 。 之后进入 METHOD , 调用EAP方法的处理函数 。 处理完后,进入 SEND_RESPONSE , 随后进入 IDLESUPP_BE 进入状态 RESPONSE
  5. 发送 M1 当发送完 M1 packet后, SUPP_BE 进入 RECEIVE 状态,
  6. 接收 M2 SUPP_BE 进入 REQUEST EAP 进入 RECEIVED ,解析数据包后,进入 METHOD 状态 ,并调用其 消息处理函数 。处理完后, EAP 进入 SEND_RESPONSE , 随后进入 IDLESUPP_BE 进入状态 RESPONSE .
  7. 发送 M3 发送后, SUPP_BE 进入 RECEIVE
  8. 接收 M4 收到数据后, SUPP_BE 进入 REQUEST EAP 进入 RECEIVED 状态,解析数据包后, 进入 METHOD 状态。 并 调用方法的处理函数。处理完后, EAP 进入 SEND_RESPONSE , 随后进入 IDLESUPP_BE 进入状态 RESPONSE .
  9. 发送 M5 发送后, SUPP_BE 进入 RECEIVE
  10. 接收 M6 收到数据后, SUPP_BE 进入 REQUEST EAP 进入 RECEIVED 状态,解析数据包后, 进入 METHOD 状态。 并 调用方法的处理函数 。处理完后, EAP 进入 SEND_RESPONSE , 随后进入 IDLESUPP_BE 进入状态 RESPONSE .
  11. 发送 M7 发送后, SUPP_BE 进入 RECEIVE
  12. 接收 M8 收到数据后, SUPP_BE 进入 REQUEST EAP 进入 RECEIVED 状态,解析数据包后, 进入 METHOD 状态。 并 调用方法的处理函数 。处理完后, EAP 进入 SEND_RESPONSE , 随后进入 IDLESUPP_BE 进入状态 RESPONSE . 这一步收到了Credentials信息。
  13. 发送 WSC_Done 发送后, SUPP_BE 进入 RECEIVE
  14. 接收 EAP-Failure 收到数据后, SUPP_BE 进入 REQUEST SUPP_PAE 进入 HELD 状态,随后进入 RECEIVE 状态,随后进入 FAIL 状态,随后进入 IDLE