目录

1.四次握手的目的

2.四次握手分析

2.1第一次握手:Authenticator->Supplicant

2.2第二次握手:Supplicant->Authenticator

2.3第三次握手:Authenticator->Supplicant

2.4第四次握手:Supplicant->Authenticator

3.名词解释:


1.四次握手的目的

通过握手过程协商出PTK和GTK,关于这两个名词的解释间“名词解释”小节。

先说一下PTK的结构如下,它的结构跟加密算法相关,前两段长度是一样的,区别在与第3段。举例说明,当加密算法为TKIP时,TK字段占256位,当加密算法为CCMP时,TK字段为128位。

TKIP加密算法:

CCMP加密算法:

KEK和KCK字段是给EAPOL-KEY使用的,即用于四次握手的过程中的加密和完整性校验。TK字段用于后续的加密。

再看一下EAPOL数据包的结构如下:

本想结合wireshark抓取数据包进行分析,怎奈何自己的电脑不给力,无法抓取到EAPOL数据包。只能获取到手机端的日志,如下所示,wpa_supplicant在正常情况下打印很少。可以看到明显的四次握手过程。

立两个flag:将来能够获取到EAPOL数据包时,再了解一下它的数据包结果。再者,随着工作经验的积累,总结一下常见的握手异常分析方法。

2.四次握手分析

2.1第一次握手:Authenticator->Supplicant

在本例中,Authenticator就是路由器,supplicant指的是手机端的supplicant。Authentor生存SNonce,然后将SNonce和自己的MAC地址发送出去。

supplicant接收到后,就可以计算出PTK。怎么来计算呢?计算公式可以参见名词解释小节,计算所用的输入值:PMK、AA、SPK、ANonce、SNonce都是已经知道的了,带入相应加密算法的公式,即可以得到PTK。

2.2第二次握手:Supplicant->Authenticator

Supplicant发送SNonce、自己的MAC、MIC给Authenticator。这里有引入了一个新的名词,我们在这里解释一下,MIC的中文解释是报文完整性校验值,怎么得到的呢?这样得到的:KCK(PTK中的前128位)加密该EAPOL报文得到的值,我们可以用这样一个公式来表示:MIC=mic(KCK,EAPOL)。

Authenticator接收到了之后,同样拥有了计算PTK的所有输入:PMK、AA、SPK、ANonce、SNonce,所有它也可以计算出PTK的值,然后取出KCK中的部分对EAPOL报文进行校验,即计算出MIC的值,如果该值与Supplicant计算出的值一致,则说明校验成功,否则,则说明校验失败。

更进一步,校验失败,则说明Supplicant端的PMK是错误的;

再进一步,PMK错误,则说明Supplicant端输入的密码是错误的。

2.3第三次握手:Authenticator->Supplicant

Authenticator发送的数据包括:组临时密钥GTK, WPA KEY MIC。GTK:用于后续更新组密钥,该密钥被KEK加密,KEK是PTK的中间128bit,MIC同样是KCK加密得来。

Supplicant接收到之后,同样进行MIC的检测(其实还有数据段的其他检测,在这里就不深入了)。如果校验成功了,Supplicant端就获取了GTK。

2.4第四次握手:Supplicant->Authenticator

Client 最后发送一次EAPOL-KEY给AP用于确认,如果认证成功,双方将安装(Install)key。而Authenticator中的校验也是对MIC进行检测。

什么是安装key?就是双发都决定了以后进行通信时,用什么Key来做加密(用了商定好的key加密、解密,双发的沟通才没有障碍)。Authenticator安装了PTK,Supplicant端安装了PTK和GTK。

最后附一下四次握手的流程图,该图是从80211-216文档中截取的。希望在深入学习后,根据自己的理解再画一下这个流程,因为毕竟“纸上得来终觉浅”嘛!

从下图可以看到,每次EAPOL-KEY的计算算法是有差异的,计算出来的MIC值肯定是不一样的。

3.名词解释:

PTK(pairwise transient key):成对传输秘钥,它用于单播数据帧的加密和解密

GTK(group temporal key):组临时秘钥,它用于组播数据帧和广播数据帧的加密和解密,管理帧、控制帧和空数据帧是不用加密的。

AA:client(即手机)的MAC

SPA:AP(即Authentor)的MAC

ANonce:AP产生的随机值

SNonce:Client 产生的随机值

PMK:跟认证方式有关,如果是PSK认证方式,PMK是由SSID和密码导出,公式如下:

PMK=pdkdf2_SHA1(passphrase,SSID,SSID length, 4096), 其中passphrase就是客户输入的登录密码。

如何计算PTK?

PMK转化成PTK是通过下面的函数完成的:

PTK<----PRF-X(pPMK,

"Pairwise key expansion", Min(AA,SPA)||Max(AA,SPA)||Min(ANoce,SNoce)||Max(ANonce, SNoce))。X指生成的PTK的长度,X=256+TK_bit,即KCK加KEK的256固定位加上TK位数,不同的加密方式TK_bits不一样。可查下表:

如果感觉本文对您有益,请辛苦点个赞吧~
欢迎扫码关注个人公众号或者微信搜索wanwuhulianjishu(万物互联技术)

WIFI接入之supplicant 四次握手流程相关推荐

  1. TCP/IP协议三次握手与四次握手流程解析

    原文链接地址:http://www.2cto.com/net/201310/251896.html TCP/IP协议三次握手与四次握手流程解析 TCP/IP协议的详细信息参看<TCP/IP协议详 ...

  2. Android wpa_supplicant 四次握手 流程分析

    记录wpa_supplicant四次握手的过程. 相关log:https://www.cnblogs.com/helloworldtoyou/p/9633603.html 接收到第一次握手,会设置一个 ...

  3. WIFI接入之Authentication和Association流程梳理

    目录 1.Authentication 2.Association 3.总结 在Wifi与AP进行四次握手前,需要进行Authentication(认证)和Association(关联)操作.这里梳理 ...

  4. Wifi 认证,关联,四次握手(WPA/WPA2/WPA3-SAE)

    引入 WPA3-SAE也是针对四次握手的协议. 四次握手是 AP (authenticator) 和 (supplicant)进行四次信息交互,生成一个用于加密无线数据的秘钥. 这个过程发生在 WIF ...

  5. Android Wi-Fi 四次握手简介

    1 WPA-PSK 初始化工作 使用 SSID 和passphares使用以下算法产生PSK 在WPA-PSK 中PMK=PSK PSK=PMK=pdkdf2_SHA1(passphrase,SSID ...

  6. wifi四次握手过程

    https://www.jianshu.com/p/590d859d8d78 初始化: 第一次握手: 第二次握手: 第三次握手: 第四次握手: 其实整个原理就是密钥交换,请查看胡哥的<加密的类型 ...

  7. 【三次握手、四次挥手流程】及【长短链接区别】

    常见名词解释: SYN(synchronous,建立联机) .ACK(acknowledgement,确认).PSH(push,传送).FIN(finish,结束).RST(reset,重置).URG ...

  8. Ralink wifi driver WPA四次握手可能的问题

    测试在MT7620A上跑openwrt:router模式下,手机连接MT7620A板子就是失败. 经过分析发现: 在ralink的wifi driver中WPA成对密钥的四次握手,以及组密钥协商信令过 ...

  9. 通俗理解TCP/IP协议三次握手与四次分手流程

    三次握手流程 客户端发个请求"开门呐,我要进来"给服务器 服务器发个"进来吧,我去给你开门"给客户端 客户端有很客气的发个"谢谢,我要进来了" ...

最新文章

  1. ADO.NET 快速入门(四):从数据库填充 DataSet
  2. ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 Tomb Raider(map+二进制枚举)
  3. spark应用程序_Sparklens:Spark应用程序优化工具
  4. 深入理解SQL注入绕过WAF与过滤机制
  5. 帐户分类 密码强度
  6. 人工智能/数据科学比赛汇总 2019.3
  7. PHP博客导入导出,Thinkphp5.0导入导出详解
  8. 【Oracle】truncate分区表
  9. mysql索引操作(转)
  10. nginx详解反向代理,负载均衡,LNMP架构上线动态网站
  11. libvirt(virsh命令总结)
  12. php debugdumpparams,PHP PDOStatement::debugDumpParams讲解
  13. 有这就够了小香港五味俱全——专升本高数
  14. 【源码系列】MyBatis原理源码
  15. python 中 chardet 的使用
  16. 毕业写论文不要傻傻的到中国知网CNKI充值了,分享几个常用的写论文必备的网站!
  17. ajax async false好么,求教大神Ajax中使用async:false会导致ie假死如何解决?
  18. 安卓如何调出软键盘_Android软键盘-显示隐藏软键盘
  19. 算法竞赛宝典 递归算法 地盘划分
  20. c语言中循环体表达式,C语言的循环语句

热门文章

  1. 成功登陆资本市场沃趣挂牌新三板
  2. Windows下的Powerlink主从站通信-(现场总线作业——NJIT)
  3. Oracle 18c安装
  4. 用JAVA计算平方根
  5. 王小川否认担当项目顾问,OKEx IEO项目 ALLIVE 存在造假嫌疑
  6. laravel 调试模式开启与关闭
  7. ajax请求状态码一直是pending
  8. 5814. 【NOIP提高A组模拟2018.8.14】 树
  9. linux合并odex工具,安卓8.0合并ODEX工具
  10. 根据txt文件内文件名,提取对应文件至新的文件夹中