选译自 Understanding Network Hacks 8.8~8.10
【博主注】此文比较小白,想了解更多请查阅IEEE Std 802.11。我这里有802.11i-2004
WEP
WEP用来加密的key要么是64要么是128 bit,但实际上只有40或104 bit。因为前24 bit是IV
(initialization vector),用于保证加密每个帧的key
不总是相同。
但是,WEP标准没有声明如何生成IV
,所以有些实现里递增生成IV
。
并且,WEP也没有声明多长时间变更key
,所以有些实现中只用一个key
加密数据帧,有些间隔一段时间更新key
。
Weak IVs是指那些会泄露明文的一个或多个bit的IV
。
RC4 WEP加密使用了xor
,同为0,异为1。所以有一个极端的例子,如果IV
全由0组成,则:
WEP支持多个key
,但只有一个会被真正使用。所以每个客户端必须知道哪个key
被使用,所以每个帧里都有keyid
。
WEP的数据完整性校验算法并不安全,仅仅使用了CRC校验,然后用RC4加密了。一旦key被知晓,CRC校验并不能保护任何东西(此时attacker修改原文后,再重写ICV
即可)。
只要WiFi使用了WEP加密,控制帧头部的WEP-Bit(也叫Protected-Frame bit)就会被置1。
WPA
WPA仍然使用RC4加密。
WPA利用TKIP(Temporal Key Integrity Protocol)协议规避WEP最大的弱点。TKIP协议使用48 bit的IV
,其中糅合了sender的mac地址。
除此以外,TKIP强制每个帧使用新key。
甚至,TKIP实现了一个加密的MIC(Message Integrity Check)而非使用CRC校验,因此就算key被知晓,帧也无法被毫无察觉地篡改。MIC还可防止源地址被篡改。
并且,TKIP头部的序列号逐帧增加,这可以防止重放攻击。
最后,WPA还扩展了WiFi连接机制。在成功的association之后,还要通过EAP(Extensible Authentication Protocol)或EAPOL-Protocol(EAP over LAN)进行authentication。
EAPOL WPA提供两个authentication方式,一种是PSK(Pre-Shared-Key),只需要输入密码;另一种是Enterprise,此处不表。
一次WPA-Handshake需要4个帧。
首先,AP生成一个256 bit的随机数,此数唤作Nonce
,将其发给client;
然后,client生成一个Nonce
,用其、PMK
(Pairwise-Master-Key)(此数由PSK得到)还有client和AP的mac地址计算出PTK
(Pairwise-Transient-Key)。PTK用于加密和签名单播流量。client将Nonce和MIC发给AP;
接着,AP检查MIC,若检查通过则生成PTK和GTK
(Group-Transient-Key)(用于加密广播流量,广播流量没有签名),接着发送用PTK加密和签名的GTK给client;
最后,client发送一个加密和签名的ACK帧给AP。
WPA2
WPA2使用了AES(Advanced Encryption Standard)加密,key长度为128或192或256 bit,
还使用了CCMP
(Counter Mode with CBC-MAC)协议。
authentication仍基于EAPOL,两种方式,和WPA一样。