如果抓包,那么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已经装好,后面的数据可以加密了。

4 way handshake相关推荐

  1. 手机端登陆github产生ssl handshake aborted error如何解决?

    报错如下:ssl handshake aborted ssl=0xcbab0348:i/o error during system call connection reset by peer

  2. 解决“SSL handshake failed“问题

    解决"SSL handshake failed"问题 参考文章: (1)解决"SSL handshake failed"问题 (2)https://www.cn ...

  3. TLS 1.3 Handshake Protocol (下)

    接上文 四. Authentication Messages 正如我们在 section-2 中讨论的,TLS 使用一组通用的消息用于身份验证,密钥确认和握手的正确性:Certificate, Cer ...

  4. ssh错误 server not ready for puppeth err=“ssh: handshake failed: ssh: unable to authenticate... 解决方法

    原因:密码错误 问题分析 在编译go-ethereum之后使用puppeth创建私链后,在绑定用户的时候,会出现以下错误: What's the login password for root at ...

  5. docker 错误 request canceled while waiting for connection 或 TLS handshake timeout 解决方案

    使用docker 拉镜像的时候,出现下面的错误: net/http: request canceled while waiting for connection (Client.Timeout exc ...

  6. 802.1X的wpa认证流程-------4-way handshake过程分析

    WPA系统在工作的时候,先由AP向外公布自身对WPA的支持,在Beacons.Probe Response等报文中使用新定义的WPA信息元素(Information Element),这些信息元素中包 ...

  7. 校园职业社交Handshake获1005万美金A轮融资

    大学生职场社交软件Handshake在今日宣布已获得 1005 美金的 A 轮融资,本轮融资的领投方为 Kleiner Perkins Caufield & Byers (KPCB),跟投方为 ...

  8. charles抓取iphone https包报错:SSLHandshake: Remote host closed connection during handshake

    按照此方法:https://blog.csdn.net/lyhDream/article/details/53178118  在iphone上安装了charles的证书,在charles上也设置了ht ...

  9. WebSocket——[Error during WebSocket handshake: Unexpected response code: 403]解决方案

    问题描述 WebSocket connection to 'ws://localhost:8888/MetroCity/ws/endpointChat' failed: Error during We ...

  10. WebSocket——[Error during WebSocket handshake: Unexpected response code: 200]解决方案

    问题描述 WebSocket connection to 'ws://localhost:8888/MetroCity/ws/endpointChat' failed: Error during We ...

最新文章

  1. Duilib界面库学习笔记
  2. php面试常问的问题
  3. 跟我学交换机配置(一)
  4. No identities are available for signing 的解决办法
  5. SQL2005 学记笔记(9)
  6. markdown显示箭头方法
  7. 基于BIND软件实现互联网DNS解析
  8. cli命令行配置路由器_2.3.3 使用CLI执行基本路由器配置
  9. Git 协同开发流程
  10. 微信小程序连接无法跳转/ can not navigate to tabBar page错误
  11. 反射之动态拼接sql字符串
  12. springboot + quartz 分布式定时任务
  13. 基于Flutter的m3u8下载器
  14. Java MMdd 日期格式转换问题
  15. 【今日爆点】华为HDC开发者大会上正式发布深度欧拉V1.0
  16. 基于Springboot的漫画之家管理系统
  17. 互联网业务实战(一)--今日头条文章发布实现
  18. 设计模式六大原则之--开闭原则(OCP)
  19. 软件测试面试问题汇总
  20. About Garbage Collector and finilize()

热门文章

  1. optimized out参考解决方法
  2. 如何将uni-app中video标签播放按钮隐藏
  3. 伺服电机常用参数设置_伺服电机驱动器的几个参数设置
  4. 我的世界电脑版java路径_我的世界启动器Java路径怎么设置?java路径设置攻略
  5. 创建onenet连接nb-iot产品设备
  6. 为什么学卫生管理要学c语言,卫生信息管理专业是学什么的
  7. 小学教师计算机国培培训总结,教师国培培训总结
  8. 事故报告Template
  9. 2021年高压电工考试报名及高压电工证考试
  10. 【Python搞搞轻量Blog】第一发 Flask入门