Android wifi — WiFi空口包交互过程
0. 前言
本文通过抓取的WiFi空口包,简要分析下WiFi的连接过程。
连接三步骤
- 探测(Probe Request、Probe Response)
- 认证(Authentication)
- 关联(Association Request、Association Response)
如下图可见,WiFi连接过程可大致分为 探测/扫描(Probe)-> 认证(Authentication) -> 关联(Association) -> EAPOL 四个阶段。其中EAPOL不是必要阶段,当加密方式为none或wep时,没有此阶段。下面逐一分析各个阶段。
1. 探测阶段
STA 发送 Probe Req 帧,携带 SSID 表明欲加入的网络,携带 Supported Rates 表明自身的能力。
AP 回复 Probe Rsp 帧,这是 AP 的义务,(AP 允许此 STA 连接的情况下)也携带 Supported Rates 表明自身的能力。
作用:STA 获取 AP 的能力,决定要不要加入该网络;AP 获取 STA 能力,并根据自身情况决定要不要让该 STA 加入自身网络。
打个比方:STA 好比应聘者, AP 好比公司。应聘者投简历表明自己想要进入哪家公司,同时简历上面写上自己的能力。公司收到简历后,考虑还需不需要招人以及该应聘者能力情况,决定要不要准备招收该应聘者。如果准备招收,则公司也将自身的一些能力情况介绍给该应聘者,毕竟双向选择嘛。如果决定不接收,则回复拒绝,当然公司会稍微委婉点:回去等通知。
1.1 Probe Request
sta主动发送Req包,表明想加入的网络,以及通过Supported Rates表明自身的能力。
1.2 Probe Response
AP收到Req帧后,会回复Rsp帧,这是AP的义务(AP允许此sta连接的前提下),且通过Supported Rates表明自身能力。
2. 认证阶段
Sta 收到Rsp帧,根据自身能力及AP能力,决定要不要加入此网络,若决定加入,则发送 Auth 帧进行身份认证,否则流程结束。此流程共有两个帧:
2.1 Authentication Req
sta 通过Authentication Req帧表明自己的认证算法类型:0 -> Open System; 1 -> Shared Key。
Shared Key 方式即代表 WEP加密方式,Open System即代表 TKIP/WPA/WPA2方式。
2.1.1 Shared Key
使用Shared Key方式,是真实的认证过程,此时,没有第四阶段EAPOL。Auth认证共有四步:
-
Auth seq#1:由 STA 发起认证请求,携带认证算法类型:Shared Key
-
Auth seq#2:AP 回复一个挑战明文(challenge text )
-
Auth seq#3:STA 使用预设密钥对挑战铭文进行加密,然后发送给 AP
-
Auth seq#4:AP 收到后,使用密钥对收到的消息进行解密,如果解密成功且明文一致表示认证成功,回复 successful
2.2.2 Open System
使用Open System方式,认证过程放到最后的EAPOL阶段,Auth只有两步:
-
Auth seq#1:由 STA 发起认证请求,携带认证算法类型:Open System
-
Auth seq#2:AP 直接回复 successful,因为真正的身份认证会放在 EAPOL 阶段
2.2.3 对比Shared Key & Open System
接上个比方:如果应聘者收到了公司的准备接收意向,则会向公司提出面试申请。公司收到申请后,会发面试试题或者当面面试。应聘者提交答案或者当面回答问题。公司检查答案是否正确,如果正确,则面试通过,同时发放 offer;如果答案不正确,则面试失败,回复不予接收,当然会委婉点。
3. 关联阶段
STA 收到认证通过报文后,决定要加入当前网络,就会发送 Assoc Req 帧。指明要加入的网络的类型、自己的 Listen Interval(聆听间隔,即 STA 多久聆听一次 Beacon 帧,以监听 TIM 信息)和一些能力信息。
AP 收到 Assoc Req 帧后,最终确认 STA 的 Listen Interval 自己能不能接受,能力信息是否匹配,如果一切 OK,回复 Assoc Rsp 帧,携带 AID(Association ID) 和 successful 信息,表明关联成功。否则,回复 Assoc Rsp 帧,携带 failed 信息,表明关联失败,同时 AP 也会从 mac table 中删除此 STA。
接上个比方:如果应聘者收到了 offer,并且也决定要去这家公司,则该应聘者会去公司报到,同时携带自身体检报告。公司接待该应聘者,如果体检报告不合格,公司最终也可以决定不接收该应聘者。如果体检报告合格,公司则会给该应聘者办理入职手续,并且给该应聘者分配一个工号,从此该应聘者便是公司的一员了。
3.1 Association Request
3.2 Association Rsponse
4. EAPOL
如果采用的是 Shared Key 方式,即 WEP 加密方式,认证已在 Auth 阶段完成,完成上述关联阶段即已正式加入网络,后续可以通过密钥对消息加解密和 AP 进行正常通信了。
如果采用的是 Open System 方式,即 TKIP/WPA/WPA2 方式,在 Auth 阶段其实没有进行身份认证的工作,在 Auth 阶段就决定把身份认证的工作放在当前 EAPOL 阶段了。所以此种方式下,要进行 EAPOL 步骤,常见的就是 4-way handshake,当然还有 2-way-handshake。此处只讨论 4-way handshake,如下
密钥生成公式如下,其底层原理是哈希算法,详细后续再进行研究
部分名词解释如下:
PTK 就是加密用的密钥。
PRF 可以简单理解为 sha1 算法。
AA 是 Authenticator(认证者) 的 MAC 地址。
SA 是 Supplicant(申请者)的 MAC 地址。
ANonce 是 Authenticator 产生的随机字串。
SNonce 是 Supplicant 产生的随机字串。
PMK 是由密码和 SSID 信息生成的密钥,如果 STA 和 AP 拥有相同的密码,则此密钥值也会相同,反之也成立。
- step 1:AP 首先发送 Message 1,包含 ANonce
- step 2:STA 收到 ANonce,同时也能拿到 AA(Authenticator addr),SA(Supplicant addr)是自己本身的信息,SNonce 又是自己现在生成的信息,PMK 是通过自身密码和 SSID 计算得到的,也是已知信息。此刻,STA 已具备计算 PTK 的所有五元组信息,所有能够计算得到 PTK。然后用 PTK 的 KCK 位对马上要发送的数据包进行计算得到 MIC,并将 MIC 附着在包尾一同发送给 AP
- AP收到Message2,同理,此时也具备所有五元组信息,并成功计算出PTK。AP使用PTK的KCK位对收到的数据进行计算得到MIC,并将计算得到的MIC与收到的MIC进行对比,若相等则代表AP和STA拥有相同的PTK,进而确认两者拥有相同的PMK,即两者拥有相同的密码。AP向STA回复Message3,包含被加密的GTK(用于对广播数据帧和组播数据帧加密)和MIC。如果不相等,则身份认证失败,回复认证失败报文,结束认证流程。
- STA收到被加密的GTK,因为自身有PTK,所以可从中解开GTK,然后AP和STA安装PTK和GTK,整个认证和密钥交换流程至此结束。
接上个比方:WEP 相当于采用的是社招的方式,前期对招聘者就进行了严格的面试筛选,只有合格的才被录取,入职之后不会再进行淘汰。WPA 则相当于采用的是校招的方式,前期不刷人,想来实习的都可以进来,不过进来后会进行筛选,不合格的一样会被淘汰,并且,进入公司工作后,有更完整的制度、更全方位的考察,更能保证留下来的都是精英(WPA 比 WEP 更加安全)。