無線 802.11b 的安全性一直是大問題——主要因為它幾乎不存在。其加密方法 WEP(Wired Equivalent Privacy) 的弱點,是整體不安全的重大成因。
常被忽略的細節:無線在第二層#
無線網路存在於 OSI 第二層。若無線網路沒被 VLAN 隔開或防火牆保護,一個關聯上存取點的攻擊者,就能用 ARP 重導把所有有線流量都導到無線上。加上「把無線存取點接到內部私有網路」的傾向,可能造成嚴重弱點。
當然,若開啟 WEP,只有持正確 WEP 金鑰的用戶端才能關聯上存取點。這帶出問題:WEP 到底多安全?
WEP 如何運作#
WEP 原設計為提供「與有線存取點等效」安全的加密方法,原始用 40 位元金鑰,後來 WEP2 增至 104 位元。加密是逐封包進行的,每個封包本質上是獨立的明文訊息 M:
- 算檢查碼:用 32 位元循環冗餘檢查函式 CRC32 算出 M 的檢查碼
CS = CRC32(M),附到訊息尾端,構成明文 P。 - 產生 keystream:用串流密碼 RC4,以**初始向量(IV,initialization vector)**加 WEP 金鑰作為種子 S。IV 是每封包 24 位元,前綴到 WEP 金鑰前。
- 加密:種子 S 餵入 RC4 產生 keystream,與明文 P 做 XOR 得密文 C。IV 前綴到密文,再封裝標頭送出。

圖 0x700-2:明文 P 由訊息 M 加上 32 位元 CRC 檢查碼 CS 構成

圖 0x700-3:種子值 S 由 24 位元 IV 與 40 或 104 位元 WEP 金鑰組成

圖 0x700-4:明文 P 與 RC4 產生的 keystream XOR 得密文 C,IV 前綴於前
接收方反轉流程:抽出 IV、與自己的 WEP 金鑰串接成種子 S、餵入 RC4 產生相同 keystream、與密文 XOR 還原 M+CS,再用 CRC32 重算檢查碼比對。相符則傳遞封包,否則丟棄。
RC4 串流密碼#
RC4 出奇簡單,由兩個演算法組成,都用一個 8×8 S-box(0 到 255 的 256 個數字打亂排列的陣列):
金鑰排程演算法(KSA) 依種子值對 S-box 做初始打亂:
j = 0;
for i = 0 to 255 {
j = (j + S[i] + K[i]) mod 256;
swap S[i] and S[j];
}(S 先填 0–255 序列值,K 用種子值重複填滿。)
偽亂數生成演算法(PRGA) 需要 keystream 資料時使用,兩計數器 i、j 初始為 0,每產生一位元組:
i = (i + 1) mod 256;
j = (j + S[i]) mod 256;
swap S[i] and S[j];
t = (S[i] + S[j]) mod 256;
Output S[t];RC4 簡單到能背下來、隨手實作,且正確使用時相當安全。問題在於 WEP 使用 RC4 的方式有幾個缺陷——這正是下一節 WEP 攻擊的著力點。