WIFI接入之supplicant 四次握手流程
目录
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 四次握手流程相关推荐
- TCP/IP协议三次握手与四次握手流程解析
原文链接地址:http://www.2cto.com/net/201310/251896.html TCP/IP协议三次握手与四次握手流程解析 TCP/IP协议的详细信息参看<TCP/IP协议详 ...
- Android wpa_supplicant 四次握手 流程分析
记录wpa_supplicant四次握手的过程. 相关log:https://www.cnblogs.com/helloworldtoyou/p/9633603.html 接收到第一次握手,会设置一个 ...
- WIFI接入之Authentication和Association流程梳理
目录 1.Authentication 2.Association 3.总结 在Wifi与AP进行四次握手前,需要进行Authentication(认证)和Association(关联)操作.这里梳理 ...
- Wifi 认证,关联,四次握手(WPA/WPA2/WPA3-SAE)
引入 WPA3-SAE也是针对四次握手的协议. 四次握手是 AP (authenticator) 和 (supplicant)进行四次信息交互,生成一个用于加密无线数据的秘钥. 这个过程发生在 WIF ...
- Android Wi-Fi 四次握手简介
1 WPA-PSK 初始化工作 使用 SSID 和passphares使用以下算法产生PSK 在WPA-PSK 中PMK=PSK PSK=PMK=pdkdf2_SHA1(passphrase,SSID ...
- wifi四次握手过程
https://www.jianshu.com/p/590d859d8d78 初始化: 第一次握手: 第二次握手: 第三次握手: 第四次握手: 其实整个原理就是密钥交换,请查看胡哥的<加密的类型 ...
- 【三次握手、四次挥手流程】及【长短链接区别】
常见名词解释: SYN(synchronous,建立联机) .ACK(acknowledgement,确认).PSH(push,传送).FIN(finish,结束).RST(reset,重置).URG ...
- Ralink wifi driver WPA四次握手可能的问题
测试在MT7620A上跑openwrt:router模式下,手机连接MT7620A板子就是失败. 经过分析发现: 在ralink的wifi driver中WPA成对密钥的四次握手,以及组密钥协商信令过 ...
- 通俗理解TCP/IP协议三次握手与四次分手流程
三次握手流程 客户端发个请求"开门呐,我要进来"给服务器 服务器发个"进来吧,我去给你开门"给客户端 客户端有很客气的发个"谢谢,我要进来了" ...
最新文章
- ADO.NET 快速入门(四):从数据库填充 DataSet
- ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 Tomb Raider(map+二进制枚举)
- spark应用程序_Sparklens:Spark应用程序优化工具
- 深入理解SQL注入绕过WAF与过滤机制
- 帐户分类 密码强度
- 人工智能/数据科学比赛汇总 2019.3
- PHP博客导入导出,Thinkphp5.0导入导出详解
- 【Oracle】truncate分区表
- mysql索引操作(转)
- nginx详解反向代理,负载均衡,LNMP架构上线动态网站
- libvirt(virsh命令总结)
- php debugdumpparams,PHP PDOStatement::debugDumpParams讲解
- 有这就够了小香港五味俱全——专升本高数
- 【源码系列】MyBatis原理源码
- python 中 chardet 的使用
- 毕业写论文不要傻傻的到中国知网CNKI充值了,分享几个常用的写论文必备的网站!
- ajax async false好么,求教大神Ajax中使用async:false会导致ie假死如何解决?
- 安卓如何调出软键盘_Android软键盘-显示隐藏软键盘
- 算法竞赛宝典 递归算法 地盘划分
- c语言中循环体表达式,C语言的循环语句