ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
由图6-7所示的RP协议交互流程可知,Discovery Phase阶段之后,STA和AP将通过EAP包交换来完成安全信息协商。WSC规范利用EAP的扩展功能新定义了一种EAP算法,即EAPWSC。EAP-WSC的包格式如图6-22所示。 :-: ![](https://box.kancloud.cn/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://box.kancloud.cn/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://box.kancloud.cn/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://box.kancloud.cn/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://box.kancloud.cn/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://box.kancloud.cn/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://box.kancloud.cn/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://box.kancloud.cn/f2fd897bbb2ba5eef2dc1a750d9b68fd_845x473.jpg) 图6-28 M5消息示例 图6-28所示的Encrypted Settings为STA利用KeyWrapKey加密E-S1得来。 M6消息如图6-29所示。 :-: ![](https://box.kancloud.cn/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://box.kancloud.cn/6457f15d5afba8c862b28f4358fd6a72_840x477.jpg) 图6-30 M7消息示例 当AP确定M7消息正确无误后,它将发送M8消息,而M8将携带至关重要的安全配置信息,如图6-31所示。 :-: ![](https://box.kancloud.cn/19895ba3edab961f600200327c7c16d1_847x305.jpg) 图6-31 M8消息示例 图6-31中,安全配置信息保存在Encrypted Settings中,它由KeyWrapKey加密。WSC规范规定,当Enrollee为STA时(对Registrar来说,AP也是Enrollee),Encrypted Settings将包含若干属性,其中最重要的就是Credential属性集合,该属性集的内容如表6-6所示。 :-: ![](https://box.kancloud.cn/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://box.kancloud.cn/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相关的实现代码。如果读者真正掌握本节所示知识点的话,下面一节的学习过程将非常轻松。