在数字化时代的今天,Wi-Fi安全协议扮演着非常重要的角色,它将保护着我们的日常隐私和数据被窃听,WEP、WPA2、WPA3在我们的日常生活中经常听到,不管是wifi研发者还是无线爱好者都应该有所了解。
分享目录
-
概述
-
密钥专业术语
-
密钥关系图
-
Key分层
-
WPA2相关概念
-
WPA2改进
-
四次握手概述
-
四次握手代码解读
-
个人模式WPA2-PSK的认证过程&空口分析
-
四次握手的结果
-
从四次握手到数据加密的空口报文总览
-
WEP/WPA2/WPA3空口报文如果解密(篇幅原因放到下篇分享)
-
MIC failure问题分析案例(篇幅原因放到下篇分享)
概述
写这篇文章主要是想给大家分享一下四次握手的流程,我一直思考应该怎么描述这个东西,可以让普通人可以理解四次握手都做了一些什么,让wifi开发者深入理解四次握手做了一些什么,主要以WPA2-psk为案例;
本文从研发的视角打开,拒绝一些概念堆叠~
密钥专业术语
接下我就首先申明几个在握手期间生成的密钥以及生成密钥所需要的参数:
1.PTK Pairwise Transit key,PTK用来加密STA&AP之间所有的单播数据,计算方式如下:
PTK = PRF(PMK + ANONCE + SNONCE + MAC(AA) + MAC(SA))
PRF:伪随机函数,全称pseudo-random function,pmk、anonce..作为他的传入参数;
ANonce:AP生成的随机数,A表示authenticantor,包含在eapol-1;
SNonce:Station生成的随机数,S表示supplicant,包含在eapol-2;
MAC(AA):AP的mac地址;
MAC(SA):Station的mac地址;
PTK依赖一个更加高级的密钥PMK;
2.MIC Message Integrity Check,消息完整性校验,针对一组需要保护的数据计算出的散列值,用来防止数据遭篡改,用来TKIP加密算法数据完整性校验,CCMP用在AES加密算法数据完整性校验。
3.GTK Group Temporal Key,GTK用来加密AP和STA之间的多播/组播数据包,连接该AP的所有STA共享一个GTK,计算方式如下:
GTK = PRF(GMK + ANonce + mac(AA))《===AP生成,包含在eapol-3
4.PMK Pairwise Master Key,PMK 是由 MSK 生成,WPA2/PSK 的情况下,当 supplicant 和 authenticator 身份验证后,PSK 变成 PMK。PMK 会驻留在 AP 和所有 Station,不需要进行 key 交换,用它来生成用于加密单播数据的PTK,PMK会在STA和AP保存,并不需要共享;
5.GMK Group Master Key,GMK 用在四次握手来生成 GTK,GTK 在 AP 端由 MSK 生成,所有连接到该 AP 的 Station 共享。
6.MSK Master Session Key,由 802.1X/EAP 或 PSK 身份认证后生成的第一个密钥。
密钥关系图
wpa加密网络连接过程中,用户输入的密码在认证过程中称为PSK(Pre-Shared-Key),即“预共享密钥”。利用PSK以及无线网络的SSID,使用PBKDF2算法可以计算出PMK,利用PMK,以及认证过程中传输的ANonce、SNonce、STA的MAC地址、AP的MAC地址,使用hmac sha1算法可以计算出PTK。最后使用PTK的前16个字节以及整个802.1X Authentication数据包,计算出MIC。
其中PTK可以分为三部分:
KCK (Key Confirmation Key):用于计算WPA EAPOL密钥消息的MIC(完整性验证)
KEK (Key Encryption Key):用于加密发送到客户端的附加数据(在“密钥数据”字段中)
TK (Temporal Key):用于后续通信数据加密
TKIP加密模式下,PTK共512bit,其中按顺序为:KCK(128bit),KEK(128bit),TK(256bit)
CCMP加密模式下,PTK共384bit,其中按顺序为:KCK(128bit),KEK(128bit),TK(128bit)
Key分层
-
金字塔顶层是 MSK,在 802.1X/EAP 或者 PSK 身份认证的过程生成;
-
金字塔中间层是 GMK 和 PMK,由 MSK 生成,PMK用来生成PTK,GMK用来生成GTK;
-
金字塔底层是 GTK 和 PTK,用来加密数据的。
WPA2相关概念
先熟悉几个概念:
wpa2(Wi-Fi Protected Access 2安全协议)
加密算法:
AES(Advanced Encryption Standard):AES 是一种对称加密算法,被广泛应用于多种安全场景。与TKIP 相比,AES 提供了更高级别的安全性。在 WPA2 中,AES 是通过 CCMP(Counter Mode with Cipher Block Chaining Message Authentication Code Protocol)协议实现的。AES 的主要特点包括:
-
高级加密标准:AES 是美国国家标准与技术研究院(NIST)认可的加密标准,被认为是目前最安全的加密算法之一。
-
密钥长度:AES 支持 128 位、192 位和 256 位密钥长度。在 WPA2 中,通常使用 128 位密钥长度。
-
对称加密:AES 是一种对称加密算法,加密和解密过程使用相同的密钥。
-
高效性能:AES 算法具有较高的性能,尤其在硬件实现上,使其适用于大量数据的加密和解密。
TKIP(Temporal Key Integrity Protocol):TKIP 是一种基于 RC4 加密算法的加密协议,最初由 WPA(Wi-Fi Protected Access)引入,用于替代 WEP(Wired Equivalent Privacy)中的不安全加密机制。虽然 TKIP 也适用于 WPA2,但由于其安全性较低,已经逐渐被 AES 替代。TKIP 的主要特点包括:
-
动态密钥生成:TKIP 为每个数据包生成一个独立的加密密钥,减少了密钥被破解的可能性。这种方法称为密钥混合(Key Mixing)。
-
数据完整性校验:TKIP 使用了 Michael Message Integrity Check(MIC)算法,确保数据在传输过程中的完整性,防止篡改和重放攻击。
-
顺序计数器:TKIP 引入了一个 48 位的顺序计数器,用于处理数据包的顺序,避免重放攻击。
WPA2改进
WPA2 在 WPA 的基础上做了重要改进,全面增强了无线网络的安全性:
-
更强的加密算法:WPA2 引入了基于 AES(Advanced Encryption Standard)的加密算法,取代了原来基于 RC4 的 TKIP。AES 是一种更安全的加密标准,被广泛应用于多种安全场景。
-
强化的认证过程:WPA2 支持两种认证方式,分别是基于预共享密钥(PSK)的个人模式(WPA2-PSK)和基于 802.1X 认证的企业模式(WPA2-Enterprise)。
改进的密钥管理:WPA2 通过四次握手过程生成
会话密钥,以确保每个会话之间的数据加密具有唯一性,从而减少密钥被破解的风险。
数据完整性保护:WPA2 引入了更为严格的数据完整性保护措施,例如 CCMP(Counter Mode with Cipher Block Chaining Message Authentication Code Protocol),有效防止了重放攻击。
四次握手概述
无线 WiFi 的四次握手就是 key exchange 的过程,上面了解了相关的 key,现在我们就可以具体分析一下四次握手的过程。
假设 AP 用的是 WPA2-PSK 加密方式,SSID 为 Test,用一台电脑连接它。整个过程分为身份认证(authentication)、关联(association)和安全验证(security validation)。四次握手不是直接将密码发送到 AP,而是通过 EAPOL(Extensible authentication protocol over LAN)进行消息交换。
四次握手代码解读
(图片如果不清晰可联系小编获取原图)
个人模式(WPA2-PSK)的认证过程&空口分析
当客户端尝试连接到 WPA2-PSK 无线网络时,会触发以下认证过程:
关键流程:生成PMK(用来保护工作站和AP之间往来的数据)-->生成PTK-->生成GTK(用来保护AP至所关联工作站之间的组播或广播数据);
a. 生成 Pairwise Master Key(PMK):首先,AP 和客户端都会基于预共享密钥、无线网络的 SSID 和 SSID 长度计算 PMK。这个计算过程利用了 PBKDF2(Password-Based Key Derivation Function 2)算法,以增加计算复杂性并降低密码破解的可能性。
b. 四次握手过程:AP 和客户端之间会进行四次握手过程,以确保双方都知道预共享密钥,并生成用于数据加密和解密的 Pairwise Transient Key(PTK)。
第一次握手:AP 向客户端发送一个随机数(称为 ANonce),客户端会使用这个随机数来生成 PTK。前面已经提到生成 PTK 的公式:PTK = PRF (PMK + ANonce + SNonce + Mac (AA)+ Mac (SA))
,由于在 4 次握手之前已经经历了认证和关联的阶段,因此 Station 是知道 AP 的 Mac 地址,所以只需要 ANonce就可以生成 PTK 了。
第二次握手:客户端回复 AP,并发送自己生成的随机数(称为 SNonce)。AP 也会使用这个 SNonce 和之前的 ANonce 生成相同的 PTK,MIC设置位置为1。
第三次握手:AP 发送消息以确认 PTK 的生成,并提供用于广播和多播数据加密的 Group Temporal Key(GTK)。
第四次握手:客户端回复 AP 确认收到 GTK,并且双方都可以开始加密和解密数据传输。
四次握手的结果
四次握手成功之后,所有的数据包传输都需要进行加密传输,所有的单播数据使用PTK进行加密,所有的多播数据使用GTK加密;
从四次握手到数据加密的空口报文总览
如果读到这里,你觉得有所收获,就关注下小编的公众号,未来一起进步~