跳转至

第七章:安全加密机制

深入解析 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 安全加密机制:

  1. 安全演进:WEP → WPA → WPA2 → WPA3
  2. TKIP:每包密钥、Michael MIC
  3. CCMP:AES-128、CTR+CBC-MAC
  4. 4 次握手:PMK → PTK → GTK 派生
  5. WPA3:SAE、OWE、前向保密
  6. 802.1X:EAP 认证、RADIUS 服务器
  7. 硬件实现:AES 引擎、CCMP 加密器、TRNG

下一章将对比分析主流 WiFi 芯片架构。


上一章:06-芯片实现详解
下一章:08-主流芯片架构对比