我们平时在家里使用无线路由器时都比较在意安全问题,无线路由器有一项必须的设置就是加密方式,常见的选项有WPA2与WPA3,那选择哪个会更安全呢?
我们先回顾之前文章介绍过的WPA2-PSK的加密过程,STA和AP之间交换信息得到(STA MAC、AP MAC、PMK、ANonce、SNonce),这五个元素用相同算法计算得到PTK,如果双方PSK和SSID相同,PMK就相同,计算得到的PTK也就相同,使用PTK的前16位字节以及802.1X Authentication数据包,计算出MIC,AP从STA的接入包中用PTK解密得到MIC,如果得到的MIC和自己的MIC相同,也就验证了STA的密码和自己一致。

STA和AP之间交换密钥需要进行四次握手

1. AP把自己的随机数(ANonce)传给STA,STA在收到ANonce后,可以生成PTK。
2. STA把自己的随机数(SNonce)和生成的PTK中的MIC传给AP。AP收到SNonce后,可以生成PTK,将收到的MIC和自己生成的MIC比较进行完整性校验,如果校验失败,握手失败。
3. 校验成功,AP使用PTK加密GTK,然后把加密后的GTK传给STA。
4. STA使用自己生成的PTK解密GTK,同时验证MIC,如果无误则发送ACK进行确认。
在传输过程中可以发现PMK和PTK并没有在数据包中体现应该足够安全了吧,但现实并不是如此,通过抓取如上通信过程我们能不能还原出WIFI密钥呢?
首先伪造一个 Deauthentication 帧发送给AP,当AP收到后会断开与STA的连接,但是Deauthentication 帧并不是由STA发送的,这时它会与AP进行重连,在重连的过程中我们就可以抓取四次握手的报文,在这些报文中可以得到双方的MAC地址、SSID、ANonce、SNonce,如果我们有足够数量的字典尝试做为密钥,加上SSID计算出PTK,再加上报文中数据算出MIC与AP发送的MIC进行比较,如果一致那么就猜出了正确的密钥,虽然算是暴力破解,但是随着计算机性能提升再加上人们在密码中常常加入名字生日等等容易猜测数据的习惯,破解并不是很难。
那么WPA3针对这些做了哪些改进呢?

在四次握手之前增加了SAE认证过程
SAE 采用了“互联网工程任务组(IETF)”RFC7664 规范中定义的 “蜻蜓(Dragonfly)” 握手协议,将其应用于 Wi-Fi 网络以进行基于密码的身份验证。
首先通过ECC或FC对原始密钥PSK进行映射得到P, STA 生成随机数 rS ;AP 生成随机数 rA,而后STA 将 P · rS 传给 AP,Ap 将 P · rA 传给 STA,在双方计算出PMK后就可以进行四次握手的过程。
这里请注意P · rS 推不出 rS, P · rA 也推不出 rA, 这样即使通过抓包也得不到有用的数据,所以WPA3会比WPA2具有更高的安全性,此次就介绍到这里了,大家不必清楚密钥交换的过程,只需记住设置哪种方式更安全就可以啦。