4 way handshake

来源:互联网 发布:常见网络端口号 编辑:程序博客网 时间:2024/04/30 11:35
如果抓包,那么4-way handshake就是里面的四个EAPOL-KEY的包。如果是RSN方式那么GTK的2-way handshake其实也包含在这四个包里面,最后两条就是。
4-way的分析我翻译自802.11i-2004 8.5.2.2,因为这个东西三言两语是说不清楚的。网上的那些只能作为科普而不可以用来精确的理解。

8.5.2.2 EAPOL-key Frame notation
EAPOL-Key(S, M, A, I, K, KeyRSC, ANonce/SNonce, MIC, RSNIE, GTK[N])
                其中:
         S:   initial key exchange完成标志,它是key information中的安全位标志位
M:  MIC包含标志位。除了message 1外,其他三条信息都应该置该位,它是key information中的KEY MIC位
A: 信息需要ACK标志位,当接收方需要回应这条消息时,置该位。它是key information  中的KEY Ack位
I:    安装标志位,是否安装paiwise key。他是key information中的Install位
K:   key类型标志位,P (Pairwise), G (Group/STAKey). 他是key information中的key type位
KeyRSC  KeyRSC,它在KeyRSC域中
Anounce/SNounce:  他是Authenticator/Supplicant nonce.它在 the Key Nonce域中
MIC               :               MIC
RSNIE:          RSN IE,它在Key data域中
GTK:             加密的GTK,它在Key data域中
N:                   key标识,用于只是GTK的索引。

8.5.3.4 4-way handshake
                4次握手过程可以用下面的公式表示。
          Message 1. Authenticator → Supplicant: EAPOL-Key(0,0,1,0,P,0,ANonce,0,0,0)
Message 2. Supplicant → Authenticator: EAPOL-Key(0,1,0,0,P,0,SNonce,MIC,RSNIE,0)
Message 3. Authenticator → Supplicant: EAPOL-Key(1,1,1,1,P,KeyRSC,ANonce,MIC,RSNIE,GTK[N])
Message 4. Supplicant → Authenticator: EAPOL-Key(1,1,0,0,P,0,0,MIC,0,0)
                用简单的言语解释一下,基本意思就是
         PTK是两边都要对上的,而GTK是在PTK成功后,AP直接将加密过GTK发给STA,STA再把GTK解出来。抓包看到有四个EAPOL-KEY,后两个包含AP和STA安装GTK。

对于PTK,AP送Anouce给STA,STA收到后,自己产生一个SNounce然后结合ANounce PMK AA和SA得出PTK,进而有MIC key然后连同一个802.1xdata通过HMAC_MD5算出MIC,STA把MIC和SNounce发给AP。AP收到Snouce后,自己也使用相同的算法,通过SA AA SNounce ANounce计算MIC,如果这个MIC和STA发过来的MIC是一样的,那么就说明两侧的PMK是一样的,不然过后AP就会发出deauth给STA

PTK成功后,两侧的PTK Key结构就确定下来了,随后AP会通过EAPOL-KEY把GTK发给STA,AP发一个MIC给STA,STA把KEY解出来,发一个确认信息给AP。

WPA和RSN在处理流程还存在下面一些不同:

   基本上就是PTK和GTK何时安装到驱动的时机是不一样以及传输使用的descriptor格式不同。











WPA/RSN使用四次握手(4-Way Handshake)的方式生成所需的密钥。

作用

四次握手通过一系列的交互,从PMK(Pairwise Master Key)生成PTK(Pairwise Transient Key)。PMK来自MSK(Master Session Key),是MSK的前256位,32字节。

本文的主要目的是讲PTK,所以暂时忽略PMK和MSK。

PTK的内容

PTK包含3个部分,KCK(Key Confirmation Key),KEK(Key Encryption Key),TK(Temporal Key)。

PTK的总长度根据加密方式不同而不同。

当加密方式是TKIP时,PTK长512位,按顺序分别为KCK占128位,KEK占128位,TK占256位。

当加密方式是CCMP时,PTK长384位,按顺序分别为KCK占128位,KEK占128位,TK占128位。

KEK和KCK是给EAPOL-Key,也就是四次握手时,加密和完整性验证用的。TK用于后续的数据加密。

四次握手的报文都是基于EAPOL-Key的。EAPOL-Key的结构如下:


PTK的生成

生成PTK,需要5个必要元素,PMK,ANonce(Nonce 1),SNonce(Nonce 2),Authenticate MAC(MAC 1),Supplicant MAC(MAC 2)。如下图:


2个Nonce分别是Authenticator和Supplicant生成的随机数。

这张图里的输出包含4个部分,其实Data Encr和Data MIC合起来就是前面提到的TK。而EAPOL Encr/MIC分别对应前面的KEK和KCK。

四次握手的交互过程

下面的交互仅仅是一个流程,对内部的一些数据的处理就不细说了。

1/4:Authenticator -> Supplicant

Authenticator把ANonce送给Supplicant。Supplicant收到1/4后,就有了生成PTK的所有元素。因为1/4里同时也包含了Authenticator的MAC地址。

2/4:Supplicant -> Authenticator

Supplicant计算出PTK,把SNonce和自己的MAC地址送给Authenticator。同时,从2/4报文开始,后面的每个报文都会有MIC。1/4没有。

3/4:Authenticator -> Supplicant

Authenticator向Supplicant证明自己有有效的,同样有MIC加入其中

4/4:Supplicant -> Authenticator

仅是对3/4的一个ACK。说明PTK已经装好,后面的数据可以加密了。

0 0