第01课:密码学硬件概述

阶段一对称密码基础 — 从这节课开始,我们将踏上一段从硅片到安全的旅程。密码学硬件是信息安全的第一道物理防线。

1. 为什么需要密码学硬件?

软件实现的密码算法面临一个根本问题:速度与安全的矛盾。通用处理器为灵活性设计,而非为密码运算优化。硬件实现则可以在以下方面提供独特优势:

2. 密码学硬件的实现平台

2.1 FPGA(现场可编程门阵列)

FPGA 是密码学硬件开发的首选平台。它提供可编程的逻辑块(CLB)和可编程互连,允许在不制造 ASIC 的情况下验证设计。

特性FPGAASIC
开发成本低($0 开发费)极高($1M+ NRE)
上市时间数周6-18 个月
性能中高极高
能效中等极高
灵活性可重新编程固定功能
适用场景原型验证、小批量大批量生产

2.2 ASIC(专用集成电路)

ASIC 为特定密码算法定制硅片,提供最高性能和最低功耗。但 NRE(Non-Recurring Engineering)成本极高,通常仅在大批量部署时经济可行。现代 ASIC 密码引擎常集成在 SoC 的安全子系统中。

3. Verilog HDL 基础

Verilog 是本课程使用的硬件描述语言。与软件编程语言不同,Verilog 描述的是并行执行的硬件结构

3.1 Verilog 核心概念

3.2 第一个密码学模块:XOR 门

XOR(异或)运算是密码学的基石。一次一密(One-Time Pad)的安全性就建立在 XOR 运算的可逆性上:

C = P ⊕ K   ⟹   P = C ⊕ K

其中 P 是明文,K 是密钥,C 是密文。XOR 的自逆性使得加密和解密使用完全相同的操作。

✅Verilator验证通过
// xor_cipher.v - 最简单的密码学硬件:XOR 加密/解密
module xor_cipher #(
    parameter WIDTH = 8  // 数据宽度,可配置
)(
    input  wire [WIDTH-1:0] data_in,   // 输入数据(明文或密文)
    input  wire [WIDTH-1:0] key,       // 密钥
    output wire [WIDTH-1:0] data_out   // 输出数据(密文或明文)
);

    // XOR 加密/解密:同一操作即可加密或解密
    assign data_out = data_in ^ key;

endmodule

3.3 XOR 模块测试台

// xor_cipher_tb.v - XOR 加密模块测试台
module xor_cipher_tb;

    parameter WIDTH = 8;
    reg  [WIDTH-1:0] data_in;
    reg  [WIDTH-1:0] key;
    wire [WIDTH-1:0] data_out;

    // 实例化被测模块
    xor_cipher #(.WIDTH(WIDTH)) uut (
        .data_in(data_in),
        .key(key),
        .data_out(data_out)
    );

    initial begin
        $display("=== XOR Cipher Testbench ===");
        $display("data_in  key    data_out");

        // 测试1:全零输入
        data_in = 8'h00; key = 8'h00; #10;
        $display("0x%02h     0x%02h    0x%02h", data_in, key, data_out);

        // 测试2:基本加密
        data_in = 8'hA5; key = 8'h3C; #10;
        $display("0x%02h     0x%02h    0x%02h", data_in, key, data_out);

        // 测试3:解密验证(相同操作应恢复明文)
        data_in = data_out; key = 8'h3C; #10;
        $display("0x%02h     0x%02h    0x%02h  (应为 0xA5)", data_in, key, data_out);

        // 测试4:全1密钥
        data_in = 8'hFF; key = 8'hFF; #10;
        $display("0x%02h     0x%02h    0x%02h", data_in, key, data_out);

        // 测试5:交替位模式
        data_in = 8'hAA; key = 8'h55; #10;
        $display("0x%02h     0x%02h    0x%02h", data_in, key, data_out);

        $display("=== All tests completed ===");
        $finish;
    end

endmodule

4. 组合逻辑与时序逻辑

密码学硬件设计必须深刻理解两种逻辑范式的区别:

组合逻辑(Combinational Logic)

输出仅取决于当前输入,无状态记忆。XOR、S-Box 查找、移位等都是组合逻辑。

// 组合逻辑示例:8位选择器
always @(*) begin
    case (sel)
        2'b00: mux_out = data_a;
        2'b01: mux_out = data_b;
        2'b10: mux_out = data_c;
        2'b11: mux_out = data_d;
    endcase
end

时序逻辑(Sequential Logic)

输出取决于当前输入和之前的状态。寄存器、计数器、状态机都是时序逻辑。由时钟边沿触发。

// 时序逻辑示例:8位寄存器
always @(posedge clk or negedge rst_n) begin
    if (!rst_n)
        data_reg <= 8'h00;      // 异步复位
    else if (en)
        data_reg <= data_in;    // 时钟上升沿采样
end

5. 密码学硬件设计流程

从算法到硅片的完整流程:

  1. 算法分析:理解算法的数学原理和数据流
  2. 架构设计:确定流水线级数、数据通路、控制逻辑
  3. RTL 编码:用 Verilog 描述寄存器传输级设计
  4. 功能仿真:用测试向量验证功能正确性
  5. 综合:将 RTL 映射到目标工艺库
  6. 时序分析:确保满足时序约束
  7. 物理设计:布局布线,生成 GDSII
  8. 验证与测试:芯片制造后的功能测试

6. Verilator 仿真流程

本课程使用 Verilator 进行 Verilog 仿真验证。Verilator 是一个开源的 Verilog 仿真器,将 Verilog 编译为 C++ 代码后执行,速度远快于传统事件驱动仿真器。

💡 Verilator 验证流程:
# 语法检查
verilator --lint-only module.v

# 编译仿真
verilator -cc module.v -exe module_tb.cpp
make -C obj_dir -f Vmodule.mk
./obj_dir/Vmodule

7. 本课程的学习路线图

30 课分为 5 个阶段,由浅入深:

  1. 对称密码(1-6):AES 全流程,从 S-Box 到完整引擎
  2. 哈希与认证(7-12):SHA-256、HMAC、随机数生成器
  3. 非对称密码(13-18):模运算、RSA、ECC 硬件实现
  4. 侧信道防护(19-24):时序恒定、掩码、抗功耗分析
  5. 实战项目(25-30):AES-GCM、SHA-3、安全 SoC

1. 编译 xor_cipher.v 模块,使用 Verilator 的 --lint-only 选项检查语法是否正确。

2. 修改 XOR 模块,将 WIDTH 参数改为 32 位,验证加密解密仍然正确。

3. 设计一个 8 位 XOR 流密码模块:每个时钟周期读入一个字节明文和一个字节密钥流,输出密文字节。使用时序逻辑(时钟触发)实现。

4. 思考:如果 XOR 密钥流重复使用(两次加密使用相同密钥流),攻击者如何破解?写出数学推导。

🏆 成就解锁:初探硅密码

完成本课后,你已理解密码学硬件的基本概念、FPGA 与 ASIC 的区别、Verilog HDL 的核心语法,并实现了第一个密码学硬件模块——XOR 加密器。这是通往专业密码学硬件工程师的第一步!

获得徽章:🔑 SILICON_INITIATE

8. Verilog 仿真工具链

Icarus Verilog

开源 Verilog 仿真器,适合快速验证:

iverilog -o sim xor_cipher.v xor_cipher_tb.v
vvp sim
gtkwave dump.vcd

Verilator

高性能编译型仿真器,将 Verilog 编译为 C++:

verilator --lint-only xor_cipher.v     # 语法检查
verilator -cc xor_cipher.v --exe sim_main.cpp  # 编译仿真
make -C obj_dir -f Vxor_cipher.mk
./obj_dir/Vxor_cipher

商业工具

9. FPGA 开发板推荐

开发板FPGA逻辑单元价格
DE10-NanoCyclone V SoC110K LE$130
Nexys A7Artix-733K LC$265
ZCU102Zynq UltraScale+600K LC$1,295
Arty A7Artix-723K LC$149

8. Verilog 编码风格指南

命名规范

时钟域规则

// 标准时序逻辑模板
always @(posedge clk or negedge rst_n) begin
    if (!rst_n)
        data_reg <= {WIDTH{1'b0}};  // 复位值
    else
        data_reg <= data_next;       // 正常逻辑
end

组合逻辑规则

仿真工具链对比

工具类型速度成本
Icarus Verilog解释型免费
Verilator编译型免费
ModelSim混合型商业
VCS编译型极快商业