Wi-Fi安全加密的演进下图所示,当前最新的加密方式是WPA3。WPA3对现有网络提供了全方位的安全防护,增强了公共网络、家庭网络和802.1X企业网的安全性。
WPA3的核心为对等实体同时验证方式(Simultaneous Authentication of Equals, SAE),即通信双方利用本地私钥和对方传输的公钥计算出密钥信息,并根据该密钥信息计算出各自的哈希值,交互给对方验证,完成认证后,最终为每个用户每次连接生成唯一的PMK。接下来将重点介绍WPA3 SAE协议交互过程。
1. SAE协议
SAE的握手协议又称为蜻蜓(Dragonfy)协议,蜻蜓协议的核心算法是迪菲 一 赫尔曼密钥交换(Diffe-Hellman Key Exchange, DHKE)协议,该协议是美国密码学家惠特菲尔德·迪菲和马丁·赫尔曼在1976年合作发明并公开的,它被广泛用于多种计算机通信协议中,比如SSH、VPN、HTTPS等,堪称现代密码基石。在介绍SAE协议之前,下面先简单介绍迪菲一赫尔曼密钥交换协议。
1.1 迪菲 — 赫尔曼密钥交换协议
迪菲 — 赫尔曼密钥交换协议用到了数学上原根和离散对数两个概念,本节先介绍这两个数据概念,在此基础上,进一步介绍迪菲 — 赫尔曼密钥交换生成过程以及安全缺陷。
1.1.1 迪菲 — 赫尔曼密钥交换协议成功过程
下图给出了迪菲一赫尔曼密钥交换生成过程,具体步骤如下:
1.1.2 迪菲 — 赫尔曼密钥交换协议安全缺陷
下图给出了公钥替换攻击过程:
1.2 SAE协议交互流程
SAE协议的密钥交互方式如下图所示,其本质也是一个基于离散对数计算困难的原理,这一点与迪菲 — 赫尔曼密钥交换协议非常类似。相对于迪菲一赫尔曼密钥交换协议,其改进主要体现在以下三个方面:
- 对于原根进行保护;
- 密钥生成算法改进;
- 生成密钥双方验证;
2. WPA3 SAE
为了解决WPA2遭受离线字典攻击的问题,IEEE 802.11协议组在2018年推出了WPA3协议用于升级WPA2,其中SAE(Simultaneous authentication of equals)这个原本用于Mesh协议中的对等认证协议最终被确立用来由password产生PMK。SAE的好处是它所基于的数学原理,有不可逆性。让我们先来看看整个WPA3 SAE加密的流程是什么样的。
WPA3相比于WPA2,生成PMK的方法发生了改变,需要先通过密码生成PWE,然后经过对等加密后才能生成PMK,接着进行四次握手,那么相比于WPA2生成PMK的方法,为什么WPA3会更安全呢,这一切都是因为非对称加密,椭圆曲线加密方程的数学性质决定的,关于椭圆曲线加密方程,大家可以自行上网百度,这里就不花太多时间了。
这里大家只需要知道一点结论,在椭圆曲线上可以找到两个点,满足P = k*G,我们可以通过k乘以G点,得到P点,但是即使我们知道P点和G点的坐标,但是却不能通过P/G得到k。即椭圆加密曲线满足加法和乘法,但是不满足减法和除法,这也就是我们整个SAE加密的数学理论。
就像我们上图所示的那样,PWE就是曲线上的G点,经过双方协商出来的K就是曲线上的另一个点P,其中u1*v1就是的k,由于数学性质,决定u1*v1很难被推算出来。这样攻击者只能通过不断的尝试密码,这样被攻破的时间也大大被加长。但是,通过整个流程我们之前在commit message中的v1和u1都是在每次协商的时候随机生成的,所以如果密码出错,再试下一次密码的时候,v1和u1又发生了变化,所以即便再尝试了n次后,好不容易找到了正确的密码,生成的TK和你想破解的用户的TK也会不一样,这样即便你缓存了所有的数据包,也解不出来。能解出来的数据包也只是之后的数据,这样也就保证了之前的数据,也就是所谓的前向保护。
2.1 Side Channel攻击破解PWE
虽然SAE的整个过程看起来没有什么可以下手的机会,但是百密一疏,把密码映射到椭圆曲线上过程却留下了可乘之机,即找到PWE点的过程是不够安全的。我们先来看下把密码映射到椭圆曲线上的方法是怎么做的:
Looping方式生成PWE
最初的WPA3方法寻找PWE的方法是通过不断进行hash(password || MAC1 || MAC2)来寻找PWE, 但是为了迷惑攻击者,需要固定进行40次,就是说如果PWE的x坐标在40次中提前被找到了,也会先被存起来,然后生成了一个随机值,然后用这个随机值替代password进行剩下的hash运算。
这个过程,就会发现用密码和随机值进行hash运算的时间会不同,这样就留给了黑客通过计算两者的时间差来寻找密码的过程。所以这也就是IETF组织一直没有用SAE作为任何正式的加密协议的原因。但是通过时间差来计算密码,这种事想想还是很难的,至少我到现在也没弄清楚这是个怎样的操作。所以,WPA3协议的制定者尽管在协议制定之初就收到了警告,但他也认为这是种只存在于理论上的攻击方式,依旧按照原方案进行了协议的制定。所以这也就出现了协议被推出了一年后被打脸的情况。于是,H2E应运而生。
2.2 H2E
H2E是Hash to Element的缩写,即采用直接进行hash的方法找到PWE。虽然依然是在椭圆曲线上,但是椭圆曲线需要满足特定的条件,这个特定的方程被叫做SSWU。H2E方法生成PT:
由PT生成PWE:
由于hash运算只进行一次,所以通过时间差进行攻击的路也被堵上了,目前看总算安全了。
3. 总结
综合来看,我们的密码演变从WPA2开始到WPA3 R3,发生了不少变化:
- WPA2: Password -> PMK -> PTK
- WPA3 v1: Password -> PWE -> PMK -> PTK
- WPA3 r3: Password -> PT -> PWE -> PMK -> PTK
虽然目前看,加密方法总算安全了,但是密码学从来都不是一个一成不变的学科,如果有一天新的攻击方法出现,那么我们的加密方法就又不得不升级了。