阶段五实战项目 — 将 30 课所学整合为一个完整的安全 SoC!这是密码学硬件课程的综合毕业项目,集成 AES、SHA、RSA、ECC、TRNG、安全启动和 TPM 功能。
┌─────────────────────────────────────────────────┐ │ 安全 SoC 顶层 │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ CPU │ │ DMA │ │ 中断控制器│ │ │ │ (简化的 │ │ │ │ │ │ │ │ RISC-V) │ │ │ │ │ │ │ └────┬─────┘ └────┬─────┘ └────┬─────┘ │ │ │ │ │ │ │ ┌────┴──────────────┴──────────────┴─────┐ │ │ │ 安全总线 (AHB/APB) │ │ │ └──┬────┬────┬────┬────┬────┬────┬──────┘ │ │ │ │ │ │ │ │ │ │ │ ┌──┴─┐┌┴──┐┌┴──┐┌┴──┐┌┴──┐┌┴──┐┌┴───┐ │ │ │AES ││SHA││RSA││ECC││TRN││TPM││BOOT│ │ │ │引擎││256││引擎││模块││ G ││核心││验证│ │ │ └────┘└───┘└───┘└───┘└───┘└───┘└────┘ │ │ │ │ ┌──────────────────────────────────────────┐ │ │ │ 安全存储 (eFuse/OTP) │ │ │ └──────────────────────────────────────────┘ │ └─────────────────────────────────────────────────┘
// secure_soc.v - 安全 SoC 顶层
module secure_soc #(
parameter ADDR_WIDTH = 32,
parameter DATA_WIDTH = 32
)(
input wire clk,
input wire rst_n,
// 外部接口
input wire uart_rx,
output wire uart_tx,
output wire spi_clk,
output wire spi_mosi,
input wire spi_miso,
output wire spi_cs_n,
// GPIO
input wire [7:0] gpio_in,
output wire [7:0] gpio_out,
// 中断
output wire irq
);
// ====== 内部总线信号 ======
wire [ADDR_WIDTH-1:0] bus_addr;
wire [DATA_WIDTH-1:0] bus_wr_data;
wire [DATA_WIDTH-1:0] bus_rd_data;
wire bus_wr_en;
wire bus_rd_en;
wire bus_ready;
// ====== AES 引擎接口 ======
wire [127:0] aes_pt, aes_ct, aes_key;
wire aes_start, aes_valid, aes_busy;
// 地址映射:AES 在 0x1000_0000
assign aes_start = bus_wr_en && (bus_addr[31:16] == 16'h1000);
assign aes_pt = {bus_wr_data, 96'h0}; // 简化
assign aes_key = 128'h0; // 从安全存储加载
aes128_enc u_aes (
.clk(clk), .rst_n(rst_n), .start(aes_start),
.plaintext(aes_pt), .key(aes_key),
.ciphertext(aes_ct), .valid(aes_valid), .busy(aes_busy)
);
// ====== SHA-256 引擎接口 ======
wire [255:0] sha_digest;
wire sha_digest_valid;
// 地址映射:SHA 在 0x1001_0000
// ====== TRNG 接口 ======
wire [31:0] trng_data;
wire trng_valid;
trng_ro u_trng (
.clk(clk), .rst_n(rst_n), .enable(1'b1),
.random_valid(trng_valid), .random_data(trng_data)
);
// ====== 安全启动 ======
wire boot_ok, boot_fail;
secure_boot u_boot (
.clk(clk), .rst_n(rst_n), .boot_start(1'b0),
.fw_data(32'h0), .fw_addr(32'h0),
.fw_valid(1'b0), .fw_last(1'b0),
.signature(256'h0), .sig_valid(1'b0),
.root_key_hash(256'h0),
.boot_ok(boot_ok), .boot_fail(boot_fail),
.computed_hash(), .fw_version(), .min_version()
);
// ====== 安全存储 (eFuse 模拟) ======
reg [255:0] efuse_root_key_hash;
reg [255:0] efuse_device_id;
reg [31:0] efuse_anti_rollback;
initial begin
efuse_root_key_hash = 256'h0; // 出厂烧录
efuse_device_id = 256'h0;
efuse_anti_rollback = 32'h0;
end
// ====== 中断生成 ======
assign irq = aes_valid | sha_digest_valid | trng_valid | boot_fail;
// ====== 总线读取多路选择 ======
assign bus_rd_data = (bus_addr[31:16] == 16'h1000) ? aes_ct[31:0] :
(bus_addr[31:16] == 16'h1002) ? trng_data :
32'h0;
assign bus_ready = 1'b1;
// 简化的 GPIO 输出
assign gpio_out = aes_valid ? 8'hFF : 8'h00;
endmodule
安全 SoC 需要统一的策略管理:
// security_policy.v - 安全策略引擎
module security_policy (
input wire clk,
input wire rst_n,
// 操作请求
input wire [3:0] operation, // 操作类型
input wire [31:0] key_id, // 密钥标识
input wire debug_active, // 调试模式活跃
input wire boot_complete, // 启动完成
// 策略输出
output reg permit, // 允许操作
output reg audit_log, // 审计日志
output reg alarm // 安全报警
);
// 操作类型定义
localparam OP_ENCRYPT = 4'd1;
localparam OP_DECRYPT = 4'd2;
localparam OP_SIGN = 4'd3;
localparam OP_KEY_GEN = 4'd4;
localparam OP_KEY_EXPORT= 4'd5;
localparam OP_DEBUG = 4'd6;
always @(posedge clk or negedge rst_n) begin
if (!rst_n) begin
permit <= 0; audit_log <= 0; alarm <= 0;
end else begin
permit <= 0; audit_log <= 0; alarm <= 0;
case (operation)
OP_ENCRYPT: begin
permit <= boot_complete;
audit_log <= 1;
end
OP_DECRYPT: begin
permit <= boot_complete && !debug_active;
audit_log <= 1;
end
OP_SIGN: begin
permit <= boot_complete && !debug_active;
audit_log <= 1;
end
OP_KEY_GEN: begin
permit <= boot_complete;
audit_log <= 1;
end
OP_KEY_EXPORT: begin
// 密钥导出始终需要特殊授权
permit <= 0; // 默认拒绝
alarm <= 1;
audit_log <= 1;
end
OP_DEBUG: begin
permit <= 0; // 生产设备不允许调试
alarm <= 1;
audit_log <= 1;
end
default: begin
permit <= 0;
alarm <= 1;
end
endcase
end
end
endmodule
| 阶段 | 课程 | 核心成就 |
|---|---|---|
| 对称密码 | 1-6 | 🔑SILICON_INITIATE → 🧩NONLINEAR_CORE → 🔗KEY_SCHEDULER → ⚙️ROUND_MASTER → 🔐AES_ENGINE → 🎖️SYMMETRIC_MASTER |
| 哈希与认证 | 7-12 | 🧬HASH_CORE → 🔒SHA256_ENGINEER → 🛡️HMAC_GUARDIAN → 🔍CRC_CRAFTSMAN → 🎲ENTROPY_SOURCE → 🎰PRNG_MASTER |
| 非对称密码 | 13-18 | 🔢MODULAR_ARITH → 🛤️MONTGOMERY_PATH → ⚡MODULAR_EXPONENT → 🗝️RSA_ENGINEER → 📈ECC_WALKER → 🏆ASYMMETRIC_MASTER |
| 侧信道防护 | 19-24 | 👁️SIDECHANNEL_EYE → ⏱️TIME_GUARDIAN → 🎭MASKING_WIZARD → 🌪️CHAOS_MASTER → 🛡️POWER_SHIELD → 🔧FAULT_HUNTER |
| 实战项目 | 25-30 | 🔐AEAD_PIONEER → 🧽SPONGE_MASTER → 🔮PQ_PIONEER → ⛓️TRUST_CHAIN → 🏛️TPM_ARCHITECT → 🎓SOC_MASTER |
1. 完成安全 SoC 的集成验证:编写 C 语言测试程序,通过 UART 发送命令,执行 AES 加密。
2. 在 FPGA 上实现安全 SoC 原型,运行安全启动流程。
3. 添加 DMA 引擎:支持大块数据的零拷贝加密/哈希。
4. 终极挑战:实现全栈安全——从 Boot ROM 到可信 OS,在 SoC 上运行一个完整的安全应用。
恭喜完成全部 30 课!你已从 XOR 门到安全 SoC,完整走过了密码学硬件工程的学习之路。你掌握了:
最终徽章:🎓 SOC_MASTER
这是你密码学硬件工程之旅的终点,也是新的起点。继续探索,保持好奇,守护安全!🚀
推荐使用以下工具链进行课程实践:
# 安装 Verilator
sudo apt install verilator
# 安装 Icarus Verilog(可选)
sudo apt install iverilog
# 安装 GTKWave(波形查看器)
sudo apt install gtkwave
# 验证安装
verilator --lint-only --version
iverilog -V
密码学硬件实现的关键性能指标:
这些指标之间通常存在 trade-off,设计时需根据应用场景权衡。