第七章:安全加密机制
深入解析 WiFi 安全架构:WEP、WPA、WPA2、WPA3 演进、802.1X 认证、加密算法及硬件实现
7.1 安全演进概述
7.1.1 WiFi 安全发展历程
| ┌─────────────────────────────────────────────────────────┐
│ WiFi 安全演进时间线 │
├─────────────────────────────────────────────────────────┤
│ │
│ 1997: WEP (Wired Equivalent Privacy) │
│ ├─ 802.11 原始标准 │
│ ├─ RC4 流密码 │
│ ├─ 静态密钥 │
│ └─ 严重漏洞,已废弃 │
│ │
│ 2003: WPA (WiFi Protected Access) │
│ ├─ 802.11i 草案 │
│ ├─ TKIP (临时密钥完整性协议) │
│ ├─ 每包密钥 │
│ └─ 过渡方案,已不推荐 │
│ │
│ 2004: WPA2 (802.11i 正式发布) │
│ ├─ CCMP (AES-128) │
│ ├─ 802.1X 认证 │
│ ├─ 4 次握手 │
│ └─ 长期主流标准 │
│ │
│ 2018: WPA3 (802.11-2020) │
│ ├─ SAE (对等实体同时认证) │
│ ├─ 192 位安全套件 │
│ ├─ OWE (增强开放) │
│ ├─ 前向保密 │
│ └─ 新设备强制要求 │
│ │
└─────────────────────────────────────────────────────────┘
|
7.1.2 安全特性对比
| ┌─────────────────────────────────────────────────────────┐
│ WiFi 安全特性对比 │
├──────────┬─────────┬─────────┬─────────┬─────────┬──────┤
│ 特性 │ WEP │ WPA │ WPA2 │ WPA3 │ 说明 │
├──────────┼─────────┼─────────┼─────────┼─────────┼──────┤
│ 加密算法 │ RC4 │ RC4 │ AES │ AES │ │
│ 密钥长度 │ 40/104 │ 128 │ 128 │ 128/192│ bit │
│ 完整性 │ CRC-32 │ MIC │ CBC-MAC│ GMAC │ │
│ 密钥管理 │ 静态 │ 动态 │ 动态 │ 动态 │ │
│ 认证方式 │ 开放 │ PSK/802│ PSK/802 │ SAE/802 │ │
│ 前向保密 │ 否 │ 否 │ 否 │ 是 │ │
│ 安全性 │ 已破解 │ 较弱 │ 强 │ 很强 │ │
└──────────┴─────────┴─────────┴─────────┴─────────┴──────┘
|
7.2 WEP 安全 (历史)
7.2.1 WEP 加密原理
| ┌─────────────────────────────────────────────────────────┐
│ WEP 加密流程 │
├─────────────────────────────────────────────────────────┤
│ │
│ 加密: │
│ ┌─────────────────────────────────────────────────┐ │
│ │ 明文数据 + ICV (CRC-32) │ │
│ │ │ │ │
│ │ ▼ │ │
│ │ ⊕ RC4 密钥流 │ │
│ │ │ │ │
│ │ ▼ │ │
│ │ 密文数据 + ICV │ │
│ │ │ │ │
│ │ ▼ │ │
│ │ + IV (24 bit) │ │
│ │ │ │ │
│ │ ▼ │ │
│ │ 发送帧 │ │
│ └─────────────────────────────────────────────────┘ │
│ │
│ RC4 密钥流生成: │
│ ┌─────────────────────────────────────────────────┐ │
│ │ 密钥 = IV (24 bit) + 共享密钥 (40/104 bit) │ │
│ │ │ │ │
│ │ ▼ │ │
│ │ RC4 密钥调度算法 (KSA) │ │
│ │ │ │ │
│ │ ▼ │ │
│ │ 伪随机生成算法 (PRGA) │ │
│ │ │ │ │
│ │ ▼ │ │
│ │ 密钥流输出 │ │
│ └─────────────────────────────────────────────────┘ │
│ │
│ WEP 漏洞: │
│ ├─ IV 太短 (24 bit),约 1600 万种可能 │
│ ├─ IV 重用导致密钥流重用 │
│ ├─ RC4 弱密钥 │
│ ├─ ICV (CRC-32) 可被篡改 │
│ └─ 可在几分钟内被破解 │
│ │
└─────────────────────────────────────────────────────────┘
|
7.3 WPA/WPA2 安全
7.3.1 TKIP (临时密钥完整性协议)
| ┌─────────────────────────────────────────────────────────┐
│ TKIP 加密 (WPA) │
├─────────────────────────────────────────────────────────┤
│ │
│ TKIP 改进: │
│ ├─ 每包密钥 (Per-Packet Key) │
│ ├─ 密钥混合函数 (避免弱密钥) │
│ ├─ Michael MIC (消息完整性校验) │
│ └─ 序列计数器 (防重放) │
│ │
│ 密钥层次结构: │
│ ┌─────────────────────────────────────────────────┐ │
│ │ PMK (Pairwise Master Key, 256 bit) │ │
│ │ │ │ │
│ │ ▼ 4 次握手 │ │
│ │ PTK (Pairwise Transient Key, 512 bit) │ │
│ │ │ │ │
│ │ ├─ KCK (128 bit) - 密钥确认密钥 │ │
│ │ ├─ KEK (128 bit) - 密钥加密密钥 │ │
│ │ └─ TK (128 bit) - 临时密钥 (用于加密) │ │
│ └─────────────────────────────────────────────────┘ │
│ │
│ 每包密钥生成: │
│ ┌─────────────────────────────────────────────────┐ │
│ │ Phase 1: TK + TA + PN[47:32] → Phase1 Key │ │
│ │ │ │ │
│ │ ▼ │ │
│ │ Phase 2: Phase1 Key + PN[31:0] → Per-Packet Key│ │
│ │ │ │ │
│ │ ▼ │ │
│ │ RC4 密钥流生成 │ │
│ └─────────────────────────────────────────────────┘ │
│ │
│ PN (Packet Number): 48 bit 序列计数器 │
│ TA (Transmitter Address): 发送方 MAC 地址 │
│ │
└─────────────────────────────────────────────────────────┘
|
7.3.2 CCMP (AES-128 加密)
| ┌─────────────────────────────────────────────────────────┐
│ CCMP 加密 (WPA2) │
├─────────────────────────────────────────────────────────┤
│ │
│ CCMP = CTR 模式加密 + CBC-MAC 认证 │
│ │
│ 加密流程: │
│ ┌─────────────────────────────────────────────────┐ │
│ │ 输入: │ │
│ │ ├─ 明文数据 (MPDU) │ │
│ │ ├─ 临时密钥 TK (128 bit) │ │
│ │ ├─ 发送方地址 A2 │ │
│ │ └─ PN (48 bit 包号) │ │
│ │ │ │
│ │ 步骤 1: 构造 Nonce (13 bytes) │ │
│ │ ┌────────┬────────┬────────┬────────┐ │ │
│ │ │Priority│ A2 │ PN │ 0 │ │ │
│ │ │ 1 byte │6 bytes │6 bytes │1 byte │ │ │
│ │ └────────┴────────┴────────┴────────┘ │ │
│ │ │ │
│ │ 步骤 2: CBC-MAC 计算 (认证) │ │
│ │ ├─ 构造 B0 块 (标志 + 长度 + Nonce) │ │
│ │ ├─ 添加附加数据 (MAC 头) │ │
│ │ ├─ 添加明文数据 │ │
│ │ └─ AES-CBC 加密,取最后 128 bit 作为 MIC │ │
│ │ │ │
│ │ 步骤 3: CTR 模式加密 (机密性) │ │
│ │ ├─ Counter 0: 加密 MIC │ │
│ │ ├─ Counter 1,2,...: 加密明文数据 │ │
│ │ └─ 输出:密文 + 加密的 MIC │ │
│ └─────────────────────────────────────────────────┘ │
│ │
│ CCMP 帧格式: │
│ ┌────────┬────────┬────────┬────────┬────────┐ │
│ │ MAC 头 │ CCMP 头 │ 密文 │ MIC │ FCS │ │
│ │ │ (8 byte)│ │(8 byte) │ │ │
│ └────────┴────────┴────────┴────────┴────────┘ │
│ │
└─────────────────────────────────────────────────────────┘
|
7.3.3 4 次握手
| ┌─────────────────────────────────────────────────────────┐
│ WPA2 4 次握手流程 │
├─────────────────────────────────────────────────────────┤
│ │
│ 前提:STA 和 AP 已共享 PMK (来自 PSK 或 802.1X) │
│ │
│ AP (Authenticator) STA (Supplicant) │
│ │ │ │
│ │─── Message 1 ───────────────► │
│ │ ANonce (随机数) │ │
│ │ │ │
│ │ 计算 PTK: │
│ │ PTK = PRF(PMK, "Pairwise key expansion",│
│ │ Min(AA,SPA) || Max(AA,SPA) || │
│ │ Min(ANonce,SNonce) || Max(ANonce,SNonce))│
│ │ │ │
│ │◄── Message 2 ──────────────── │
│ │ SNonce + MIC (用 KCK 计算) │ │
│ │ │ │
│ │ 计算 PTK (相同) │ │
│ │ 安装 PTK │ │
│ │ 安装 GTK │ │
│ │ │ │
│ │─── Message 3 ───────────────► │
│ │ GTK + MIC + RSN IE │ │
│ │ │ │
│ │ │ 安装 PTK │
│ │ │ 安装 GTK │
│ │ │ │
│ │◄── Message 4 ──────────────── │
│ │ MIC (确认) │ │
│ │ │ │
│ │ 4 次握手完成,开始加密通信 │ │
│ │
│ 密钥层次: │
│ PMK (256 bit) → PTK (512 bit) → TK (128 bit) │
│ → GTK (组临时密钥) │
│ │
└─────────────────────────────────────────────────────────┘
|
7.4 WPA3 安全
7.4.1 SAE (对等实体同时认证)
| ┌─────────────────────────────────────────────────────────┐
│ SAE 握手流程 (WPA3) │
├─────────────────────────────────────────────────────────┤
│ │
│ SAE = Simultaneous Authentication of Equals │
│ 基于 Dragonfly 密钥交换协议 │
│ │
│ AP (Peer 1) STA (Peer 2) │
│ │ │ │
│ │ 双方共享密码 (Password) │ │
│ │ │ │
│ │─── Commit ─────────────────►│ │
│ │ (scalar, Element) │ │
│ │ │ │
│ │◄── Commit ──────────────────│ │
│ │ (scalar, Element) │ │
│ │ │ │
│ │ 计算共享密钥: │ │
│ │ K = (scalar_2 × Element_1 + scalar_1 × Element_2)│
│ │ │ │
│ │─── Confirm ────────────────►│ │
│ │ (HMAC-SHA256) │ │
│ │ │ │
│ │◄── Confirm ─────────────────│ │
│ │ (HMAC-SHA256) │ │
│ │ │ │
│ │ 验证通过,生成 PMK │ │
│ │
│ SAE 优势: │
│ ├─ 抵抗离线字典攻击 │
│ ├─ 前向保密 (即使密码泄露,历史会话仍安全) │
│ └─ 对等认证 (无需区分 AP/STA) │
│ │
└─────────────────────────────────────────────────────────┘
|
7.4.2 OWE (增强开放)
| ┌─────────────────────────────────────────────────────────┐
│ OWE (Opportunistic Wireless Encryption) │
├─────────────────────────────────────────────────────────┤
│ │
│ 应用场景:开放网络 (无需密码) │
│ 传统开放网络:无加密,任何人可窃听 │
│ OWE: 自动建立加密连接 │
│ │
│ OWE 握手: │
│ ┌─────────────────────────────────────────────────┐ │
│ │ 1. 发现阶段 │ │
│ │ ├─ AP 广播:支持 OWE │ │
│ │ └─ STA 选择 OWE 网络 │ │
│ │ │ │
│ │ 2. 密钥交换 │ │
│ │ ├─ 椭圆曲线 Diffie-Hellman (ECDH) │ │
│ │ ├─ 双方生成公私钥对 │ │
│ │ └─ 交换公钥,计算共享密钥 │ │
│ │ │ │
│ │ 3. 密钥派生 │ │
│ │ └─ PMK = KDF(共享密钥,MAC 地址,...) │ │
│ │ │ │
│ │ 4. 4 次握手 │ │
│ │ └─ 同 WPA2,生成 PTK/GTK │ │
│ └─────────────────────────────────────────────────┘ │
│ │
│ 优势: │
│ ├─ 开放网络也加密 │
│ ├─ 防止被动窃听 │
│ └─ 无需用户输入密码 │
│ │
└─────────────────────────────────────────────────────────┘
|
7.5 802.1X 认证
7.5.1 802.1X 架构
| ┌─────────────────────────────────────────────────────────┐
│ 802.1X 认证架构 │
├─────────────────────────────────────────────────────────┤
│ │
│ 角色: │
│ ┌─────────────────────────────────────────────────┐ │
│ │ Supplicant (客户端) │ │
│ │ ├─ WiFi 设备 (手机、笔记本) │ │
│ │ └─ 运行 802.1X 客户端软件 │ │
│ ├─────────────────────────────────────────────────┤ │
│ │ Authenticator (认证器) │ │
│ │ ├─ WiFi AP / 交换机 │ │
│ │ └─ 控制物理端口访问 │ │
│ ├─────────────────────────────────────────────────┤ │
│ │ Authentication Server (认证服务器) │ │
│ │ ├─ RADIUS 服务器 │ │
│ │ └─ 验证用户凭证,返回认证结果 │ │
│ └─────────────────────────────────────────────────┘ │
│ │
│ 端口状态: │
│ ├─ Unauthorized: 只允许 802.1X 流量 │
│ └─ Authorized: 允许所有流量 │
│ │
└─────────────────────────────────────────────────────────┘
|
7.5.2 EAP 认证流程
| ┌─────────────────────────────────────────────────────────┐
│ EAP-TLS 认证流程 │
├─────────────────────────────────────────────────────────┤
│ │
│ STA AP RADIUS │
│ │ │ │ │
│ │── EAPOL-Start ─► │ │
│ │ │ │ │
│ │◄── EAP-Request/Identity ────────│ │
│ │ │ │ │
│ │── EAP-Response/Identity ───────►│ │
│ │ (用户 ID) │ │ │
│ │ │ │ │
│ │◄── EAP-Request/TLS ─────────────│ │
│ │ (Server Hello + 证书) │ │
│ │ │ │ │
│ │── EAP-Response/TLS ────────────►│ │
│ │ (Client Hello + 证书) │ │
│ │ │ │ │
│ │◄── EAP-Request/TLS ─────────────│ │
│ │ (验证客户端证书) │ │
│ │ │ │ │
│ │── EAP-Response/TLS ────────────►│ │
│ │ (验证服务器证书) │ │
│ │ │ │ │
│ │◄── EAP-Success ─────────────────│ │
│ │ (认证通过) │ │ │
│ │ │ │ │
│ │ │ 生成 MSK (Master Session Key) │
│ │◄─────────────────────────────────│ │
│ │ PMK = MSK[0:255] │ │
│ │ │ │ │
│ │ 开始 4 次握手 │ │
│ │
│ EAP 类型: │
│ ├─ EAP-TLS: 基于证书,最安全 │
│ ├─ EAP-TTLS: 隧道 TLS,支持旧认证方式 │
│ ├─ PEAP: 保护 EAP,类似 TTLS │
│ └─ EAP-SIM/AKA: 使用 SIM 卡认证 │
│ │
└─────────────────────────────────────────────────────────┘
|
7.6 加密硬件实现
7.6.1 AES 加密引擎
| // AES-128 加密核心 (用于 CCMP)
module aes_128_encrypt (
input wire clk,
input wire reset_n,
input wire [127:0] plaintext,
input wire [127:0] key,
output reg [127:0] ciphertext,
input wire start,
output reg done
);
// AES 状态寄存器 (4x4 字节矩阵)
reg [127:0] state;
// 轮数计数
reg [3:0] round_count;
// S 盒 (Substitution Box)
reg [7:0] sbox [0:255];
// (初始化略,标准 AES S 盒)
// 轮密钥
wire [127:0] round_key;
key_expansion u_key_exp (
.key(key),
.round(round_count),
.round_key(round_key)
);
// SubBytes
wire [127:0] sub_bytes_out;
sub_bytes u_sub (.state_in(state), .state_out(sub_bytes_out));
// ShiftRows
wire [127:0] shift_rows_out;
shift_rows u_shift (.state_in(sub_bytes_out), .state_out(shift_rows_out));
// MixColumns
wire [127:0] mix_columns_out;
mix_columns u_mix (
.state_in(shift_rows_out),
.state_out(mix_columns_out),
.last_round(round_count == 4'd10)
);
// 主状态机
always @(posedge clk or negedge reset_n) begin
if (!reset_n) begin
state <= 128'd0;
round_count <= 4'd0;
done <= 1'b0;
ciphertext <= 128'd0;
end else if (start) begin
state <= plaintext;
round_count <= 4'd0;
done <= 1'b0;
end else if (round_count < 4'd10) begin
state <= mix_columns_out ^ round_key;
round_count <= round_count + 1'b1;
end else if (round_count == 4'd10) begin
// 最后一轮无 MixColumns
ciphertext <= (sub_bytes_out ^ shift_rows_out) ^ round_key;
done <= 1'b1;
end
end
endmodule
|
7.6.2 CCMP 加密器
| // CCMP 加密器 (CTR + CBC-MAC)
module ccmp_encryptor (
input wire clk,
input wire reset_n,
// 输入
input wire [127:0] plaintext,
input wire [127:0] tk, // 临时密钥
input wire [47:0] pn, // 包号
input wire [47:0] a2, // 发送方地址
input wire [15:0] data_len,
// 输出
output reg [127:0] ciphertext,
output reg [63:0] mic,
// 控制
input wire start,
output reg done,
output reg busy
);
// 状态机
localparam STATE_IDLE = 3'd0;
localparam STATE_NONCE = 3'd1;
localparam STATE_CBC_MAC = 3'd2;
localparam STATE_CTR_ENC = 3'd3;
localparam STATE_DONE = 3'd4;
reg [2:0] state;
reg [127:0] nonce;
reg [127:0] cbc_mac;
// AES 引擎
wire aes_done;
wire [127:0] aes_out;
aes_128_encrypt u_aes (
.clk(clk),
.reset_n(reset_n),
.plaintext(aes_input),
.key(tk),
.ciphertext(aes_out),
.start(aes_start),
.done(aes_done)
);
// 主状态机
always @(posedge clk or negedge reset_n) begin
if (!reset_n) begin
state <= STATE_IDLE;
done <= 1'b0;
busy <= 1'b0;
end else if (start) begin
state <= STATE_NONCE;
busy <= 1'b1;
end else begin
case (state)
STATE_IDLE: ;
STATE_NONCE: begin
// 构造 Nonce (A2 + PN)
nonce <= {1'b0, a2, pn, 8'd0};
state <= STATE_CBC_MAC;
end
STATE_CBC_MAC: begin
// CBC-MAC 计算 MIC
// (详细实现略)
state <= STATE_CTR_ENC;
end
STATE_CTR_ENC: begin
// CTR 模式加密数据
// (详细实现略)
state <= STATE_DONE;
end
STATE_DONE: begin
done <= 1'b1;
busy <= 1'b0;
state <= STATE_IDLE;
end
endcase
end
end
endmodule
|
7.6.3 真随机数发生器
| // 真随机数发生器 (用于 Nonce 生成)
module true_random_generator (
input wire clk,
input wire reset_n,
output reg [127:0] random_out,
input wire generate,
output reg random_valid
);
// 基于环形振荡器的 TRNG
wire osc_out [0:7];
reg [31:0] entropy_pool;
// 8 个不同频率的环形振荡器
genvar i;
generate
for (i = 0; i < 8; i = i + 1) begin
ring_oscillator u_osc (
.enable(generate),
.out(osc_out[i]),
.delay(i * 2)
);
end
endgenerate
// 熵收集
always @(posedge clk or negedge reset_n) begin
if (!reset_n) begin
entropy_pool <= 32'd0;
random_valid <= 1'b0;
end else if (generate) begin
// 采样振荡器输出
entropy_pool <= {entropy_pool[30:0], ^osc_out};
// 收集 128 bit 后输出
if (random_valid) begin
random_out <= {entropy_pool, /* 更多采样 */};
random_valid <= 1'b1;
end
end
end
endmodule
|
7.7 安全最佳实践
| ┌─────────────────────────────────────────────────────────┐
│ WiFi 安全最佳实践 │
├─────────────────────────────────────────────────────────┤
│ │
│ 家庭网络: │
│ ├─ 使用 WPA3-Personal (如设备支持) │
│ ├─ 或使用 WPA2-Personal + 强密码 │
│ ├─ 密码长度 ≥ 12 字符,包含大小写 + 数字 + 符号 │
│ └─ 定期更换密码 │
│ │
│ 企业网络: │
│ ├─ 使用 WPA3-Enterprise │
│ ├─ 部署 802.1X + EAP-TLS (证书认证) │
│ ├─ RADIUS 服务器冗余 │
│ └─ 定期审计和监控 │
│ │
│ 公共场所: │
│ ├─ 使用 OWE (增强开放) │
│ ├─ 隔离客户端 (Client Isolation) │
│ ├─ 认证门户 (Captive Portal) │
│ └─ 流量监控和日志 │
│ │
│ 避免的做法: │
│ ├─ ✗ WEP (已完全破解) │
│ ├─ ✗ WPA-TKIP (已不推荐) │
│ ├─ ✗ WPS (存在漏洞) │
│ └─ ✗ 开放网络 (无加密) │
│ │
└─────────────────────────────────────────────────────────┘
|
7.8 本章小结
本章深入讲解了 WiFi 安全加密机制:
- 安全演进:WEP → WPA → WPA2 → WPA3
- TKIP:每包密钥、Michael MIC
- CCMP:AES-128、CTR+CBC-MAC
- 4 次握手:PMK → PTK → GTK 派生
- WPA3:SAE、OWE、前向保密
- 802.1X:EAP 认证、RADIUS 服务器
- 硬件实现:AES 引擎、CCMP 加密器、TRNG
下一章将对比分析主流 WiFi 芯片架构。
上一章:06-芯片实现详解
下一章:08-主流芯片架构对比