WPA四步握手中PMK以及PTK的派生

雨打梨花深闭门,忘了青春,误了青春

hostapd中某些类型的参数输出格式

首先必须知道u8等数据类型的定义:

1
2
3
4
5
6
7
8
9
10
11
typedef signed char s8;  
typedef unsigned char u8;

typedef signed short s16;
typedef unsigned short u16;

typedef signed int s32;
typedef unsigned int u32;

typedef signed long long s64;
typedef unsigned long long u64;
数据类型 打印格式
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获得

  1. WPA-PSK
    PMK=PSK= pdkdf2_SHA1(passphrase,SSID,SSID lenth,4096)其中passphrase,SSID ,是身份验证前authenticator,和supplicant都应该知道的
  2. 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。


WPA四步握手中PMK以及PTK的派生
https://chujian521.github.io/blog/2019/03/21/WPA四步握手中PMK以及PTK的派生/
作者
Encounter
发布于
2019年3月21日
许可协议