WIFI无线网络之四次握手

概述

Wi-Fi 中的 “四次握手”(4-way handshake) 是指 WPA(Wi-Fi Protected Access) 和 WPA2 安全协议中使用的一个核心过程。它的主要目的是在无线接入点(AP)和客户端设备(STA,如手机、笔记本电脑)之间安全地协商并建立用于加密后续通信数据的密钥(PTK 和 GTK),同时进行相互认证。

这个过程发生在客户端成功关联(Association)到AP之后,但在实际数据传输开始之前。它是确保无线连接安全性的关键一步。

WPA主要过程如下图:
wpa.png

了解整个过程之前,先要了解下这个过程中所涉及到的几种KEY。

KEY介绍

  • MSK (Master Session Key)
    由 802.1X/EAP 或 PSK 身份认证后生成的第一个密钥。

  • PMK (Pairwise Master Key)
    PMK 是由 MSK 生成,WPA2/PSK 的情况下,当 supplicantauthenticator 身份验证后,PSK 变成 PMK。PMK 会驻留在 AP 和所有 Station,不需要进行 key 交换,用它来生成用于加密单播数据的PTK。

  • GMK (Group Master Key)
    GMK 用在四次握手来生成 GTK,GMK 在 AP 端由 MSK 生成,所有连接到该 AP 的 Station 共享。

链路层加密协议使用的两种密钥:

  • PTK(Pairwise Transit key)
    PTK用来加密STA和AP之间所有的单播数据包,AP 与每个 Station 通讯用的 PTK 都是唯一的。
  • GTK(Group Temporal Key)
    GTK用来加密AP和STA之间的多播/组播数据包,连接该AP的所有STA共享一个GTK.

KEY的生成

KEY的分层:
key.png

PTK的生成

PTK 生成函数:

PTK = PRF(PMK + ANONCE + SNONCE + MAC(AA) + MAC(SA))

PRF是 pseudo-random function 的缩写,表示伪随机函数,PMK、ANONCE、SNONCE、Mac(AA) 和Mac(SA) 作为它的输入参数:

  • PMK 下面会谈到;
  • ANONCE 是 AP 生成的随机数,A 表示 authenticator;
  • SNONCE 是 Station 生成的随机数,S 表示 supplicant;
  • Mac(AA) 是 AP 的 Mac 地址;
  • Mac(SA) 是 Station 的 Mac 地址;

由此可知,生成 PTK 依赖 PMK。

ptk.jpg

GTK的生成

GTK 生成函数:

GTK = PRF(GMK + ANONCE + MAC(AA))<===AP生成,包含在EAPOL-3

与 PTK 不同的是没有 SNONCE 和 MAC(SA),GTK 依赖 GMK。

gtk.jpg

四次握手过程

这个过程可以进行抓包对比分析。怎么部署抓包环境,前面有文章已经记录:https://mp.weixin.qq.com/s/woEtu0O9BtNt3bOooFm3ig
具体的抓包图也不贴了,感兴趣的同学可以自行去分析,过滤出eapol帧就行。
4-way-handshake-wireshark.png

下面简单地说下整个过程:
4-way-handshake.png

MIC(Message Integrity Check)
消息完整性校验,针对一组需要保护的数据计算出的散列值,用来防止数据遭篡改。除了 1/4,从 2/4 报文开始,后面的每个报文都会有 MIC。

4-Way Handshake Message 1

AP: 第一次握手由 AP 发起,AP 生成一个随机数Anonce然后发送给STA

STA: STA收到AP发送的第一次握手包,STA会生成一个随机数Snonce,因为知道AP的Anonce,则STA 就可以计算出 PTK(sta), 提取PTK(sta)的前十六字节KCK(MIC key)和802.1x data数据帧(EAPOL)算出MIC(sta)

4-Way Handshake Message 2

STA: STA发送Snonce和MIC(sta)给AP

AP: AP根据相同算法生成PTK(ap), 同理根据PTK(ap)的前十六字节KCK(MIC key)和802.1x data数据帧(EAPOL)算出MIC(ap), 对比MIC(ap)和MIC(sta)是否相同(相当于是校验PTK(ap)和PTK(sta)是否相同),不一致则丢弃,也就表明握手失败,一致则握手成功。

4-Way Handshake Message 3

AP: AP根据GMK,Anonce,AA计算出GTK, 然后使用PTK中间16字节的KEK加密GTK,根据PTK的前16字节KCK和EAPOL计算生成MIC(ap),此处MIC(ap)的值和第二次握手计算出的MIC(ap)是不一样的,最后将加密后的GTK和MIC(ap)发给STA

STA: 验证MIC(ap)是否和MIC(sta)一致,一致则继续,AP发过来的加密的GTK,用PTK中间16字节的KEK解密出来

这次握手主要是把 GTK 发送给 Station,并且告知 Station “AP上已经安装 PTK 和 GTK”。

4-Way Handshake Message 4

STA: 第四次相当于一个确认包,发送给AP进行最终的认证

AP: 接收到STA发送的EAPOL消息进行认证,认证OK则表示握手成功。

第四次握手后双方就将安装好各自计算出来的GTK和PTK,然后双方都可以开始加密和解密数据传输,所有的单播数据帧会被PTK保护,所有组播数据会被GTK保护。

参考