WPA/WPA2 4-way handshake
今天了解一下WPA/WPA2四部握手的过程,了解其中的信息交互过程,为项目代码修改做准备。
简介
IEEE 802.11i通过提供具有两种新协议的强健安全网络(RSN)来增强IEEE 802.11-1999:四次握手和组密钥握手。它们利用IEEE 802.1X中描述的认证服务和端口访问控制来建立和更改适当的加密密钥。RSN是一种安全网络,只允许创建健壮的安全网络关联(RSNA),这是一对站点(STA)使用的关联类型,如果建立身份验证或关联的过程它们包括4-Way Handshake。
该标准还提供了两种RSNA数据机密性和完整性协议,TKIP和CCMP,因为TKIP的机密性和完整性机制不像CCMP那样强大,因此CCMP的实施是强制性的。实施TKIP的主要目的是该算法应该在大多数仅支持WEP的旧设备的能力范围内实现。
初始认证过程使用预共享密钥(PSK)或通过802.1X 进行EAP交换(称为EAPOL,需要存在认证服务器)来执行。此过程确保客户端站(STA)通过接入点(AP)进行身份验证。在PSK或802.1X认证之后,生成共享密钥,称为成对主密钥(PMK)。PMK源自通过PBKDF2 -SHA1作为加密散列函数的密码。在预共享密钥网络中,PMK实际上是PSK。如果执行了802.1X EAP交换,则PMK从认证服务器提供的EAP参数派生。
四次握手
四次握手的设计使得接入点(或认证者)和无线客户端(或请求者)可以彼此独立地证明他们知道PSK / PMK,而不会泄露密钥。接入点(AP)和客户端不会泄露密钥,而是相互加密消息 - 只能通过使用已经共享的PMK进行解密 - 如果消息的解密成功,则证明了PMK的知识。四次握手对于保护PMK免受恶意接入点的影响至关重要 - 例如,攻击者的SSID冒充真实接入点 - 这样客户端就不必告知接入点其PMK。
PMK旨在持续整个会话,应尽可能少地暴露; 因此,需要导出加密流量的密钥。四次握手用于建立另一个称为成对瞬态密钥(PTK)的密钥。通过连接以下属性生成PTK :PMK,AP nonce(ANonce),STA nonce(SNonce),AP MAC地址和STA MAC地址。然后将产品通过伪随机函数。握手还产生GTK(组临时密钥),用于解密多播和广播流量。
在握手期间交换的实际消息在图中描述并在下面解释(所有消息都作为EAPOL -Key帧发送):
- 所述AP用钥匙重放计数器,其是用于匹配每对发送的消息,并丢弃重播消息的号码一起发送一个随机数-值(的ANonce)到STA。STA现在具有构建PTK的所有属性。
- STA将其自己的随机值(SNonce)与消息完整性代码(MIC)一起发送到AP ,包括认证,其实际上是消息认证和完整性代码(MAIC),以及密钥重放计数器将是相同的作为消息1,允许AP匹配正确的消息1。
- AP通过检查MIC,RSN,ANonce和密钥重放计数器字段来验证消息2,如果有效,则构建并用另一个MIC发送GTK。
- STA通过检查MIC和密钥重放计数器字段来验证消息3,并且如果有效则向AP发送确认。
详见:https://mrncciew.com/2014/08/19/cwsp-4-way-handshake/
4次握手完成以后,之后的帧传播就都会以加密的方式进行。
成对瞬态密钥(64字节)分为五个单独的密钥:
- 16字节的EAPOL-Key确认密钥(KCK) - 用于计算WPA EAPOL密钥消息的MIC
- 16字节的EAPOL密钥加密密钥(KEK) - AP使用此密钥加密发送到客户端的附加数据(在“密钥数据”字段中)(例如,RSN IE或GTK)
- 16字节的临时密钥(TK) - 用于加密/解密单播数据包
- 8个字节的Michael MIC Authenticator Tx Key - 用于计算AP发送的单播数据包的MIC
- 8个字节的Michael MIC Authenticator Rx Key - 用于计算由站发送的单播数据包的MIC
Group Temporal Key(32字节)分为三个独立的键:
- 16字节的组时间加密密钥 - 用于加密/解密多播和广播数据包
- 8个字节的Michael MIC Authenticator Tx Key - 用于计算AP发送的组播和广播数据包的MIC
- 8个字节的Michael MIC Authenticator Rx Key - 当前未使用的站点不发送多播流量
仅当网络使用TKIP加密数据时,才使用PTK和GTK中的Michael MIC Authenticator Tx / Rx密钥。
已证明四步握手易受KRACK(密钥重装攻击)攻击。
如图所示,KRACK攻击主要发生在认证和密钥建立阶段的四步握手过程中,通过简单的报文模拟诱使安全协议交互的一方重发密钥交互协议中的一条消息,另一方收到重发的这条消息后再次安装已安装过的密钥,安装时将IV等相关的信息重置后使用,从而导致了同一个密钥使用了相同的IV再次加密数据,最终造成数据被重放、解密甚至伪造等安全危害。该攻击不仅针对WPA2,对于WPA也同样适用,不论是采用预共享密钥机制还是采用IEEE 802.1x机制的Wi-Fi网络都受到该漏洞的影响。
详见:https://blog.csdn.net/yuaninbj/article/details/78794159
组密钥握手
由于预设定时器到期,可能需要更新网络中使用的组临时密钥(GTK)。当设备离开网络时,GTK也需要更新。这是为了防止设备从AP接收更多的多播或广播消息。
为了处理更新,802.11i定义了一个由双向握手组成的组密钥握手:
- AP将新GTK发送给网络中的每个STA。GTK使用分配给该STA的KEK加密,并通过使用MIC保护数据不被篡改。
- STA确认新的GTK并回复AP。
CCMP概述
CCMP基于AES加密算法的CCM。CCM结合了CTR的机密性和CBC-MAC的身份验证和完整性。CCM保护MPDU数据字段和IEEE 802.11 MPDU报头的选定部分的完整性。
密钥层次结构
RSNA定义了两个关键层次结构:
- 成对密钥层次结构,用于保护单播流量
- GTK,一种由单个密钥组成的层次结构,用于保护多播和广播流量
密钥层次结构的描述使用以下两个函数:
- L(Str,F,L) - 从左边开始,从提取位F到F + L-1。
- RF-n - 产生n位输出的伪随机函数,有128,192,256,384和512版本,每个都输出这些位数。
成对密钥层次结构利用PRF-384或PRF-512从PMK导出会话特定密钥,生成PTK,该PTK被分区为KCK和KEK以及MAC使用的所有临时密钥以保护单播通信。
GTK应该是一个随机数,它也是通过使用PRF-n生成的,通常是PRF-128或PRF-256,在这个模型中,组密钥层次结构采用GMK(组主密钥)并生成GTK。