1.前言
当今手机连接WIFI热点普遍采用WPA2-PSK的方式。本文讨论这个方式的鉴权过程。
2. 鉴权过程
我们称需要连接的一方为station,简称STA。提供WIFI热点的一方为AP。
连接之前, station需要知道AP的名字(ssid)和密码(PSK)。
定义 :
PMK = SHA1(ssid,psk), 显然 STA 和AP双方都知道PMK。
定义 :
PTK = PRF(PMK + ANonce + SNonce + Mac(AA) + Mac (SA))
PTK的计算公式中:
PRF为公知的算法,SNonce和ANonce分别是STATION和AP生成的随机数。
在鉴权之前双方通过互相打招呼,已经都获知了对方的MAC地址,分别是Mac(AA)和Mac (SA)
STEP 1:
AP 首先发送第1条消息给STA,消息体是 ANonce,ANonce是AP生产的随机数。
STEP2:
STA 收到 ANonce,自己生成一个SNonce ,PMK 已知。此刻,STA 已具备计算 PTK 的所有五元组信息(PMK + ANonce + SNonce + Mac(AA) + Mac (SA)),能够计算得到 PTK。然后用 PTK 的 前16位位对马上要发送的数据包(SNonce)进行HASH计算(其实计算还用到一个 802.1x data,为了便于理解,暂且不提)得到 MIC,并将 MIC 附着在包尾一同发送给 AP,这是第2条消息。
STEP 3:
AP 收到STA发过来的消息并从消息中提取SNonce,此时AP也具备了所有的五元组信息(PMK + ANonce + SNonce + Mac(AA) + Mac (SA)),也成功计算出了 PTK,并用 PTK 的前16 位对收到的数据进行计算得到 MIC,计算得到的 MIC 与收到的 MIC 进行对比,如果相等则代表 AP 和 STA 拥有相同的 PTK,进而可以确定两者拥有相同的 PMK(PMK是计算PTK的入参),进而可以确定两者拥有相同的密码。
AP 向 STA 发送第3条消息,包含被加密的 GTK(用于对广播数据帧和组播数据帧加密) 和 MIC。MIC是用PTK对GTK做的HASH摘要(HMAC-HASH的形式)。
STEP 4:
STA 收到 被加密了的 GTK,因为手中已有 PTK,所以可以从中解出 GTK。然后 AP 和 STA 安装 PTK 和 GTK,整个认证和密钥交换过程至此结束。
以上四步可以表示为如下这张图:
看到一张更容易理解的图,贴出来了,如下:
大概
3.三个问题
关于WIFI连接,我想到两个问题,都通过学习整个流程图,得到了答案。
3.1 如果一个STA记住了一个AP热点的密码,设置同样名字和密码的热点,STA会不会连接成功?
答案:会,因为他们具有相同的PMK。为了证明这个结论。我从手机A连接热点B,并记住密码,然后创建热点C,设置为和B一样的SSID(用户名)和密码,降低B的信号强度,发现,手机A会自动连接到了热点C。
3.2 如果我们制作了一个和某实际热点相同名称的AP热点,那么能不能轻易从STA请求和AP连接的信息中找到实际AP热点的明文密码?
答案:不能。AP热点第一次接触与密码有关的消息是STEP2收到的消息里的MIC。MIC的生成过程利用到了密码。但是MIC生成过程密码参与了两次HASH计算,所以除了暴力破解毫无办法。
3.3 如果我们制作了一个和某实际热点相同名称的AP热点,STA会主动请求和AP连接。AP热点能不能假装密码正确,连接成功?
答案:不能。在STEP2,AP收到STA发送过来的消息,AP虽然可以生成GTK,但是因为不知道密码(PSK/PMK)无法计算得出PTK,这样的话STEP3的消息中需要的摘要MIC就无法计算出来。STEP3中STA一定无法收到正确的MIC。这样就不会有STEP4出现,进而,本次WIFI连接不会成功。
4.最后
WPA3有关的流程可以参考
Wifi 认证,关联,四次握手(WPA/WPA2/WPA3-SAE)_wpa2 wpa3_少歌的博客-CSDN博客
当然,WIFI连接并非无懈可击。最近这些年有不少论文分析了他们设计的攻击方法。可以阅读如下论文:
https://www.sciencedirect.com/science/article/pii/S0957417422015093
参考:
WiFi 四次握手分析 - Think && Act
wifi连接的4次握手的过程_wifi四次握手_围城&微尘的博客-CSDN博客
Wifi 认证,关联,四次握手(WPA/WPA2/WPA3-SAE)_wpa2 wpa3_少歌的博客-CSDN博客
WPA-PSK四次握手_wifi key mic计算_二十岁了还没有去过星巴克的博客-CSDN博客