WPA认证过程-安全盒子
预共享密钥模式

概念

预共享密钥可以是8~63之间任意长度的可打印的ASCII码.

使用WAP加密算法依赖Pairwise Master Key(PMK), PMK使用预共享密钥和SSID进行计算

当客户端拥有PMK, 它就与AP开始协商一个新的, 临时的密钥, 即Pairwise Transient Key(PTK)

每次在客户端连接和定期更换的时候动态的创建这些临时密钥

PTK组成

PMK

一个随机数

由AP提供, 即A-nonce

另一个随机数

由客户端提供, 即S-nonce

客户端的MAC地址

AP的MAC地址

通过在认证交换时检查Message Integrity Code(MIC)项, AP验证客户端是否真的有PMK

MIC是一个数据包的加密散列函数, 这个函数用于防止篡改和合适客户端具有这个密钥

如果MIC是不正确的, 那么PTK和PMK就是不正确的

如果攻击者拥有PMK, 则可以阅读其它客户端的的传输数据包, 以及接入AP

过程(四次握手)

WPA-PSK 初始化工作

产生PSK

PSK=PMK=pdkdf2_SHA1(passphrase, SSID, SSID length, 4096)

第一次握手

AP

广播SSID

AP_MAC(AA)→STATION

STATION

使用接受到的SSID, AP_MAC(AA)和passphares使用同样算法产生PSK

PSK=PMK=pdkdf2_SHA1(passphrase, SSID, SSID length, 4096)

第二次握手

STATION

发送一个随机数SNonce

STATION_MAC(SA)→AP

AP

接受到SNonce, STATION_MAC(SA)后产生一个随机数ANonce

然后用PMK, AP_MAC(AA), STATION_MAC(SA), SNonce, ANonce 用以下算法产生PTK

PTK=SHA1_PRF(PMK, Len(PMK), "Pairwise key expansion", MIN(AA, SA) || Max(AA, SA) || Min(ANonce, SNonce) || Max(ANonce, SNonce))

MIC Key=PTK前16个字节

提取这个PTK 前16 个字节组成一个MIC KEY

第三次握手

AP

发送上面产生的ANonce→STATION

STATION

用接收到ANonce 和以前产生PSK, SNonce, AP_MAC(AA), STATION_MAC(SA)用同样的算法产生PTK

提取这个PTK 前16 个字节组成一个MIC KEY

产生MIC值

用这个MIC KEY 和一个802.1x data 数据帧使用以下算法得到MIC值

MIC = HMAC_MD5(MIC Key, 16, 802.1x data)

第四次握手

STATION

发送802.1x data→AP

发送MIC→AP

用上面那个准备好的802.1x 数据帧在最后填充上MIC值和两个字节的0(十六进制)让后发送这个数据帧到AP。

AP

收到这个数据帧后提取这个MIC。并把这个数据帧的MIC部分都填上0(十六进制)这时用这个802.1xdata 数据帧, 和用上面AP产生的MIC KEY 使用同样的算法得出MIC’。如果MIC’等于STATION发送过来的MIC。那么第四次握手成功。若不等说明则AP 和STATION 的密钥不相同, 或STATION 发过来的数据帧受到过中间人攻击, 原数据被篡改过。握手失败了。

企业模式

客户端通过AP作为中继与认证服务器发生关系, 客户端与认证服务器间的认证协议封装在EAP(Extensible Authentication Protocol)里面, 这样可以使AP忽略认证细节

多个不同的认证技术在EAP上实现, 例如EAP-TLS和PEAP

当客户端认证成功, 认证服务器通知客户端认证成功, 并发送给AP一个PMK

接下去就是四次握手过程