WiFi 基础(四)—— 连接过程
连接三步骤
- 扫描(Probe Request、Probe Response)
- 认证(Authentication)
- 关联(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 阶段
接上个比方:如果应聘者收到了公司的准备接收意向,则会向公司提出面试申请。公司收到申请后,会发面试试题或者当面面试。应聘者提交答案或者当面回答问题。公司检查答案是否正确,如果正确,则面试通过,同时发放 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,如下
密钥生成公式如下,相信介绍请查看《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 更加安全)。