无线局域网从诞生之日起,其安全性就一直受到人们的关注。随着安全漏洞不断被发现,各种攻击方法也陆续被开发出来。无线局域网甚至一度被安全专家们认为毫无安全性可言,但安全上的担忧并未阻止无线局域网更为广泛的部署,这有两方面的原因,一是新的安全机制不断被制定,一是开展攻击被认为需要一定的专业能力才可以办到。
随着近年来我国对网络空间安全的高度重视,无线局域网作为网络空间的一部分,其安全性理应得到更多的关注。通过对安全协议的分析可以对无线局域网的安全机制有更深刻的理解,而对无线局域网进行攻击实战则可以了解安全协议背后存在的安全隐患。因此,本文章对无线局域网安全协议进行分析并在现有条件下对某些安全协议存在的漏洞进行攻击实战。
随着各种可移动终端的普及,无线局域网以其极大的灵活性和方便性而得到广泛应用。由于无线局域网开放式特点,使信息泄漏和非法接入等诸多安全问题尤为突出。为了解决WLAN网络的安全问题,IEEE 工作组于2003 年提出了IEEE 802.11i 标准,主要是对802.11协议的安全方面进行了增强。我国在2003年5月也提出了无线局域网国家标准GB 15629.11,引入了一种全新的安全机制——WAPI。目前全世界拥有着两类无线局域网标准,IEEE 802.11系列标准和WAPI标准,而后者是中国自己的标准。
无线局域网的安全机制为认证和加密。认证的目的是为了授权基站使用网络并向基站保证它连接的是一个合法的网络,加密的目的是为了保障消息的完整性和保密性,下表对两类标准重要版本的加密和认证方式做了一个简要的概括。
协议 | 加密 | 认证 | 密钥长度 | 时间 |
---|---|---|---|---|
WEP | RC4 | OSA/SKA | 64bits/128bits | 1999 |
WPA | RC4-TKIP | PSK/802.1x-EAP | 128 bits | 2003 |
WPA2 | AES-CCMP | PSK/802.1x-EAP | 128 bits | 2004 |
WPA3 | AES-CCMP/AES-GCMP | SAE/802.1x-EAP | 128 bits/256 bits | 2018 |
WAPI | SM4 | WAPI-CERT/WAPI-PSK | 128bits | 2003 |
WEP 是1999年9月通过的 IEEE 802.11 标准的一部分,使用RC4加密,并使用 CRC-32做完整性校验。WEP拥有64bits(40 bits Key+24 bits IV)和128 bits(104 bits Key+24 bits IV)两种标准。
WEP允许使用OSA和SKA两种认证方式,但是其连接操作流程基本一致:
开放系统认证流程:
发现阶段
请求响应帧互换:AP定时广播Beacon帧(或广播Probe-Request帧)来公布其安全策略和能力,然后STA通过发出Probe-Request消息来公布其能力并表明自己想要加入哪个网络,此后相应AP会根据STA的能力决定其是否可以加入网络,允许加入则单播Probe-Response帧,里面包含用何种加密和认证方式的信息。
认证阶段
OSA
所有请求认证的客户端都会通过认证,OSA并不提供安全保护,只是简单地交换一下标识。
SKA
挑战帧交换:AP先向STA发送一个挑战明文包(一个字符串),然后STA使用共享的密钥对挑战明文进行对称加密并发送给AP,AP解密然后对比原始挑战明文,对比一致则认证成功。
关联阶段
关联帧互换:STA与AP互相交换带有对方安全参数的关联帧,关联成功后STA会设置响应帧携带的的安全参数。
数据传输阶段
在这一阶段会使用RC4进行加密传输并使用CRC-32进行完整性校验。
WEP的MPDU格式:
加密原理:
解密原理:
RC4算法的弱密钥问题
存在部分弱密钥,使得密钥序列在不到100万字节内就发生了完全的重复,如果是部分重复,则可能在不到10万字节内就能发生重复。
具体来讲就是RC4存在弱密钥使得S在初始置换(Swap)后不变即密钥失去作用,在推导弱密钥的时候只要满足下列式子:
j = ( j + S [ i ] + T [ i ] ) m o d 256 = i j=(j+S[i]+T[i])mod\,256=i j=(j+S[i]+T[i])mod256=i
然后找到一组T从而得到一组密钥流K。
无密钥管理
由于WEP没有密钥管理机制,因此密钥通常在很长一段时间内不会改变,导致攻击者在1个密钥生存周期内可以获得大量的无线传输数据包。从中选择出使用相同IV的数据包,只需要知道一个明文和密文,就可以计算出这些数据报使用的密钥。如果攻击者将对应的IV和密钥组织成一个解密字典的形式,就可以对无线传输数据进行实时解密了。
假设有两段明文P1和P2,他们都采用相同的IV和Key,生成对应的密文C1和C2,则有下式:
C 1 = P 1 ⊕ R C 4 − K e y C 2 = P 2 ⊕ R C 4 − K e y C 1 ⊕ C 2 = P 1 ⊕ P 2 C_1=P_1\oplus RC4-Key\\ C_2=P_2\oplus RC4-Key\\ C_1\oplus C_2=P_1\oplus P_2 C1=P1⊕RC4−KeyC2=P2⊕RC4−KeyC1⊕C2=P1⊕P2
此时只要知道C1、C2和P1,就可以得到另一段明文P2,而第一段明文可以通过字典攻击,不断地对两段明文进行猜测,从而确定其中的一条明文,之后就是滚雪球式的破解明文了最终得出密钥。
另外,大多数用户长时间共享同一密钥,而是用WEP协议的设备都将密钥保存在设备中,一旦设备丢失,其他用户设备就会受到威胁。
单向的身份认证
规定的身份认证是单向的,即AP对申请接入的客户端进行身份认证,而客户端不会对AP进行身份认证。这种单向认证方式导致假冒AP的存在。此外,在认证过程中,AP会以明文的形式把128字节的随机序列流发送给客户端,如果能够监听一个成功的客户端与AP之间的身份认证的过程,截获他们双方之间相互发送的数据包,通过把随机值与加密值相异或,就可以得到密钥流。一旦拥有密钥流,任何人都可以向AP提出访问请求。
其他漏洞
初始向量太短,重用很快。
ICV被发现有弱点,有可能传输数据被修改而不被检测到。
WEP没办法应对重传攻击。
WAP拥有WPA、WPA2、WPA3三个标准。WPA是一个2003年推出的由WEP过渡到WPA2的方案,于2004年被WPA2取代,而WPA2又由于易受离线字典或暴力破解攻击和KPACK攻击,因此于2018年被WPA3所取代,但到目前为止,基于WPA3的相关设备仍未大面积使用。
基于WPA加密保护的的安全网络操作流程由于多种的认证方式和密钥管理方式而有着明显的不同,因此这里先做一个最基本的阶段划分,并在相应阶段对不同认证方式和密钥管理方式做一个简单的描述。
可以将安全网络操作流程划分为链路级关联、服务级关联和安全数据传输三个阶段,在关联阶段及以前部分为链路级关联,之后的部分到密钥协商完成为服务器关联阶段,剩下的就是安全数据传输阶段。
在服务器关联阶段,在WPA各个版本中,关键在于EAP认证和密钥协商:
发现阶段
请求响应帧互换:AP定时广播Beacon帧(或广播Probe-Request帧)来公布其安全策略和能力,然后STA通过发出Probe-Request消息来公布其能力并表明自己想要加入哪个网络,此后相应AP会根据STA的能力决定其是否可以加入网络,允许加入则单播Probe-Response帧,里面包含用何种加密和认证方式的信息。
认证阶段(关联阶段前发生)
OSA(WPA/WAP2/WPA3)
空认证帧交换:在关联之前进行OSA认证帧交换,目的是交换标识,不会提供安全保护。
OWE(WPA3)
先完成OSA的操作,之后在关联阶段会进行DH密钥交换,关联成功后PMK生成。
SAE(WPA3-Personal)
SAE可分为两个阶段,commit帧交换和confirm帧交换,SAE完成后PMK就设置成功,实际上PMK在confirm帧交换之前就已经算好了,但在confirm成功之前,这个PMK无法使用。
PSK(WPA-personal/WPA2-Personal)
这是一种简化的认证方式,用于不存在认证服务器,仅要求在STA预先输入一个密钥即可实现认证并获得访问权。WPA和WPA2使用这种认证方式,在WPA3中PSK被SAE替代。
PPSK(WPA-personal/WPA2-Personal)
PSK认证的加强版,可以使得每个STA与AP使用不同的共享密钥,这样即便一个STA的密钥被破解,其他STA也不会受到影响。
关联阶段
关联帧互换:STA与AP互相交换带有对方安全参数的关联帧,关联成功后STA会设置响应帧携带的的安全参数(比如OWE完后必须携带DH密钥参数)。
认证阶段(关联阶段后发生)
802.1x+EAP(WPA-Enterprise/WPA2-Enterprise/WPA3-Enterprise)
存在AS,一般是RADIUS服务器,此时,STA与AP之间采用EAPOL协议进行认证,AP和AS之间通过RADIUS协议进行认证,三方通信的过程中涉及到EAPOL和RADIUS这两种协议的重新封装。WPA的三个标准的企业版都使用这种认证方式,具体的认证方式与使用哪种EAP认证方式有关。
下图展示大致流程:
STA->AP:STA向AP发送EAPOL-Start消息表明已经做好了EAP认证准备
AP->STA:AP向STA发送EAP-Request消息请求EAP交换
STA->AP->Server:STA向AP发送EAP-Response消息并由AP转发给服务器
Server->AP->STA:服务器向AP回送Access-Challenge消息并由AP重新封装为EAPOL发送给STA
STA->AP->Server:STA生成一条EAP-Response 消息并由AP转发给服务器
Server->AP->STA:服务器向AP回送Access-Accept消息并由AP转发给STA,表明EAP交换成功
STA->AP:STA向AP发送EAPOL-Logoff消息表明结束认证
密钥管理阶段
成对密钥分发(保护单播流量)的过程又称为EAPOL四次握手,其过程如下:
消息1:AP生成自己的时变值Anonce并发送给STA,发送的还有AP的MAC地址。
消息2:STA生成自己的时变值Snonce并发送给AP,与此同时,STA生成PTK,并发送STA的MAC地址、MIC值(这个MIC值需要借助KCK产生并通过KEK加密,并不用于消息完整性校验)。AP在收到该消息后会生成PTK,这个PTK中包含了WPA密钥信息,AP使用PTK计算MIC然后使用KEK加密并取出消息2中加密的MIC,然后对比两个加密的MIC值,相同则继续握手,否则终止。该消息还向AP表明自己是活的且没有中间人存在。
消息3:AP生成相同的PTK,然后单播发出EAPOL-Key消息,告诉STA自己安装了PTK,并向STA表明认证是新鲜的且没有中间人存在,同时AP会使用KEK加密GTK并发送给STA。STA会像消息2一样验证AP发来的MIC,如果验证通过,第三次握手成功。
消息4:STA向AP单播EAPOL-Key,使用MIC作为保护,用于对上一条消息的确认。AP收到该消息后会像消息2一样验证STA发来的MIC,如果验证通过,第四次握手成功并确保组密钥握手的安全开始。
组密钥(保护组播和广播流量)分发的过程只需两次握手,其过程如下:
此处的密钥管理符合802.11i标准,但大致的流程不会变化。在某些802.11标准中,比如802.11w,会新增一个IGTK对组播和广播的管理帧加密,而单播管理帧会使用加密数据帧的密钥进行加密。
安全数据传输阶段
在这一阶段,WPA会使用TKIP密码套件保护数据传输,WPA2会使用CCMP密码套件保护数据传输,WPA3会使用GCMP或CCMP密码套件保护数据传输。
TKIP(WPA)
CCMP(WPA2/WPA3)
GCMP(WPA3)
WPA和WPA2的MPDU格式:
TKIP加解密原理:
CCMP加解密原理:
GCM原理:
在最开始,人们习惯把认证和加密分开,到后来才想到把认证和加密相结合,于是有了CCM和GCM。GCM和CCM有着相同的输入,都需要输入密钥、随机数、附加数据和待加密数据,但限于缺乏必要的资料,且没有条件进行抓包分析,不知道具体的帧格式,因此只展示原理图。下图是GCM的原理图:
Counter0通过IV得来,以后的Counter每次在前一个Counter的基础上加1,类似CTR,而整个BGM其实包含两部分,一部分是以GHASH为核心计算GMAC,一部分是以GCTR为核心对数据进行加密,对计数器进行加密的算法一般使用AES。GCM基于并行化设计,可以提供高通量及低成本和低延迟。
WPA3的蜻蜓帧交换包含SAE认证和EAPOL密钥管理,其中SAE认证(这里的SAE是WPA3 2018年刚出来时的SAE)可见下简图:
生成PE(Password Element,密钥元素)
这里有两种方式生成PE,分别是ECC(Elliptic Curve Cryptography,椭圆曲线加密)和FCC(Finite Field Cryptography,有限域加密),这里采用ECC的方式
found = 0
counter = 1
n = len(p) + 64
do {
base = H(max(Alice,Bob) | min(Alice,Bob) | password | counter)
temp = KDF-n(base, "Dragonfly Hunting And Pecking")
seed = (temp mod (p - 1)) + 1
if ((seed^3 + a*seed + b) is a quadratic residue mod p)
then
if ( found == 0 )
then
x = seed
save = base
found = 1
fi
fi
counter = counter + 1
} while ((found == 0) || (counter <= k))
y = sqrt(x^3 + ax + b)
if ( lsb(y) == lsb(save) )
then
PE = (x,y)
else
PE = (x,p-y)
fi
counter为8bits的计数器
p为选择的大素数,这个大素数作为模数
max(Alice,Bob)代表Alice和Bob设备MAC地址的最大值,min(Alice,Bob)代表Alice和Bob设备MAC地址的最大值
KDF-n(base, “Dragonfly Hunting And Pecking”)为一个密钥导出函数,基于base,导出长度为n,"Dragonfly Hunting And Pecking"代表这个KDF用于蜻蜓帧
(seed^3 + a*seed + b) is a quadratic residue mod p 意思是满足下列式子:
y 2 ≡ ( s e e d 3 + a ∗ s e e d + b ) 2 m o d p y^2\equiv(seed^3 + a*seed + b)^2\,mod\,p y2≡(seed3+a∗seed+b)2modp
Commit帧交换
两个对等实体各自产生2个随机数private和mask,并满足:
1 < p r i v a t e < q 1 < m a s k < q 1
计算scalar和element:
s c a l a r = ( p r i v a t e + m a s k ) m o d q scalar = (private + mask) mod\,q scalar=(private+mask)modq
两个对等实体交换各自生成的scalar和element(element因为椭圆曲线的离散对数问题因而受向前保护),如果两个scalar和两个element都相等或者不在1和q之间,那么验证就会失败,前者意味着可能遭到了反射攻击,后者则是不满足基本的条件。
两个对等实体各自计算ss共享密钥:
s s = F ( s c a l a r − o p ( p r i v a t e , e l e m e n t − o p ( p e e r − e l e m e n t , s c a l a r − o p ( p e e r − s c a l a r , P E ) ) ) ) ss = F(scalar-op(private, element-op(peer-element,scalar-op(peer-scalar, PE)))) ss=F(scalar−op(private,element−op(peer−element,scalar−op(peer−scalar,PE))))
从ss导出kck和mk密钥:
k c k ∣ m k = K D F − n ( s s , ′ D r a g o n f l y K e y D e r i v a t i o n ′ ) w h e r e n = 2 l e n ( p ) . kck|mk = KDF-n(ss, 'Dragonfly Key Derivation')\\where\,n = 2len(p). kck∣mk=KDF−n(ss,′DragonflyKeyDerivation′)wheren=2len(p).
kck和mk的长度大于等于len§,这里的kck仅用于Confirm帧交换。
实际应该是这样的:
KaTeX parse error: Undefined control sequence: \ at position 88: …\{256,384,512\}\̲ ̲kck=truncation(…
Confirm帧交换
计算confirm,这是一个哈希值:
c o n f i r m = H ( k c k ∣ ∣ s c a l a r ∣ ∣ p e e r − s c a l a r ∣ ∣ E l e m e n t ∣ ∣ p e e r − e l e m e n t ∣ ∣ < s e n d e r − i d > ) confirm = H(kck || scalar || peer-scalar || Element || peer-element ||
sender-id是发送方的标识,在生成base的时候获取。
两个对等实体交换confirm,confirm比对失败,那么前功尽弃,如果成功,原来计算好的PMK就可以设置了。
SAE-PK和常规的SAE有所不同,SAE-PK主要针对伪造AP攻击,于2020年12月发布。
SAE-PK对SAE的密钥导出方式做了拓展,首先仍然得计算出共享密钥ss,然后在导出kck和pmk的基础上再导出一个kek,具体如下:
k c k ∣ ∣ p m k ∣ ∣ k e k = K D F − n ( s s , ′ S A E − P K k e y s ′ , c o n t e x t ) w h e r e n = 2 Q + 256. k c k = t r u n c a t i o n ( k c k ∣ ∣ p m k ∣ ∣ k e k , 0 , Q − 1 ) p m k = t r u n c a t i o n ( k c k ∣ ∣ p m k ∣ ∣ k e k , Q , Q + 255 ) k e k = t r u n c a t i o n ( k c k ∣ ∣ p m k ∣ ∣ k e k , Q + 256 , 2 Q + 255 ) kck || pmk ||kek= KDF-n(ss, 'SAE-PK\,keys',context)\\where\,n = 2Q+256.\\ kck=truncation(kck || pmk ||kek,0,Q-1)\\ pmk=truncation(kck || pmk ||kek,Q,Q+255)\\ kek=truncation(kck || pmk ||kek,Q+256,2Q+255) kck∣∣pmk∣∣kek=KDF−n(ss,′SAE−PKkeys′,context)wheren=2Q+256.kck=truncation(kck∣∣pmk∣∣kek,0,Q−1)pmk=truncation(kck∣∣pmk∣∣kek,Q,Q+255)kek=truncation(kck∣∣pmk∣∣kek,Q+256,2Q+255)
在confirm帧交换的时候,AP会向STA回送一个包含数字签名Sig、经过kek加密的Modifier字段和AP的ECDH公钥的Confirm帧,这个帧足以让STA鉴别AP是否假冒,Sig的生成方式如下:
S i g A P = ( e l e A P ∣ ∣ e l e S T A ∣ ∣ s c a A P ∣ ∣ s c a S T A ∣ ∣ M ∣ ∣ K A P ∣ ∣ A P − B S S I D ∣ ∣ S T A − M A C ) Sig_{AP}=(eleAP||eleSTA||scaAP||scaSTA||M||K_{AP}||AP-BSSID||STA-MAC) SigAP=(eleAP∣∣eleSTA∣∣scaAP∣∣scaSTA∣∣M∣∣KAP∣∣AP−BSSID∣∣STA−MAC)
OWE认证是OSA的加强版,但仍不会经过认证,同样使用椭圆曲线加密并采取DH方式进行密钥交换。OWE会先进行一次OSA,然后再借助关联帧交换DH公钥,之后会生成PMK,OWE认证简图可见下:
OWE发现
在这一阶段,AP发送携带AKM的Beacons或Probe Response帧,一旦某个STA兼容OWE功能则会进行开放系统认证。
OWE关联
OWE会将DH参数元素以TLV的方式添加到关联帧里面,每个DH参数元素的形式如下表:
Element ID | Length | ELement ID Extention | Element-specific Data |
---|---|---|---|
255 | variable | 32 | group|public key |
出于互用性的目的,OWE必须支持256位的椭圆曲线,同时,此处会检查public key的有效性
关联之后会生成PMK
按下来生成PMK:
z = F ( D H ( x , Y ) p r k = H K D F − e x t r a c t ( S T A − D H − P u b l i c − K e y ∣ ∣ A P − D H − P u b l i c − K e y ∣ ∣ D i f f i e − H e l l m a n − P a r a m e t e r − E l e m e n t , z ) P M K = H K D F − e x p a n d ( p r k , ′ O W E K e y G e n e r a t i o n ′ , n ) z = F(DH(x, Y)\\ prk = HKDF-extract(STA-DH-Public-Key || AP-DH-Public-Key || Diffie-Hellman-Parameter-Element, z)\\ PMK = HKDF-expand(prk, 'OWE\,Key\,Generation', n) z=F(DH(x,Y)prk=HKDF−extract(STA−DH−Public−Key∣∣AP−DH−Public−Key∣∣Diffie−Hellman−Parameter−Element,z)PMK=HKDF−expand(prk,′OWEKeyGeneration′,n)
当PMK生成,prk和z都会被删除,同时生成PMKID:
P M K I D = T r u n c a t e − 128 ( H a s h ( S T A − D H − P u b l i c − K e y ∣ ∣ A P − D H − P u b l i c − K e y , 0 , 127 ) ) PMKID = Truncate-128(Hash(STA-DH-Public-Key || AP-DH-Public-Key,0,127)) PMKID=Truncate−128(Hash(STA−DH−Public−Key∣∣AP−DH−Public−Key,0,127))
PMKID与PMK缓存。再往后就会进行四次握手,并且WPA3的PMK长度并不像固定(WPA/WPA2的的PMK长度是固定的)。
Portal认证:Portal认证通常也称为Web认证,一般将Portal认证网站称为门户网站。未认证用户上网时,设备强制用户登录到特定站点,用户可以免费访问其中的服务。当用户需要使用互联网中的其它信息时,必须在门户网站进行认证,只有认证通过后才可以使用互联网资源。用户可以主动访问已知的Portal认证网站,输入用户名和密码进行认证,这种开始Portal认证的方式称作主动认证。反之,如果用户试图通过HTTP访问其他外网,将被强制访问Portal认证网站,从而开始Portal认证过程,这种方式称作强制认证。Portal通常与OSA或OWE一起应用。
WPS认证:Wi-Fi联盟发布的第一个独立的标准,适用性非常的广范,适用于各种协议,也适用于各种设备。基本目的就是用户可以不知道网络的SSID,不知道加密方式加密密码的时候,只需要按下AP和对端的WPS按钮,或者输入一个PIN码,AP和STA就关联上彼此。WPS只包含认证而没有加密功能。
DPP认证:一种由 Wi-Fi 联盟认证的预配协议,用于配置 Wi-Fi 设备的安全且标准化的配置协议。使用DDP将新设备添加到网络就像扫描QR码一样简单,这降低了复杂性并增强了用户体验,同时在没有UI的情况下载入设备,如智能家居和物联网产品。与WPS等旧协议不同,DDP通过公钥加密技术整合了强大的加密功能,以确保网络在添加新设备时保持安全。
EAP-TLS是众多EAP中安全性最高的一种,WPA/WPA2默认使用EAP-TLS,而在WPA3的企业版中EAP-TLS也是唯一选项,且必须使用以下192位的密码套件:
EAP-TLS定义在RFC5216中,是使用最广泛,也是WLAN中最安全的一种EAP类型。EAP-TLS除了需要服务器端证书外,还需要客户端证书。
部署服务器端证书并不需要太大的负担,然而为每一个客户端部署唯一的数字证书需要企业PKI基础设施,这对企业来说是一个负担。因此,除非企业已经存在PKI基础设施,否议在企业WLAN中部署EAP-TLS不是第一建议。
WAPI是针对WLAN的一种安全增强,采用公开密钥体制的椭圆曲线密码算法和秘密密钥体制的分组密码算法,实现设备的身份鉴别、链路验证、访问控制和用户信息在无线传输状态下的加密保护。
WAPI由WAI和WPI两部分组成,分别实现用户身份鉴别和传输数据加密,WAI采用公钥密码体制,利用证书来对STA和AP进行双向认证。
WAPI的安全增强体现在双向认证和动态更新加密数据流的密钥,并且还提供完整性校验。
到2007年为止,WAPI共出现了三个版本,以下主要详细描述第三个版本WAPI-XG1。
WAPI的接入过程也可以分为链路级和服务级关联两个大阶段(WPA也可以如此划分)。在链路级关联,WAPI会经过网络发现–>开放系统认证–>关联,这与WPA类似,在服务器关联阶段,WAI和WPI会分别实现STA的接入鉴别和密钥协商,以下为服务器关联阶段的接入过程图:
与WPA类似,WAPI也拥有两种认证模式,分别是WAPI-CERT和WAPI-PSK,前者适用于对安全要求较高的企业,后者适用于要求简单易用的家庭。WAPI的安全网络操作流程分为以下阶段:
链路级关联阶段
在这一阶段,为了使STA能够识别启用WAPI无线安全机制,信标帧、关联请求帧、探测请求帧都应当包含WAPI信息元素,以下为WAPI信息元素的格式:
服务器关联阶段
认证阶段
WAPI-CERT:
采用三元对等实体鉴别,使用STA、AP的公钥和私钥来生成BK。
WAPI-PSK:
简化的认证方式,生成的PSK就等于BK。
在完成认证后,两种认证方式以不同方式生成BK,BK类似于WPA中的PMK
密钥管理阶段
单播密钥协商:
单播密钥交换请求:AP生成一个随机数N1并且发送(BKID,ADDID,N1,Param1)给STA,其中BKID是当前BK的标识符,ADDID是AP和STA的MAC地址拼接的结果,Param1是一些其他参数例如flag、USKID和加密套件。
单播密钥交换响应:当STA接收到请求,STA会生成一个随机数N2并且计算PTKs,计算方式如下:
U E K ∣ ∣ U C K ∣ ∣ M A K ∣ ∣ K E K = K D − H M A C − S H A 256 ( P S K , A D D I D ∣ ∣ N 1 ∣ ∣ N 2 ) UEK||UCK||MAK||KEK=\mathrm{KD-HMAC-SHA256} (PSK, ADDID||N_1||N_2) UEK∣∣UCK∣∣MAK∣∣KEK=KD−HMAC−SHA256(PSK,ADDID∣∣N1∣∣N2)
然后STA计算MIC1:
M I C 1 = K D − H M A C − S H A 256 ( M A K , B K I D ∣ ∣ A D D I D ∣ ∣ N 1 ∣ ∣ N 2 ∣ ∣ P a r a m 1 ∣ ∣ P a r a m 2 ) MIC_1= \mathrm{KD-HMAC-SHA256}(MAK, BKID||ADDID ||N_{1}|| N_{2} ||{ Param }_{1}||{ Param }_{2}) MIC1=KD−HMAC−SHA256(MAK,BKID∣∣ADDID∣∣N1∣∣N2∣∣Param1∣∣Param2)
最后,STA发送(BKID,ADDID,N1,N2,Param2,MIC1)给AP,Param2与Param1类似。
单播密钥确认:当AP收到一个单播密钥响应,AP同样计算PTKs并计算MIC1与收到的MIC1做对比,如果有效,AP计算MIC2:
M I C 2 = K D − H M A C − S H A 256 ( M A K , B K I D ∣ ∣ A D D I D ∣ ∣ N 1 ∣ ∣ N 2 ∣ ∣ P a r a m 1 ∣ ∣ P a r a m 2 ∣ ∣ P a r a m 3 ) MIC_2= \mathrm{KD-HMAC-SHA256}(MAK, BKID||ADDID ||N_{1}|| N_{2} ||{ Param }_{1}||{ Param }_{2}||{ Param }_{3}) MIC2=KD−HMAC−SHA256(MAK,BKID∣∣ADDID∣∣N1∣∣N2∣∣Param1∣∣Param2∣∣Param3)
然后AP发送(BKID,ADDID,N2,Param3,MIC1)给STA,Param3与Param1类似。
当STA接收到单播密钥确认消息,就会计算MIC2并作对比,如果有效,STA就会信任这个AP。
以上的单播密钥协商过程在WAPI-XDG1中使用,但这显然有问题,,因为除了PSK,生成PTKs的其他参数都可以直接捕获到。因此可以采用两种方式对单播密钥协商作出改善:
基于时间戳
**单播密钥交换请求:**AP生成一个随机数n1并使用ECDH计算出公钥PAP,然后创建一个数字签名Sig(SKAP,PAP,SPI)并发送(SPI,PAP,(SKAP,PAP,SPI)),其中SKAP是一个长期存在的私钥,SPI按下式计算:
S P I = M A C S T A ∣ ∣ B S S I D A P ∣ ∣ t h e t i m e o f a u t h e n t i c a t i o n r e q u e s t SPI=MAC_{STA}||BSSID_{AP}||the\,time\,of\,authentication\,request SPI=MACSTA∣∣BSSIDAP∣∣thetimeofauthenticationrequest
**单播密钥交换响应:**当STA接收到一个单播密钥交换请求,STA会检查签名是否有效,如果有效,STA会生成一个随机数n2并使用ECDH计算公钥PSTA然后计算共享的密钥K=n2PAP,并按下式计算PTKs:
U E K ∣ ∣ U C K ∣ ∣ M A K ∣ ∣ K E K = K D − H M A C − S H A 256 ( K , S P I ) UEK||UCK||MAK||KEK=\mathrm{KD-HMAC-SHA256}(K,SPI) UEK∣∣UCK∣∣MAK∣∣KEK=KD−HMAC−SHA256(K,SPI)
然后STA会发送(SPI,PAP,PSTA,Sig(SKSTA,PSTA||PAP),HMAC-SHA256(MAK,SPI))给AP,SKSTA仍然是一个长期性的私钥。
当AP接收到响应,就会检查PAP和数字签名,如果有效,AP就会计算共享密钥K和PTKs并且验证传来的HMAC-SHA256值,如果再次通过,安全通道就被建立。
基于随机数
**单播密钥交换请求:**AP生成一个随机数n1和一个随机数nonce1并使用ECDH计算出公钥PAP,然后发送(SPI,nonce1,PAP)给STA,SPI计算方式改变:
S P I = M A C S T A ∣ ∣ B S S I D A P SPI=MAC_{STA}||BSSID_{AP} SPI=MACSTA∣∣BSSIDAP
**单播密钥交换响应:**STA收到请求后STA会生成一个随机数n2和nonce2并使用ECDH计算公钥PSTA,然后计算共享的密钥K=n2PAP,接着再计算PTKs:
U E K ∣ ∣ U C K ∣ ∣ M A K ∣ ∣ K E K = K D − H M A C − S H A 256 ( K , S P I ∣ n o n c e 1 ∣ n o n c e 2 ) UEK||UCK||MAK||KEK=\mathrm{KD-HMAC-SHA256}(K,SPI|nonce_1|nonce_2) UEK∣∣UCK∣∣MAK∣∣KEK=KD−HMAC−SHA256(K,SPI∣nonce1∣nonce2)
然后发送(SPI,nonce1,nonce2,PSTA,Sig(SKSTA,nonce1||nonce2||PSTA||PAP),HMAC-SHA256(MAK,SPI))给AP。
**单播密钥确认:**AP接收到响应消息后就会检查n1和数字签名,如果有效,AP就会计算共享密钥K=n1PSTA和PTKs,并验证传来的HMAC-SHA256值,如果再次通过,AP就会发送(SPI,n2,Sig(SKAP,nonce2||nonce1||PSTA||PAP),HMAC-SHA256(MAK,SPI))。当STA接收到单播密钥确认消息,就会按前面的方式进行检查,当检查通过,安全通道就被建立。
通过这两种方式,可以为WAPI提供向前保护,即便共享密钥K被破解,也无法得到随机数私钥n,当在椭圆曲线上换了一个基点后,共享密钥就会随之改变。因此,即便得到一个共享密钥,这个密钥也只能用于破解一段时间内的数据。
组播密钥协商:
在单播密钥协商的基础上开始组播密钥协商,AP使用前面协商好的KEK对生成的组播主密钥进行加密并开始组播,当STA收到这个组播消息后,STA会检查消息认证码是否正确、密钥通告标识字段值是否单调递增等等,通过检查并解密会得到一个组播主密钥,然后使用KD-HMAC-SHA256导出会话密钥,通过对会话密钥进行截取就可以得到数据加密秘钥和完整性校验密钥,之后STA对AP进行回应,AP确认后就会安装生成的会话密钥。
在单播密钥协商和组播密钥协商过程中,密钥都具备一定的生存期,当生存期结束,STA与AP就会重新协商会话密钥。
安全数据传输阶段
数据加密:使用SM4-OFB模式对数据进行加密。
完整性校验:使用CBC-MAC-SM4模式生成MIC从而做完整性校验。
以上安全隐患皆为2007年以前版本存在的安全隐患,在前面已经谈到过可以使用时间戳或随机数并借助ECDH实现PFS。
相同点:
不同点:
这里之所以将WAPI与802.11i进行对比是因为WAPI和IEEE 802.11i恰好是两种不同的安全机制,且发布的时间前后差距不过一年。
任何声称能解决密码问题的协议认证密钥交换必须能够抵抗主动、被动和
字典攻击并具有前向保密性。其实可以看到,WiFi Alliance在2018年才发布了提供向前保护的协议标准WPA3,但实际上中国在2007年就已经出现了针对WAPI进行向前保护的解决方案,巧合的是,两者向前保护的方案使用的都是ECDH。
基于对WEP和WPA/WPA2协议的分析,主要基于以下弱点进行攻击实战:
无线渗透网卡AC1300M,vmware虚拟机kali 2021,华为E5572-855无线路由器(BSSID:28:33:34:25:91:BA),宿主机Win10充当终端(无线网卡MAC地址:84:1B:77:A8:3D:AB)。
WEP密钥:123321qwertas
FMS攻击
FMS攻击利用了RC4的密钥排列算法和IV使用上的弱点。因为有弱IV值的存在,会泄露密钥流的第一个字节中的密钥信息。而由于相同的密钥与不同的IV被反复使用,所以如果收集到足够多的弱IV数据包,且知道密钥流的第一个字节,就可以确定密钥。
IEEE 802.11b中进行数据包封装的时候,第一个字节是SNAP(Sub Network Access Protocol)头(逻辑链路控制标准的一部分),它几乎总是0xAA,通过与密文中第一个加密字节进行异或即得密钥流第一个字节
KoreK攻击
经统计,该攻击方式的攻击效率要远高于FMS攻击,FMS攻击只利用少部分的弱IV来生成密钥流,而KoreK则用到了更多的弱IV,并且在计算中不只用到了密钥流的第一个字节,还用到了第二个字节,发现并总结了额外的16种RC4密钥前i个字节、中间生产的密钥流的前两个字节和下一个密钥K[i]之间的关系。
还原WEP密码的关键是要收集足够的有效数据帧,从这个数据帧里可以提取IV值和密文。由于确定密文对应明文的第一个字节是逻辑链路控制的IEEE 802.2头信息,通过这个一个字节的密文和明文做异或即可得到一个字节的密钥流。RC4只是把原来的密码顺序打乱,因此获得的一字节的密钥流就是IV+PASSWORD的一部分。由于顺序被打乱,因此需要收集足够多的这样的密钥流来进行统计分析。用密码碎片重新排序配合IV使用RC4算法得出的值和多个流密码位置进行比较,最后得到这些密码碎片正确的排列次序。这样,WEP密码就被破解了。
PTW攻击
PTW攻击,于2007年发布。PTW比所有其他攻击更强大,它可以利用捕获的每个数据包。它实现了一个密钥排名策略,而不是尝试密钥的所有可能组合,而是选择一定数量的可能密钥,并基于这些密钥继续RC4算法。使用不同的投票策略,攻击者可以在树中的每个决策中选择最可能的密钥字节,以确定正确的密钥。
不断向目标网络注入arp-request包以获取反馈,基于RC4在IV使用上的弱点,当收集到足够多的弱IV数据包就可以确定密钥。使用普通的FMS攻击KoreK攻击太耗费时间,因此实验中使用ARP-Request重放和PTW攻击对密钥进行破解。PTW不会尝试密钥的所有可能组合,而是会选择一定数量的可能密钥,并基于这些密钥继续RC4算法。使用不同的投票策略,攻击者可以在树中的每个决策中选择最可能的密钥字节,以确定正确的密钥。测试表明,只需要35000到40000个数据包即可获得50%的成功概率。其他消息来源指出,可以在85000帧中获得95%的概率。
• UI界面设置路由器的加密方式为WEP
使用mdk4强制已关联设备下线
mdk4 wlan0mon d -B 28:33:34:25:91:BA -S 84:1B:77:A8:3D:AB -c 1
使用aireplay-ng抓取ARP数据包并不断重放,同时使用airodump-ng不断抓取无线路由器反馈的数据包,可以同时开启aircrack-ng实时破解WEP密钥:
aireplay-ng -3 -b 28:33:34:25:91:BA -h 84:1B:77:A8:3D:AB wlan0mon
-3表明要进行ARP Request 重放。
-b指定目标AP的MAC地址。
-h指定已经与AP关联的客户端MAC地址。
airodump-ng --bssid 28:33:34:25:91:BA wlan0mon -w WEPCrack
–bssid指定目标AP的MAC地址。
-w指定抓取包的存储位置,这里是存储为当前目录下的WEPCrack开头的系列文件。
wlan0为开启嗅探模式的设备名。
aircrack-ng WEPCrack-01.cap
以下是最终结果,密码成功破解,并且使用了35000的IVs并花费了两个多小时,而这还是使用PTW的结果。这表明,使用WEP只要长期不更换密钥,在一定的时间内就可以破解,而且要注意的是,还存在比PTW更高效的攻击手段,比如在2010年Teramura等人提出了TeAM-OK攻击,只需要2万到5万个数据帧就可以恢复密钥,而在2011年Sepehrdad,Vaudenay和Vuagnoux提出了Tornado攻击,只需要4000到9000个数据帧就可以恢复密钥。
无线渗透网卡AC1300M,vmware虚拟机kali 2021,华为E5572-855无线路由器(BSSID:28:33:34:25:91:BA),宿主机Win10充当终端(无线网卡MAC地址:84:1B:77:A8:3D:AB)。
WPA-PSK/WPA2-PSK密钥:123321qwertasd.
除去WPA四次握手的第三次握手的重放漏洞外,WPA并没有比较明显的弱点,但是在其四次握手过程中,WPA/WPA2会使用一个明文的MIC对802.1x认证数据做一个校验,这就产生一个问题,如果可以构造一个密码字典,然后一个一个的计算MIC,并截取四次握手中消息中携带的明文MIC作对比,一旦相等,密码字典中相应的密码就是WPA/WPA2的密码。具体的流程如下图所示:
通过使已经关联的客户端强制下线来抓取四次握手包,然后准备一份密码字典进行暴力破解。为了节省离线破解的时间,可以利用密码字典制作一份彩虹表,这可以极大地减少暴力破解的时间消耗。
为了减少时间的消耗,提前准备一份包含无线路由密码的小字典,但不能太小。
强制客户端下线并抓取四次握手包
使用aireplay-ng强制在线用户下线:
aireplay-ng -0 0 -a 28:33:34:25:91:BA -c FF:FF:FF:FF:FF:FF wlan0mon
-0可以指定发出deauth包的次数,这里指定0代表不停deauth。
-a指定无线ap的mac地址,E4:FD:A1:46:93:B7为无线ap的mac地址。
-c指定终端用户的mac地址。
然后开始抓包,当抓取到EAPOL包后就可以停止抓包:
airodump-ng --bssid 28:33:34:25:91:BA wlan0 -w WPACrack
开始离线破解:
aircrack-ng -w password.txt ./WPACrack-01.cap
-w指定密码字典的路径。
无线渗透网卡AC1300M,vmware虚拟机kali 2021,华为E5572-855无线路由器(BSSID:28:33:34:25:91:BA),宿主机Win10充当终端(无线网卡MAC地址:84:1B:77:A8:3D:AB),fluxion 6.9(github上的一个项目)。
WEP、WPA的各个版本无法实现双向认证,同样也无法避免中间人、AP假冒等攻击。使用快捷工具fluxion 6.9先抓取握手包,然后再创建一个双胞胎AP引诱客户端连接并主动弹出认证网页要求输入密码修复网络,接着就会借助前面抓取到的握手包对密码做验证,直到用户输入正确的密码,对于一个没有相应专业知识的用户来说,这是一种极为容易上当的钓鱼方式。
启动程序
./fluxion.sh
抓取握手包
选择检索WPA/WPA2加密散列。
扫描2.4GHz所有信道,此时会弹出一个抓包窗口,发现目标后就Ctrl+C退出抓包窗口。
选择HUAWEI-91B。
选择跳过。
选择重置攻击。
选择mdk4解除认证方式。
选择cowpatty作为Hash的验证方式。
选择每30秒钟检查一次握手包,这取决于无线网卡的性能。
选择使用Synchronously进行验证,然后会同时开启三个窗口抓取握手包,一个窗口使用mdk4解除认证,一个窗口抓包,另一个窗口记录结果。
退出该窗口,选择启动攻击方式。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
这次创建一个邪恶的双胞胎接入点。
选择跳过。
选择重置攻击。
选择mdk4作为解除认证的方式。
选择hostpad创建流氓AP。
选择cowpatty做密码验证。
选择使用抓取到的hash文件。
选择cowpatty做hash验证。
选择创建SSL证书。
选择在假冒AP存在的同时不停断开原来的网络。
选择中文的通用认证网页。
此时,伪造AP成功,注意到出现了两个同名的Wi-Fi:
第二个就是假冒的AP,是一个开放认证的AP。
尝试连接假冒AP,然后后台发生变化,同时客户端强制弹出一个认证窗口:
假如输入一个错误的密码,它就会提示密码错误,直到输入一个正确的密码:
之后后台就会把密码保存到指定的日志文件中:
最后查看一下保存的密码:
这就是无线AP的密码。
无线渗透网卡AC1300M,vmware虚拟机kali 2021,华为E5572-855无线路由器(BSSID:28:33:34:25:91:BA),宿主机Win10充当终端(无线网卡MAC地址:84:1B:77:A8:3D:AB)。
Auth flood攻击
验证洪水攻击,也叫Auth Dos攻击,该攻击主要针对那些通过验证并已经与无线ap关联了的客户端,攻击者会发送大量伪造的身份验证请求帧,当收到大量伪造的身份验证请求超过所能承担的能力时,ap将会断开其他无线服务连接。
Deauth flood攻击
该攻击为取消身份验证洪水攻击或验证阻断洪水攻击,旨在通过欺骗从AP到客户端单播地址的取消身份验证帧来将客户端取消关联,这将导致客户端不得不重新关联和认证。攻击方必须不断发送取消身份验证帧才能让客户端持续拒绝服务。
De-association Flood攻击
取消关联洪水攻击,该攻击通过欺骗从AP到客户端的取消关联帧强制客户端称为未关联/未认证的状态。一般来说,在攻击者发送另一个取消关联帧之前,客户端会重新关联以再次获取服务。攻击者反复进行该攻击才能使得客户端拒绝服务。
association Flood攻击
关联洪水攻击,该攻击试图通过大量模仿和伪造的无线客户端关联来填充AP的客户端关联表,从而达到淹没AP的目的。一旦关联表溢出,客户端将无法连接AP。
EAPOL Start Flood攻击
使用EAPOL Start使AP忙于虚假会话,这与认证洪水攻击类似,与去关联和去认证攻击配合可以让下线的客户端无法上线。
对目标AP实施去认证攻击
广播去认证攻击包,这会对所有关联的客户端进行去认证攻击。
aireplay-ng -0 0 -a 28:33:34:25:91:BA -c FF:FF:FF:FF:FF:FF wlan0mon
或使用mdk4进行去认证攻击和去关联攻击。
mdk4 wlan0mon d -B 28:33:34:25:91:BA -S FF:FF:FF:FF:FF:FF -c 1
去关联和去认证都将导致客户端下线。
认证洪水攻击
mdk4 wlan0mon a -a 28:33:34:25:91:BA
这种攻击手段最好配合去关联和去认证攻击,先将客户端挤下线,然后发起认证洪水攻击,然后已经下线的客户端就无法上线了。
EAPOL启动洪水攻击
最好配合去关联和去认证攻击。
mdk4 wlan0mon e -t 28:33:34:25:91:BA
无线局域网不需要有线连接就能收发数据,人们能够自由地把计算机设备放置在最合适的地方。并且无线局域网很大程度上的灵活性,使人们能够及时对有变动的要求做出应对。虽然无线局域网拥有诸多优势,但同样面临着一些阻碍其发展的问题,而安全性就是最主要的问题之一。作为一个不断改善和升级的过程,只有采取一套严密的安全方案以确保无线局域网的安全,才能让无线局域网得到更大范围的发展。
[1] 易平. 无线网络攻防教程[M]. 北京:清华大学出版社, 2015 :42-118.
[2] 张帆, 马建峰. WAPI实施方案的安全性分析[J]. 西安电子科技大学学报(自然科学版), 2005, 32(4):545-549.
[3] 张帆, 马建峰. WAPI认证机制的性能和安全性分析[J]. 西安电子科技大学学报(自然科学版), 2005, 32(2):210-215.
[4] Chun-Jie Cao, Chao Yang, Xing-Hua Li, Yuan-Bo Guo and Jian-Feng Ma. Perfect Forward Secrecy of Authentication and Key Exchange Protocols in Three Versions of WAPI[J]. Information Technology Journal, 2007, 6(7):1108-1113.
[5] 段宁, 马建峰. 基于IEEE 802.11b网卡的WPA与WAPI集成接入方法[J]. 西安电子科技大学学报(自然科学版), 2006, 33(5):804-809.
[6] Lee B. Stateless Re-Association in WPA3 Using Paired Token[J]. electronics, 2021, 10(2):215-228.
[7] Cazan C. Seamless Next-generation Wi-Fi Security Through Multivendor End-to-end WPA3 Verification[R].Intel White Paper Networking Security, 2021.
[8] WiFI Alliance. WPA3 Specification Version 3.0[EB/OL]. 2020[2022]. https://www.wi-fi.org/download.php?file=/sites/default/files/private/WPA3_Specification_v3.0.pdf.
[9] WiFI Alliance. WPA3 Specification Version 2.0[EB/OL]. 2020[2022]. https://www.wi-fi.org/download.php?file=/sites/default/files/private/WPA3_Specification_v2.0.pdf.
[10] WiFI Alliance. WPA3 Specification Version 1.0[EB/OL]. 2020[2022]. https://www.wi-fi.org/download.php?file=/sites/default/files/private/WPA3_Specification_v1.0.pdf.
[11] Wikipedia. Galois/Counter Mode[EB/OL]. 2021[2022]. https://en.wikipedia.org/wiki/Galois/Counter_Mode.
[12] 知乎-山神. 秘钥重装攻击(KRACK)- 值得引起注意,不必过分恐慌[EB/OL]. 2017[2022]. https://zhuanlan.zhihu.com/p/30240966.
[13] Mathy Vanhoefof of imec-DistriNet. Key Reinstallation Attacks Breaking WPA2 by forcing nonce reuse[EB/OL]. 2017[2022]. https://www.krackattacks.com/.
[14] 博客园-然然粑粑. 系列文章(三):WAPI为无线局域网WLAN安全而生——By Me[EB/OL]. 2017[2022]. https://www.cnblogs.com/raulyin/p/6766949.html.
[15] 博客园-贪知猪. WLAN安全策略-WEP、WPA/WPA2、WPA3[EB/OL]. 2021[2022]. https://www.cnblogs.com/surt/p/15601654.html#:~:text=%E5%9C%A8%E5%A4%A7%E5%9E%8B%E4%BC%81%E4%B8%9A%E7%BD%91%E7%BB%9C%E4%B8%AD%EF%BC%8C%E9%80%9A%E5%B8%B8%E9%87%87%E7%94%A8WPA%2FWPA2%E4%BC%81%E4%B8%9A%E7%89%88%E7%9A%84%E8%AE%A4%E8%AF%81%E6%96%B9%E5%BC%8F%E3%80%82%20WPA%2FWPA2%E6%94%AF%E6%8C%81%E5%9F%BA%E4%BA%8EEAP-TLS%E5%92%8CEAP-PEAP%E7%9A%84802.1X%E8%AE%A4%E8%AF%81%E6%96%B9%E5%BC%8F%EF%BC%8C%E5%85%B6%E8%AE%A4%E8%AF%81%E6%B5%81%E7%A8%8B%E5%A6%82%20%E5%9B%BE1%20%E5%92%8C,%E5%9B%BE2%20%E6%89%80%E7%A4%BA%E3%80%82%20%E5%9B%BE1%20%E5%9F%BA%E4%BA%8EEAP%E2%80%93TLS%E7%9A%84802.1X%E8%AE%A4%E8%AF%81%E6%B5%81%E7%A8%8B%E5%9B%BE.
[16] 知乎-零月蚀. 802.11 无线网络加密介绍[EB/OL]. 2020[2022]. https://zhuanlan.zhihu.com/p/51695002.
[17] WiFi Alliance. Wi-Fi Easy Connect™ Specification Version 2.0[EB/OL]. 2020[2022]. https://www.wi-fi.org/file/wi-fi-easy-connect-specification.
[18] IRTF. Dragonfly Key Exchange[EB/OL]. 2015[2022]. https://datatracker.ietf.org/doc/html/rfc7664#section-1.1.
[19] IETF. Opportunistic Wireless Encryption[EB/OL]. 2017[2022]. http://rfc.ac.cn/html/rfc8110.html.
[20] Kemparaj Praneeth. WPA3 Authentication – PART 1[EB/OL]. 2021[2022]. https://praneethwifi.in/2021/02/04/wpa3-authentication-part-1/.
[21] Kemparaj Praneeth. 4-Way Hand Shake Keys Generation & MIC Verification for WPA3/OWE/WPA2-PMF[EB/OL]. 2020[2022]. https://praneethwifi.in/2020/03/23/4-way-hand-shake-mic-verification-for-wpa3-owe-wpa2-pmf/.
[22] William Stallings著, 陈晶, 唐明等译. 密码编码学与网络安全[M]. 第八版. 北京:电子工业出版社, 2021.
802.11协议组由IEEE为无线局域网络指定,虽然wifi使用了802.11的媒体访问控制层和物理层,但二者并不完全一致,以下为802.11系列协议的发展历程:
802.11(1997年)
802.11a(1999年)
802.11b(1999年)
802.11c
802.11d
802.11e
802.11f
802.11g(2003年)
IEEE 802.11g2003年7月,通过了第三种调变标准。其载波的频率为2.4GHz,原始传送速度为54Mbit/s,净传输速度约为24.7Mbit/s
802.11h (2004年)
802.11i(2004年)
802.11j(2004年)
802.11k(2008年)
802.11l
802.11m
802.11n(2009年9月)
802.11o
802.11p(2010年)
802.11q
802.11r(2008年)
802.11s
802.11t
802.11u
802.11v
802.11w(2009年)
802.11y(2008年)
802.11ac
802.11ad
802.11ad工作在57-66 GHz频段。802.11ad草案显示其将支持近7GBit的带宽
由于载波特性的限制,这一标准将主要满足个域网(PAN)对于超高带宽的需求
802.11ae
802.11b+
下表展示了几个重要的Wi-Fi版本
WiFi 版本 | WiFi 标准 | 发布时间 | 最高速率 | 工作频段 |
---|---|---|---|---|
WiFi 7 | IEEE 802.11be | 2022年 | 30Gbits | 2.4GHz,5GHz,6GHz |
WiFi 6 | IEEE 802.11ax | 2019 年 | 11Gbps | 2.4GHz 或 5GHz |
WiFi 5 | IEEE 802.11ac | 2014 年 | 1Gbps | 5GHz |
WiFi 4 | IEEE 802.11n | 2009 年 | 600Mbps | 2.4GhHz 或 5GHz |
WiFi 3 | IEEE 802.11g | 2003 年 | 54Mbps | 2.4GHz |
WiFi 2 | IEEE 802.11b | 1999 年 | 11Mbps | 2.4GHz |
WiFi 1 | IEEE 802.11a | 1999 年 | 54Mbps | 5GHz |
WiFi 0 | IEEE 802.11 | 1997 年 | 2Mbps | 2.4GHz |
不同标准的802.11帧的MAC头会有一些区别
由上可知,802.11的帧最长只有2346字节。802.11还定义了三种不同类型的帧格式:
控制帧
负责客户端和接入点的数据交换
数据帧
携带传输的数据
管理帧
管理帧负责监督,主要用来加入或退出无线网络,以及处理基站之间里按额吉的转移事宜,且总是MAC层处理,不会被传递给上层。
只要无线ap支持802.11n及以上,那么发出的管理帧都会带有高速吞吐(HT(High-Throughtput))的相关字段
这三种不同类型的帧格式的核心之处就在于MAC头前2个字节的控制字段:
2字节的帧控制字段
2位协议版本,由于目前802.11协议簇只有一个版本,所以一直为00
2位帧类型,00:管理帧,01:控制帧,10:数据帧
4位子类型,三种类型的帧具有各自的子类型
管理帧子类型
0000:Association request(关联请求帧)
认证成功后,STA就会进入关联阶段,这个交互的目的是为了加入这个BSS并获取一个AID。通过关联请求帧携带的信息,是AP了解STA的相关能力信息,这样AP就可以决定如何与该STA进行通信
0001:Association response (关联请求回复帧)
当AP收到关联请求帧,它会检查每一个802.11参数并与自己支持的802.11参数进行匹配,如果出现不匹配的情况,AP会看当前的差异是否属于blocking factor。如果是的话,AP就会拒绝关联,否则的话,AP就会标记这个差异,并在关联请求回复帧中携带自己的802.11参数。
AP会返回一个状态码,0表示关联成功,并为STA分配一个AID(1~2007),
0010:Reassociation request (再关联请求帧)
该帧只能由STA 发出。 使用场景主要是: 当STA已经关联到一个ESS(扩展服务集)想关联到同一个ESS下的另一个AP上。 也可用于: 当STA短暂离开当前关联的AP 后,重新关联此AP。 也可用于:当Authenticator timer过期后,STA 进行认证和重新关联。已经关联上某个AP的STA也可以通过此帧重新协商一 些参数。
0011:Reassociation response (再关联请求回复帧)
AP使用此帧回应STA发出的在关联请求。其格式与Association Response类似。
0100:Probe request (探测请求帧)
主要用于主动扫描,查找AP信息。STA也可以利用Probe Request来发现某个网络特定的信息。 为了支持这个 目的,Probe Request可以包含一个可选的 Request Information信息, 它们可以 请求一个或多个额外的参数。另外, Probe Request也可以携带一些厂商自定 义的IE信息。
0101:Probe response (探测请求回复帧)
主要用于主动扫描,AP回复特定的查找AP信息请求。其帧内容等同于beacon frame, 只是不包含TIM字段和QoS字段。如果Probe request中包含Request Information 信息,则此帧应包含相应的Request Information 信息。
1000:Beacon(信标帧)
AP以某个固定的时间间隔发送Beacon帧,并通知下一个Beacon帧发送的时间。 如果当前媒介忙碌,会推迟当前Beacon帧的发送,但是不会影响下一个 Beacon帧的发送,下一个Beacon帧仍然会按照预定的时间进行发送。
beacon帧包含所有AP的属性,以备STA在关联之前查验自身是否符合其要求。
1001:Announcement traffic indication message(广播流量指示消息帧)
此帧只适用于IBSS网络(Independent Basic Service Set),IBSS又叫AD-HOC,专用于点对点连接,一群计算机设置相同的BSS名称,这个BSS名称即BSSID
1010:Disassociation(解关联帧)
该帧可能是单播帧,也可能是多播帧。处于Disassociated状态的STA仍然是处于Authenticated状态,它们可以直接进行重新关联。
1011:Authentication(认证帧)
在所有网络中,STA想要加入某一特定的网络之前,必须事先完成认证。不同于关联请求和回复,认证过程只使用一种格式的认证帧。
1100:Deauthentication(解认证帧)
当双方通信完成,会发送此帧结束会话。 该帧的格式与Disassociation类似
1101:Action(行为帧)
此帧仅用于特殊的网络行为。
1110:Action no ack(不需要ack的行为帧)
控制帧子类型
0000-0110:Reserved(保留字段,未被使用)
0111: Control wrapper
802.11n引入,用于携带其他的控制帧和一些HT管理帧
1000:Block ack request
802.11e 引入了BA机制,将多个确认帧聚合到一个确认帧中,改进了信道传 输效率。
1001:Block ack
BAR(Block ack request)帧的回复帧,是对多个单播帧的聚合回复。
1010: PS-Poll
用于节能模式
1011:RTS(请求发送)
1100:CTS(允许发送)
RTS/CTS是对虚拟载波机制的一个增强。STA在发送数据前,会先向对方发出 一个RTS请求,周围设备侦听到RTS的STA会重新调整它们的NAV(网络分配矢量,访问时间限制有NAV所指定)的值。 接收方会回一个CTS,周围侦听到CTS的STA也会重新调整它们的NAV的值。这种机制有效地避免了相互都不能侦听到对方发送数据的STA之间的访问冲突。
1101:ACK(应答)
802.11速率传输是半双工模式,所以为了确认数据传输成功,每个单播数据 都要一个确认帧,它有14个字节长。
1110:CF-End(免竞争期间结束)
1111:CF-End(免竞争期间结束)+CF-Ack(免竞争期间回应)
数据帧子类型
To Ds,1位 ,总为0,表示无线链路向无线工作站发送的帧
From Ds,1位 ,总为0,表示无线工作站向无线链路发送的帧
More Frag(更多片段),1位 ,1代表有长帧被分段,最后一个长帧片段除外
Retry,1位 ,1代表要重传
Power Management(电源管理),1位
More Data(尚有数据),1位 ,只用于管理数据帧,在控制帧中必然为0
Protected Frame(受保护帧),1位,
Order(次序),1位
缩写 | 英文全称 | 中文全称 |
---|---|---|
WEP | Wired Equivalent Privacy | 有限等效加密 |
WPA | Wi-Fi Protected Access | 无线保护访问 |
WPS | Wi-Fi Protected Setup | Wi-Fi保护设置 |
DPP | Device Configuration Protocol | 设备配置协议 |
TKIP | Temporal Key Integrity Protocol | 临时密钥完整性协议 |
CCMP | Counter Mode with Cipher Block Chaining Message Authentication Code Protocol | 密码块链接消息认证码协议的计数器模式 |
EAP | Extensible Authentication Protocol | 可扩展身份验证协议 |
EAPOL | EAP Over Lan | 基于局域网的扩展认证协议 |
SAE | Simultaneous Authentication of Equals | 对等实体同步验证 |
OWE | Opportunistic Wireless Encryption | 机会性无线加密 |
AES | Advanced Encryption Standard | 高级加密标准 |
GCMP | Galois Counter Mode Protocol | 伽罗瓦计数器模式协议 |
PMF | Protected Management Frames | 受保护管理帧 |
CNSA | Commercial National Security Algorithm | 商业国家安全算法 |
WAI | WLAN Authentication Infrastructure | WLAN认证基础设施 |
WPI | WLAN Privacy Infrastructure | WLAN隐私基础设施 |
WAPI | WLAN Authentication and Privacy Infrastructure | 无线局域网鉴别和保密基础结构 |
RADIUS | Remote Authentication Dial In User Service | 远程认证拨入用户服务 |
OSA | Open System Authentication | 开放系统认证 |
SKA | Shared Key Authentication | 共享键认证 |
AKM | Authentication and Key Management | 认证和密钥管理 |
PSK | Pre-Shared Key | 预共享密钥 |
MSK | Master Session Key | 主会话密钥 |
PMK | Paired Master Key | 成对主密钥 |
PTK | Paired Temporary Key | 成对临时密钥 |
KCK | EAPOL-Key Confirmation Key | EAPOL密钥确认密钥 |
KEK | EAPOL-Key Encryption Key | EAPOL密钥加密秘钥(用于WPA四次握手) |
TK | Temporal Encryption Key | 临时密钥 |
GMK | Group Master Key | 组主密钥 |
GTK | Group Temporal Key | 组临时密钥 |
IGTK | IGTK Integrity GTK | 完整性GTK |
TMK | Temporal MIC Key | 临时MIC密钥 |
KDF | key derivation function | 密钥导出函数 |
HKDF | HMAC-based KDF | 基于HMAC的密钥导出函数 |
CBC | Cipher Block Chaining | 密码分组链接 |
CTR | Counter | 计数器 |
GCM | Galois/Counter Mode | 伽罗瓦/计数器模式 |
ECDH | Elliptic Curve Diffie-Hellman | 椭圆曲线迪菲-赫尔曼 |
ECDSA | Elliptical Curve Digital Signature Algorithm | 椭圆曲线数字签名算法 |
SHA | Secure Hash Algorithm | 安全哈希算法 |
ICV | Integrity check value | 完整性校验值 |
BIP | Broadcast/Multicast Integrity Protocol | 单播/多播完整性协议 |
PFS | Perfect forward secrecy | 完美向前保密 |
BK | Basic Key | 基本密钥 |
ECES | Elliptic Curve Encryption Scheme | 椭圆曲线加密方案 |
AKE | Authentication and Key Exchange | 认证和密钥交换 |
PAKE | PSK Authentication and Key Exchange | 预共享密钥认证和密钥交换 |
PTKs | Pair Transient Keys | 成对临时密钥 |
UEK | Unicast Encryption Key | 单播加密密钥 |
UCK | Unicast Integration Check Key | 单播完整性校验密钥 |
MAK | Message Authentication Key | 消息认证密钥 |
KEK | Key Encryption Key | 密钥加密密钥(用于WAPI中的组密钥通告) |
element-op(X, Y):将两个元素映射为另一个元素
e l e m e n t − o p ( X , Y ) = X + Y ( E C C ) e l e m e n t − o p ( X , Y ) = ( X ∗ Y ) m o d p ( F C C ) element-op(X, Y) = X + Y\quad\,(ECC)\\ element-op(X, Y) = (X * Y) mod\,p\,(FCC) element−op(X,Y)=X+Y(ECC)element−op(X,Y)=(X∗Y)modp(FCC)
scalar-op(x, Y):将一个标量和一个元素映射为另一个元素
s c a l a r − o p ( x , Y ) = x ∗ Y ( E C C ) s c a l a r − o p ( x , Y ) = Y x m o d p ( F C C ) scalar-op(x, Y) = x*Y\quad\,(ECC) \\ scalar-op(x, Y) = Y^x mod\,p\,(FCC) scalar−op(x,Y)=x∗Y(ECC)scalar−op(x,Y)=Yxmodp(FCC)
inverse(X):将一个元素映射为另一个元素
R + i n v e r s e ( R ) = O ( E C C ) ( R ∗ i n v e r s e ( R ) ) m o d p = 1 ( F C C ) R + inverse(R) = O\quad (ECC)\\ (R * inverse(R)) mod\,p = 1\,(FCC) R+inverse(R)=O(ECC)(R∗inverse(R))modp=1(FCC)
函数F:接受组中的一个元素并返回一个整数
x = F ( P ) , w h e r e P = ( x , y ) ( E C C ) x = F ( x ) ( F C C ) x = F(P), where\,P=(x,y)\quad(ECC)\\ x = F(x)\quad(FCC) x=F(P),whereP=(x,y)(ECC)x=F(x)(FCC)
函数H:将不定长的比特流转换为定长的比特流
{ 0 , 1 } ∗ − − > { 0 , 1 } x \{0,1\}^* --> \{0,1\}^x {0,1}∗−−>{0,1}x
SHA-x位数确定
w i t h r e g a r d t o E C C : S H A − 256 : w h e n l e n ( p ) < = 256 S H A − 384 : w h e n 256 < l e n ( p ) < = 384 S H A − 512 : w h e n 384 < l e n ( p ) w i t h r e g a r d t o F C C : S H A − 256 : w h e n l e n ( p ) < = 2048 S H A − 384 : w h e n 2048 < l e n ( p ) < = 3072 S H A − 512 : w h e n 3072 < l e n ( p ) with\,regard\,to\,ECC:\\ SHA-256: when len(p) <= 256\\ SHA-384: when 256 < len(p) <= 384\\ SHA-512: when 384 < len(p)\\\\ with\,regard\,to\,FCC:\\ SHA-256: when len(p) <= 2048\\ SHA-384: when 2048 < len(p) <= 3072\\ SHA-512: when 3072 < len(p) withregardtoECC:SHA−256:whenlen(p)<=256SHA−384:when256<len(p)<=384SHA−512:when384<len(p)withregardtoFCC:SHA−256:whenlen(p)<=2048SHA−384:when2048<len(p)<=3072SHA−512:when3072<len(p)
DH(x,Y):其实就是scalar-op(x, Y)运算。
truncation(input, index1, index2):从input的index1开始截取到index2,比特串的长度为index2-index1+1。
有关于’|‘和’||':
在代码中,'|‘代表拼接,’||'代表或
在图中或公式中,仅用’||'代表拼接
MODP(FCC)
ECP(ECC)
在开始密钥交换之前需要做以下准备:
挑选一个大整数q和2个椭圆参数a和b,q、a和b用于生成椭圆群Eq(a,b)。
在群Eq(a,b)中选择一个基点G=(x1,y1)和一个大整数n,其中n为满足下式的最小整数,只要小于n,那么nG的结果就是有用的。
n G = O ( O 为 无 穷 远 点 , 但 实 际 上 在 椭 圆 曲 线 上 为 原 点 ) nG=O(O为无穷远点,但实际上在椭圆曲线上为原点) nG=O(O为无穷远点,但实际上在椭圆曲线上为原点)
大整数q是特殊的。当椭圆曲线是定义在Zp上的素数曲线时,q为一个大素数,适用于椭圆曲线加密的Zp上的曲线形式如下:
y 2 = ( x 3 + a x + b ) y^2=(x^3+ax+b) y2=(x3+ax+b)
由于要找的nG就是椭圆曲线上的点,因此这个点必满足:
y 2 ≡ ( x 3 + a x + b ) m o d q y^2\equiv(x^3+ax+b)\,mod\,q y2≡(x3+ax+b)modq
当椭圆曲线是定义在GF(2m)(有限域)上的二元曲线时,q为满足q=2m的大整数,适用于椭圆曲线加密的有限域上的曲线形式如下:
y 2 + x y = x 3 + a x 2 + b y^2+xy=x^3+ax^2+b y2+xy=x3+ax2+b
由于要找的nG就是椭圆曲线上的点,因此这个点必满足:
y 2 + x y ≡ ( x 3 + a x 2 + b ) m o d q y^2\,+xy\equiv(x^3+ax^2+b)\,mod\,q y2+xy≡(x3+ax2+b)modq
假设通信方A和B要进行加密通信,Eq(a,b)和G为各通信方已知参数。此时A和B需要完成以下密钥交换:
A选择一个小于n的数来生成A的公钥PA=nAG并发送给B
B选择一个小于n的数来生成A的公钥PB=nBG并发送给A
A和B可以获取对方生成的公钥,然后生成相同的共享密钥K,满足下列式子
K = n A P B = n B P A K=n_AP_B=n_BP_A K=nAPB=nBPA
考虑以下方程(在椭圆曲线中下式绝非普通的乘法):
K = n P ( K , P ∈ E p ( a , b ) ) K=nP(K,P\in E_{p}(a,b)) K=nP(K,P∈Ep(a,b))
已知n和P容易计算K,但是已知K和P难以计算n,这就是椭圆曲线的离散对数问题,n和P之间具体是什么样的离散对数运算取决于采用哪一类的椭圆曲线进行DH密钥交换。
dk=PBKDF2(Key,Salt,Iterations,DKLen)
HKDF包含两个步骤:extract和expand
HKDF-extract:使用原始的密钥材料,派生出一个符合密码学强度的伪随机密钥
prk = HKDF-Extract(Key, PRKLen)
HKDF-expand:使用上一步骤提取出来的伪随机密钥,扩展出指定长度的密钥(同时保证随机性)。
dk=HKDF-expand(prk, DKLen)
此外,各种类型的KDF可能还会有一个label参数用来表明这个KDF是干嘛的。
PMK缓存最开始定义在WPA2中,但由于WPA2的认证过程消耗并不大,因此略显鸡肋,但用在WPA3却非常的合适。所谓PMK缓存是指客户端和接入点可以将PMK缓存一段时间,并绕过昂贵的认证,如果要做PMK缓存,那么在交换关联帧的时候应该包含PMKID。除了PMK这种支持快速漫游的方式以外,还有人提出使用一种令牌的方式。见参考文献[6]。
WPA3-Enterprise使用CNSA密码套件,下表展示相关的信息:
算法 | 功能 | 规范 | 参数 |
---|---|---|---|
AES | 分组密码用于信息保护 | FIPS Pub 197 | Use 256 bit keys |
ECDH | 用于密钥建立的非对称算法 | NIST SP 800- 56A | Use Curve P-384 |
ECDSA | 用于数字签名的非对称算法 | FIPS Pub 186-4 | Use Curve P-384 |
SHA | 用于计算信息的压缩表示 | FIPS Pub 180-4 | Use SHA-384 |
DH | 用于密钥建立的算法 | IETF RFC 3526 | Minimum 3072-bit modulus |
RSA | 用于密钥建立的算法 | NIST SP 800- 56B rev 1 | Minimum 3072-bit modulus |
RSA | 用于数字签名的非对称算法 | FIPS PUB 186-4 | Minimum 3072-bit modulus |
WPA | WPA2 | WPA2-PMF | WPA3 | OWE | |
---|---|---|---|---|---|
PMK 生成 | 基于SSID/Password | 基于SSID/Password | 基于SSID/Password | 基于 ECDH [X,Y] 曲线/Password | 基于ECDH/Pubiic Point [X] |
PMK等于PSK | 是 | 是 | 是 | 否 | 否 |
MIC 生成 | HMAC-SHA1-MIC | HMAC-SHA1-MIC | AES-CMAC | AES-CMAC/AES-GMAC | AES-CMAC/AES-GMAC |
所有客户端共享PMK | 是 | 是 | 是 | 否 | 否 |
认证 | PSK | PSK | PSK | Dragonfly | OWE+可选的Portal |
加密 | RC4-TKIP | AES-CCMP | AES-CCMP | AES-CCMP/AES-GCMP | AES-CCMP/AES-GCMP |
PMF 支持 | 默认不支持 | 默认不支持 | 从 802.11w开始支持 | 强制支持 | 强制支持 |
GTK/IGTK | Derives Only GTK | Derives Only GTK | Derives Both GTK/IGTK | Derives Both GTK/IGTK | Derives Both GTK/IGTK |
PTK 生成 | SHA-1 | SHA-1 | SHA-256-PRF | SHA-256-PRF | SHA-256-PRF |
PMK 生成算法 | SHA-1 | SHA-1 | SHA-1 | ECDH | ECDH |
下表包含了几个关键的名词:
字段 | 描述 |
---|---|
TSC | 由Sequence Counter产生,可防御重放攻击,TSC被分成6个字节并分布在TKIP头中 |
Nonce | 由PN、A2以及priority构造。A2是MPDU Address 2,这与WPA四次握手中的Nonce不是一个东西 |
AAD | AAD通过MAC头的相关字段进行构建,用于确保MAC头的数据完整性 |
PN | 由PN processing产生,每一个新发送的MPDU都会生成一个新的PN,如果是重传的MPDU就会使用旧的PN继续进行发送。如果在一系列的MPDU发送过程中,TK相同,那么不同MPDU必须使用不同的PN,也就是PN不会重复,这阻止了重放攻击,在CCMP MPDU中PN被分成6个字节并分布在CCMP头中 |
TKIP是一种用于IEEE 802.11无线网络标准中的替代性安全协议。TKIP和相关的WPA标准应用了三个新的安全功能以解决WEP的安全漏洞。
其实MIC只是基于WEP提供了一种较弱的攻击保护,它缺少一个检测和预防的机制,不能阻止字典式的暴力破解,而TKIP countermeasures 就是用来解决这样的问题。下面是TKIP countermeasures的基本原则:
Logging:MIC的校验失败意味着一次主动的攻击,应该记录到log里面,那么管理员就可以跟踪这个现象
60 Second Shutdown: 如果在60s内有两次MIC校验失败,那么STA和AP都要等待60s后再接收TKIP帧
New Temporal Keys:如果有发现攻击现象,应该更新PTK和GTK
TKIP加密是基于MSDU的加密,而CCMP加密是基于MPDU的加密,这样就避免了针对MSDU的攻击,解决了在MSDU加密中不能解决的问题。CCMP全名是带密码分组连接消息认证码的计数器模式协议,其加密需要提供临时密钥(TK)、随机数(Nonce)、附加认证数据(AAD)以及待加密的数据。
802.11中存在部分管理帧,例如disassociation帧、reassociatuin request帧和deauthentication,这些帧可以轻易构造并发给关联的STA使得连接断开,所以管理帧如果没有一定的安全性,则无线通信的安全仍然无法保障。所以802.11w引入了PMF来对这三种管理帧进行保护。
单播去关联帧、单播重关联请求帧和单播去认证帧都是一个通知,当接收到此类型帧时,关联的双方都无法拒绝,最终导致STA和AP的关联被终止。PMF对单播去关联和单播去认证帧都做了CCMP加密,保证帧的来源真真实有效。
当有恶意构造的单播去关联、重关联请求、去认证帧时,接收者的MIC校验不正确则丢弃此去关联、重关联、去认证帧,而且会触发SA Query过程用于PMF双方的安全确认。
引入重放检测机制,可以检测接收到的数据是否是未经授权的重传帧。
广播类型管理帧的使用了BIP来对帧进行完整性和重放保护。
WAPI最大的创新点在于采用了基于三元对等网络安全架构的实体鉴别技术,在网络架构上引入在线可信第三方(TTP),实现了用户、接入点、网络之间真正的双向身份鉴别,使其在防范非法接入、中间人攻击、防钓鱼、防假热点/伪基站等方面具有明显的对比优势,弥补了WLAN技术标准中的严重安全缺陷。这也是当年我国制定并发布WAPI国家标准的初衷。
考虑A、B和TTP三个实体,由于无线网络的特性,A、B两者往往只有一方可以直连TTP,而这样难以实现双向鉴别,因此提出了新的解决方案——双节棍模型,这种三元架构采用五步鉴别的模式,现在考虑AP、STA和AS三个实体,其中AP作为STA和AS之间的连接点:
由此实现了AP和STA的双向鉴别。
以下为RC4伪代码:
//初始化
for(i=0;i<256;i++)
S[i]=i
T[i]=K[i mod(keylen)]
//使用T生成S的初始置换
j=0
for(i=0;i<256;i++)
j=(j+S[i]+T[i])mod(256)
Swap(S[i], S[j])
//生成密钥流
i,j=0
while(true)
i=(i+1)mod(256)
j=(j+S[i])mod(256)
Swap(S[i], S[j])
t=(S[i]+S[j])mod(256)
k=S[t]
其中S为256字节(一般为256字节)的状态向量,T为256字节的临时向量,K为不定字节长度的密钥,keylen即密钥长度。Swap为一个交换数组元素位置的函数。k为生成的子密钥,在加密时与明文的下一个字节异或,解密时与密文的下一个字节异或。RC4输入密钥K,输出密钥流k。
表3:KRACK对四次握手、快速BSS过渡和组密钥分发的影响(每个单元格都显示可以在哪个方向上重放、解密或伪造帧)
重放 b | 解密a | 伪造 | |
---|---|---|---|
四次握手(成对密钥分发) | |||
TKIP | AP->client | client-> AP | client->APb |
CCMP | AP->client | client-> AP | |
GCMP | AP->client | client->AP | client<->APb |
快速BSS过渡 | |||
TKIP | AP->client | client-> AP | client->APb |
CCMP | AP->client | client-> AP | |
GCMP | AP->client | client->AP | client<->APb |
组密钥分发 | |||
any | AP->clientc |
a:有了这种能力,我们可以劫持与互联网端点的TCP连接,并向它们注入数据。
b:有了这种能力,我们就可以使用AP作为网关,向任何与该网络相连的设备注入数据包。
c:这表示我们可以在哪个方向重放单播和组地址的帧。对于组密钥握手,只能重放组地址帧。