WIFI无线网络之四次握手
WIFI无线网络之四次握手
概述
Wi-Fi 中的 “四次握手”(4-way handshake) 是指 WPA(Wi-Fi Protected Access) 和 WPA2 安全协议中使用的一个核心过程。它的主要目的是在无线接入点(AP)和客户端设备(STA,如手机、笔记本电脑)之间安全地协商并建立用于加密后续通信数据的密钥(PTK 和 GTK),同时进行相互认证。
这个过程发生在客户端成功关联(Association)到AP之后,但在实际数据传输开始之前。它是确保无线连接安全性的关键一步。
WPA主要过程如下图:
了解整个过程之前,先要了解下这个过程中所涉及到的几种KEY。
KEY介绍
MSK (Master Session Key)
由 802.1X/EAP 或 PSK 身份认证后生成的第一个密钥。PMK (Pairwise Master Key)
PMK 是由 MSK 生成,WPA2/PSK 的情况下,当supplicant
和authenticator
身份验证后,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的分层:
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。
GTK的生成
GTK 生成函数:
GTK = PRF(GMK + ANONCE + MAC(AA))<===AP生成,包含在EAPOL-3
与 PTK 不同的是没有 SNONCE 和 MAC(SA),GTK 依赖 GMK。
四次握手过程
这个过程可以进行抓包对比分析。怎么部署抓包环境,前面有文章已经记录:https://mp.weixin.qq.com/s/woEtu0O9BtNt3bOooFm3ig
具体的抓包图也不贴了,感兴趣的同学可以自行去分析,过滤出eapol
帧就行。
下面简单地说下整个过程:
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保护。