WPA四步握手中PMK以及PTK的派生
雨打梨花深闭门,忘了青春,误了青春
hostapd中某些类型的参数输出格式
首先必须知道u8等数据类型的定义:
1 |
|
数据类型 | 打印格式 |
---|---|
u8 | %d |
s8 | %d |
u16 | %d or %hu |
s16 | %d or %hd |
u32 | %u |
s32 | %d |
u64 | %llu |
s64 | %lld |
unsigned int | %u |
PMK的派生
PMK获得
- WPA-PSK
PMK=PSK= pdkdf2_SHA1(passphrase,SSID,SSID lenth,4096)其中passphrase,SSID ,是身份验证前authenticator,和supplicant都应该知道的 - 802.1X+EAP中
PMK =L(MSK, 0, 256)
MSK 需要通过802.1X交换获得
其中EAP-Request/Method 中Method 表示EAP认证的方式,如下:
MD5 Challenge EAP 中类似CHAP的认证方式
GTC 原本打算与RSA SecurID之类的token card 一起使用
EAP-TLS 以数字证书相互认证
TTLS 隧道式TLS;以TLS加密保护较弱的身份验证方式
PEAP 防护型EAP;以TLS加密保护较弱的EAP验证方式
EAP-SIM SIM卡方式进行身份验证
MS-CHAP-V2
Method 之后如果认证成功,authenticator会发出EAP-Success表示授权使用连接端口
再接下来AP就可以立即使用EAPOL-Key消息将MSK发给supplicant,以后就和WPA-PSK一样用MSK最终导出PTK(MSK,PMK就是PTK的密钥生成密钥)
PTK的派生
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。