6.3.3 EAP-WSC介绍[4][5]
由图6-7所示的RP协议交互流程可知,Discovery Phase阶段之后,STA和AP将通过EAP包交换来完成安全信息协商。WSC规范利用EAP的扩展功能新定义了一种EAP算法,即EAP-WSC。EAP-WSC的包格式如图6-22所示。
图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的取值。
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"后,将发送EAP-Request/WSC_Start包以启动EAP-WSC认证流程。这个流程讲涉及M1~M8相关的知识。下面我们将结合实例来介绍。
注意 这些知识也是后续分析代码时的理论依据,请读者务必认真体会。
1.M1和M2
M1消息由STA发送给AP。图6-23所示为Galaxy Note 2发送的M1消息。
如前文所述,EAP-WSC消息的组成结构也是一个一个Attribute。图6-23所示的大部分Attribute在前文都已见过了,此处仅介绍黑框中所列的几个Attribute。
图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两个属性的取值情况。
图6-24 Authentication/Encryption Type Flags取值示例
图6-24左图所示为Authentication Type Flags的取值情况。其中,"WPA"和"WPA2"标志位是"WPA-Enterprise"以及"WPA2-Enterprise"之意。
AP收到并处理M1后,将回复M2。M2的内容如图6-25所示。
图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位二进制内容。
提示 AP发送M2之前,会根据Enrollee Nonce、Enrollee MAC以及Registrar Nonce并通过D-H算法计算一个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所示。
图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所示。
图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所示。
图6-28 M5消息示例
图6-28所示的Encrypted Settings为STA利用KeyWrapKey加密E-S1得来。
M6消息如图6-29所示。
图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所示。
图6-30 M7消息示例
当AP确定M7消息正确无误后,它将发送M8消息,而M8将携带至关重要的安全配置信息,如图6-31所示。
图6-31 M8消息示例
图6-31中,安全配置信息保存在Encrypted Settings中,它由KeyWrapKey加密。WSC规范规定,当Enrollee为STA时(对Registrar来说,AP也是Enrollee),Encrypted Settings将包含若干属性,其中最重要的就是Credential属性集合,该属性集的内容如表6-6所示。
由表6-6可知,当STA收到M8并解密其中的Credential属性集合后,将得到AP的安全设置信息。很显然,如果不使用WSC,用户需要手动设置这些信息。使用了WSC后,这些信息将在M8中由AP发送给STA。
接下来,STA就可以利用这些信息加入AP对应的目标无线网络了。
5.EAP-WSC总结
EAP-WSC M1~M8一共涉及8次EAP包交换,每次帧交换的内容如图6-32所示。
图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功能的无线路由器(Standalone AP)。
·WSC拓展了802.11 IE的内容,而WSC IE包含了由WSC定义的不同Attribute。了解这些Attribute的作用对于理解WSC非常重要。另外,规范还对管理帧包含什么样的Attribute有严格规定。
·STA和Standalone AP使用RP协议交互的流程如图6-7所示。另外,请读者掌握EAP-WSC M1到M8帧包含的属性及作用。
注意 完整的WSC规范所包含的知识点比本节阐述得要多。在此,建议读者先学完本章内容后再去研读WSC规范。
下面来看Android中WSC相关的实现代码。如果读者真正掌握本节所示知识点的话,下面一节的学习过程将非常轻松。