6.3.3 EAP-WSC介绍
最后更新于:2022-04-02 06:04:24
由图6-7所示的RP协议交互流程可知,Discovery Phase阶段之后,STA和AP将通过EAP包交换来完成安全信息协商。WSC规范利用EAP的扩展功能新定义了一种EAP算法,即EAPWSC。EAP-WSC的包格式如图6-22所示。
:-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/dd718e1e9dee1b5819bed797432690ee_1192x490.jpg)
图6-22 EAP-WSC包格式
对于EAP-WSC来说,图6-22中各字段取值情况如下。
* Type取值为254,代表EAP包中的内容由Vendor定义。
* 对于WSC来说,Vendor-Id取值为0x00372a,Vendor Type取值为0x0000-0001(WFA中,该值表示Simple-Config)。
* Op-Code及以后的内容由EAP-WSC定义,其取值有六种情况(见表6-5)。
* Flags包含两个标志位,一个是MF标志位(More Fragments,取值为0x01,代表EAP分片包),另一个是LF标志位(Length Field,值为0x02)。
* 如果LF标志位被设置,则Message Length字段存在。该字段表示Message data的长度。
* Message data为WSC定义的Attribute。和WSC IE类似,WSC规范对不同EAP-WSC包携带的Attribute有严格要求。
表6-5所示为EAP-WSC Op-Code的取值。
:-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/0360ba4a62bd0ecc0c33cab794237fb6_1267x593.jpg)
表6-5 EAP-WSC Op-Code取值说明
EAP-WSC和第4章介绍的4-Way Handshake类似,STA和AP双方要派生一些Key用于加密所传输的信息。
在STA和AP双方开展EAP-WSC流程前,AP需要确定STA的Identity以及使用的身份验证算法。该过程涉及三次EAP包交换(参考图3-38)。这三次包交换的内容分别如下。
* AP发送EAP-Request/Identity以确定STA的ID。
* 对于打算使用WSC认证方法的STA来说,它需要在回复的EAP-Response/Identity包中设置Identity为"WFA-SimpleConfig-Enrollee-1-0"。
* AP确定STA的Identity为"WFA-SimpleConfig-Enrollee-1-0"后,将发送EAPRequest/WSC_Start包以启动EAP-WSC认证流程。这个流程讲涉及M1~M8相关的知识。
下面我们将结合实例来介绍。
>[info] 注意 这些知识也是后续分析代码时的理论依据,请读者务必认真体会。
**1、M1和M2**
M1消息由STA发送给AP。图6-23所示为Galaxy Note 2发送的M1消息。
如前文所述,EAP-WSC消息的组成结构也是一个一个Attribute。图6-23所示的大部分Attribute在前文都已见过了,此处仅介绍黑框中所列的几个Attribute。
:-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/7b6d3fe92d5331b3e92c6ceac53dc7ae_620x678.jpg)
图6-23 M1消息示例
* Message Type:代表Enrollee和Registrar发送的消息类型,其可取值从0x01(代表Beacon帧)到0x0F(代表WSC_DONE)。该属性一般只在EAP-WSC帧中用到。对于M1消息而言,其Message Type取值为0x04。
* UUID-E:代表STA的UUID。MAC Address代表STA的MAC地址。
* Enrollee Nonce:代表STA产生的一串随机数,它用于后续的密钥派生等工作。
* Public Key:STA和AP的密钥派生源头也是PMK。不过和第4章介绍的PSK不同的是,在WSC PIN法中并没有使用PSK(PIN码的作用不是PSK)。双方采用了Diffie-Hellman[6](D-H)密钥交换算法。该算法使得通信的双方可以用这个方法确定对称密钥。注意,D-H算法只能用于密钥的交换,而不能进行消息的加密和解密。通信双方确定要用的密钥后,要使用其他对称密
* 钥操作加密算法以加密和解密消息。Public Key属性包含了Enrollee的D-H Key值。
* Authentication Type Flags和Encryption Type Flags:表示Enrollee支持的身份验证算法以及加密算法类型。
* Connection Type Flags:代表设备支持的802.11网络类型,值0x01代表ESS,值0x02代表IBSS。
图6-24所示为Galaxy Note 2中Authentication Type Flags和Encryption Type Flags两个属性的取值情况。
:-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/3b0b862f049da615669295d81bc01f73_1199x233.jpg)
图6-24 Authentication/Encryption Type Flags取值示例
图6-24左图所示为Authentication Type Flags的取值情况。其中,"WPA"和"WPA2"标志位是"WPA-Enterprise"以及"WPA2-Enterprise"之意。
AP收到并处理M1后,将回复M2。M2的内容如图6-25所示。
:-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/dde233bb19176e9b2c24bd3d6e7b24fa_600x693.jpg)
图6-25 M2消息示例
图6-25中,AP的M2将携带以下信息。
* Registrar Nonce:Registrar生成的随机数。
* Public Key:D-H算法中,Registrar一方的D-H Key值。
* Authenticator:由HMAC-SHA-256及AuthKey(详情见下文)算法得来一个256位的二进制串。注意,Authenticator属性只包含其中的前64位二进制内容。
>[info] 提示 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)。
**2、M3和M4**
STA处理完M2消息后,将回复M3消息,其内容如图6-26所示。
:-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/91c247f7850c85f45a1013b6b8e9d351_873x667.jpg)
图6-26 M3消息示例
图6-26中:
* Registrar Nonce值来源于M2的Registrar Nonce属性。
* E Hash1和E Hash2属性的计算比较复杂,详情见下文。
* Authenticator是STA利用AuthKey(STA收到M2的Registrar Nonce后也将计算一个AuthKey)计算出来的一串二进制位。
根据WSC规范,E Hash1和E Hash2的计算过程如下。
1. 利用AuthKey和PIN码利用HMAC算法分别生成两个PSK。其中,PSK1由PIN码前半部分生成,PSK2由PIN码后半部分生成。
2. 利用AuthKey对两个新随机数128 Nonce进行加密,以得到E-S1和E-S2。
3. 利用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计算而来。
AP收到并处理完M3后将回复M4,其内容如图6-27所示。
:-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/324e7e73ffd1f072e39635c58bc90305_840x561.jpg)
图6-27 M4消息示例
由图6-27可知:
* AP将计算R Hash1和R Hash2。其使用的PIN码为用户通过AP设置界面输入的PIN码。很显然,如果AP设置了错误PIN码的话,STA在比较R Hash 1/2和E Hash 1/2时就会发现二者不一致,从而可终止EAP-WSC流程。
* Encrypted Settings为AP利用KeyWrapKey加密R-S1得到的数据。
**3、M5和M6**
M5消息和M4消息类似,如图6-28所示。
:-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/f2fd897bbb2ba5eef2dc1a750d9b68fd_845x473.jpg)
图6-28 M5消息示例
图6-28所示的Encrypted Settings为STA利用KeyWrapKey加密E-S1得来。
M6消息如图6-29所示。
:-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2c91e60d1cd26b52fc444eeabcb27c7f_837x391.jpg)
图6-29 M6消息示例
图6-29所示的M6消息中,Encryped Settings为AP利用KeyWrapKey加密R-S2而来。
**4、M7和M8**
由M5、M6的内容可知,STA的M7将发送利用KeyWrapKey加密E-S2的信息给AP以进行验证,如图6-30所示。
:-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/6457f15d5afba8c862b28f4358fd6a72_840x477.jpg)
图6-30 M7消息示例
当AP确定M7消息正确无误后,它将发送M8消息,而M8将携带至关重要的安全配置信息,如图6-31所示。
:-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/19895ba3edab961f600200327c7c16d1_847x305.jpg)
图6-31 M8消息示例
图6-31中,安全配置信息保存在Encrypted Settings中,它由KeyWrapKey加密。WSC规范规定,当Enrollee为STA时(对Registrar来说,AP也是Enrollee),Encrypted Settings将包含若干属性,其中最重要的就是Credential属性集合,该属性集的内容如表6-6所示。
:-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/433eac38b405140b2679d5c948d0c8a5_1264x407.jpg)
表6-6 Credential属性集合的内容
由表6-6可知,当STA收到M8并解密其中的Credential属性集合后,将得到AP的安全设置信息。很显然,如果不使用WSC,用户需要手动设置这些信息。使用了WSC后,这些信息将在M8中由AP发送给STA。
接下来,STA就可以利用这些信息加入AP对应的目标无线网络了。
**5、EAP-WSC总结**
EAP-WSC M1~M8一共涉及8次EAP包交换,每次帧交换的内容如图6-32所示。
:-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/88fc2cab0b3d0b269bf8a335ef530cd2_599x447.jpg)
图6-32 EAP-WSC帧交换内容
图6-32对前面几小节所提到的EAP-WSC帧内容进行了简化,其中:
* Description代表UUID、Manufacturer、MAC地址等信息。
* PKE和PKR代表D-H算法的Enrollee方的Key以及Registrar方的Key。
* M*x代表没有包含HMAC-SHA-256结果的第X次消息内容。
* HMACAuthenKey代表利用AuthenKey和HMAC-SHA-256算法进行计算。
* ENCKeyWrapKey代表利用KeyWrapKey进行加密。
* “[…]”中的内容为可选信息。
* N1和N2分别代表Enrollee和Registrar的Nonce。
STA处理完M8消息后,将回复WSC_DONE消息给AP,表示自己已经成功处理M8消息。接下来的工作就如图6-7所示一样。
* AP发送EAP-FAIL以及Deauthentication帧给STA。STA收到该帧后将取消和AP的关联。
* STA将重新扫描周围的无线网络。由于STA以及获取了AP的配置信息,所以它可以利用这些信息加入AP所在的无线网络。
以上对WSC理论知识进行了一番介绍。其中有一些知识点请读者注意。
* WSC的组成结构。规范中定义了AP、Enrollee和Registrar三大组件。日常生活中比较常见的实体是作为Enrollee的智能手机,以及集成了AP和Registrar功能的无线路由器(StandaloneAP)。
* WSC拓展了802.11 IE的内容,而WSC IE包含了由WSC定义的不同Attribute。了解这些Attribute的作用对于理解WSC非常重要。另外,规范还对管理帧包含什么样的Attribute有严格规定。
* STA和Standalone AP使用RP协议交互的流程如图6-7所示。另外,请读者掌握EAP-WSCM1到M8帧包含的属性及作用。
>[info] 注意 完整的WSC规范所包含的知识点比本节阐述得要多。在此,建议读者先学完本章内容后再去研读WSC规范。
下面来看Android中WSC相关的实现代码。如果读者真正掌握本节所示知识点的话,下面一节的学习过程将非常轻松。
';