连接三步骤

  1. 扫描(Probe Request、Probe Response)
  2. 认证(Authentication)
  3. 关联(Association Request、Association Response)

1. 扫描阶段

STA 发送 Probe Req 帧,携带 SSID 表明欲加入的网络,携带 Supported Rates 表明自身的能力。

AP 回复 Probe Rsp 帧,这是 AP 的义务,(AP 允许此 STA 连接的情况下)也携带 Supported Rates 表明自身的能力。

作用:STA 获取 AP 的能力,决定要不要加入该网络;AP 获取 STA 能力,并根据自身情况决定要不要让该 STA 加入自身网络。

打个比方:STA 好比应聘者, AP 好比公司。应聘者投简历表明自己想要进入哪家公司,同时简历上面写上自己的能力。公司收到简历后,考虑还需不需要招人以及该应聘者能力情况,决定要不要准备招收该应聘者。如果准备招收,则公司也将自身的一些能力情况介绍给该应聘者,毕竟双向选择嘛。如果决定不接收,则回复拒绝,当然公司会稍微委婉点:回去等通知。

2. 认证阶段

STA 收到 Probe Rsp 帧,决定要不要加入此网络,若决定加入,则发送 Auth 帧进行身份认证,否则流程接收。

STA 在 Auth 包中表明认证算法类型,0:Open System,1:Shared Key。

Shared Key 方式即代表使用 WEP 加密方式,Open System 方式即代表使用 TKIP/WPA/WPA2 方式。

使用 Shared Key 方式,是真实的身份认证过程,Auth 共有 4 步骤:

  • 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 只有两步骤:

  • Auth seq#1:由 STA 发起认证请求,携带认证算法类型:Open System

  • Auth seq#2:AP 直接回复 successful,因为真正的身份认证会放在 EAPOL 阶段

WEP、WPA认证流程简图.png

接上个比方:如果应聘者收到了公司的准备接收意向,则会向公司提出面试申请。公司收到申请后,会发面试试题或者当面面试。应聘者提交答案或者当面回答问题。公司检查答案是否正确,如果正确,则面试通过,同时发放 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,并且也决定要去这家公司,则该应聘者会去公司报到,同时携带自身体检报告。公司接待该应聘者,如果体检报告不合格,公司最终也可以决定不接收该应聘者。如果体检报告合格,公司则会给该应聘者办理入职手续,并且给该应聘者分配一个工号,从此该应聘者便是公司的一员了。

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,如下

image-20200920011731020

密钥生成公式如下,相信介绍请查看《WiFi 基础(六)—— 认证和加密原理》 $$ PTK=PRF(AA, SA, ANonce, SNonce, PMK) $$

  • 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

  • step 3:AP 收到Message 2,此时也具备了所有的五元组信息,也成功计算出了 PTK,并用 PTK 的 KCK 位对收到的数据进行计算得到 MIC,计算得到的 MIC 与收到的 MIC 进行对比,如果相等则代表 AP 和 STA 拥有相同的 PTK,进而可以确定两者拥有相同的 PMK,进而可以确定两者拥有相同的密码,AP 向 STA 回复 Message 3,包含被加密的 GTK(用于对广播数据帧和组播数据帧加密) 和 MIC。如果不相等,则身份认证失败,回复认证失败报文。至此,可以完成身份认证的工作。且,身份认证成功之后,数据可以通过 PTK 进行加解密。

  • step 4:STA 收到 被加密了的 GTK,因为手中已有 PTK,所以可以从中解出 GTK。然后 AP 和 STA 安装 PTK 和 GTK,整个认证和密钥交换过程至此结束。

接上个比方:WEP 相当于采用的是社招的方式,前期对招聘者就进行了严格的面试筛选,只有合格的才被录取,入职之后不会再进行淘汰。WPA 则相当于采用的是校招的方式,前期不刷人,想来实习的都可以进来,不过进来后会进行筛选,不合格的一样会被淘汰,并且,进入公司工作后,有更完整的制度、更全方位的考察,更能保证留下来的都是精英(WPA 比 WEP 更加安全)。