EAPOL四次握手流程
- 协议
- 功能
- 数据帧格式
- 四次握手流程
- 数据帧日志解析
- 组播
- 代码
协议
802.11i
功能
作用:派生和交换两组密钥
密钥包括ptk加解密单播数据,由用户设置的pmk扩展(在setwork的时候通过pasapharse生成)
gtk加密解组播数据,由gmk派生而来(由ap决定)
//gtk安全角度考虑:因同一个ap和所有sta使用共同的gtk,有sta中途离场时AP和剩下的STA之间最好更换一个新的GTK
数据帧格式
以message A举例
keyinfo字段详解
四次握手流程
交互过程主要是为了派生密钥和安装
前两帧用于密钥的交换和派生:
STA收到Message A的处理逻辑如下:
生成一个Nonce,也叫SNonce。
派生PTK。
构造第二个EAPOL-Key帧,称为Message B
AP收到Message B的处理如下:
派生PTK。
检查Message B的MIC值是否正确。如果发现MIC错误,则丢弃(而且是silently)MessageB。
后两帧主要用于密钥安装
STA收到Message C的处理如下。
检查Replay Counter,计算MIC以及利用自己的PTK解密Key Data以获取RSN IE。
如果Message C包含GTK信息,则取出GTK。注意,GTK以及和Key相关的信息存储在KDE(Key Data Element)的IE中。关于KDE和GTK的格式,请读者继续阅读下文。
构造并发送最后一个EAPOL-Key帧,称为Message D。
为Driver安装PTK。
AP收到Message D的处理如下。
再次计算MIC,如果正确则为driver安装PTK。
更新Replay Counter,如果以后需要更新Key,则使用一个不同的Replay Counter。
数据帧日志解析
message A
message B
message C
message D
组播
代码
状态迁移
接收message A状态为“WPA_4WAY_HANDSHAKE”
接收message C状态为“WPA_4WAY_HANDSHAKE”,
如果message C中包含gtk信息,则状态迁移“WPA_GROUP_HANDSHAKE”安装gtk
安装ptk、gtk之后状态为“WPA_COMPLETED”