本文通过抓取的WiFi空口包,简要分析下WiFi的连接过程。
连接三步骤
如下图可见,WiFi连接过程可大致分为 探测/扫描(Probe)-> 认证(Authentication) -> 关联(Association) -> EAPOL 四个阶段。其中EAPOL不是必要阶段,当加密方式为none或wep时,没有此阶段。下面逐一分析各个阶段。
STA 发送 Probe Req 帧,携带 SSID 表明欲加入的网络,携带 Supported Rates 表明自身的能力。
AP 回复 Probe Rsp 帧,这是 AP 的义务,(AP 允许此 STA 连接的情况下)也携带 Supported Rates 表明自身的能力。
作用:STA 获取 AP 的能力,决定要不要加入该网络;AP 获取 STA 能力,并根据自身情况决定要不要让该 STA 加入自身网络。
打个比方:STA 好比应聘者, AP 好比公司。应聘者投简历表明自己想要进入哪家公司,同时简历上面写上自己的能力。公司收到简历后,考虑还需不需要招人以及该应聘者能力情况,决定要不要准备招收该应聘者。如果准备招收,则公司也将自身的一些能力情况介绍给该应聘者,毕竟双向选择嘛。如果决定不接收,则回复拒绝,当然公司会稍微委婉点:回去等通知。
sta主动发送Req包,表明想加入的网络,以及通过Supported Rates表明自身的能力。
AP收到Req帧后,会回复Rsp帧,这是AP的义务(AP允许此sta连接的前提下),且通过Supported Rates表明自身能力。
Sta 收到Rsp帧,根据自身能力及AP能力,决定要不要加入此网络,若决定加入,则发送 Auth 帧进行身份认证,否则流程结束。此流程共有两个帧:
sta 通过Authentication Req帧表明自己的认证算法类型:0 -> Open System; 1 -> Shared Key。
Shared Key 方式即代表 WEP加密方式,Open System即代表 TKIP/WPA/WPA2方式。
使用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
使用Open System方式,认证过程放到最后的EAPOL阶段,Auth只有两步:
接上个比方:如果应聘者收到了公司的准备接收意向,则会向公司提出面试申请。公司收到申请后,会发面试试题或者当面面试。应聘者提交答案或者当面回答问题。公司检查答案是否正确,如果正确,则面试通过,同时发放 offer;如果答案不正确,则面试失败,回复不予接收,当然会委婉点。
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,并且也决定要去这家公司,则该应聘者会去公司报到,同时携带自身体检报告。公司接待该应聘者,如果体检报告不合格,公司最终也可以决定不接收该应聘者。如果体检报告合格,公司则会给该应聘者办理入职手续,并且给该应聘者分配一个工号,从此该应聘者便是公司的一员了。
如果采用的是 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 拥有相同的密码,则此密钥值也会相同,反之也成立。
接上个比方:WEP 相当于采用的是社招的方式,前期对招聘者就进行了严格的面试筛选,只有合格的才被录取,入职之后不会再进行淘汰。WPA 则相当于采用的是校招的方式,前期不刷人,想来实习的都可以进来,不过进来后会进行筛选,不合格的一样会被淘汰,并且,进入公司工作后,有更完整的制度、更全方位的考察,更能保证留下来的都是精英(WPA 比 WEP 更加安全)。