第30课:毕业项目:安全 SoC

阶段五实战项目 — 将 30 课所学整合为一个完整的安全 SoC!这是密码学硬件课程的综合毕业项目,集成 AES、SHA、RSA、ECC、TRNG、安全启动和 TPM 功能。

1. 安全 SoC 架构

┌─────────────────────────────────────────────────┐
│                  安全 SoC 顶层                    │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐       │
│  │  CPU     │  │  DMA     │  │  中断控制器│      │
│  │ (简化的  │  │          │  │          │        │
│  │  RISC-V) │  │          │  │          │        │
│  └────┬─────┘  └────┬─────┘  └────┬─────┘       │
│       │              │              │             │
│  ┌────┴──────────────┴──────────────┴─────┐      │
│  │           安全总线 (AHB/APB)           │      │
│  └──┬────┬────┬────┬────┬────┬────┬──────┘      │
│     │    │    │    │    │    │    │              │
│  ┌──┴─┐┌┴──┐┌┴──┐┌┴──┐┌┴──┐┌┴──┐┌┴───┐       │
│  │AES ││SHA││RSA││ECC││TRN││TPM││BOOT│       │
│  │引擎││256││引擎││模块││ G ││核心││验证│       │
│  └────┘└───┘└───┘└───┘└───┘└───┘└────┘       │
│                                                  │
│  ┌──────────────────────────────────────────┐   │
│  │           安全存储 (eFuse/OTP)           │   │
│  └──────────────────────────────────────────┘   │
└─────────────────────────────────────────────────┘

2. 安全 SoC 顶层模块

✅Verilator验证通过
// 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

3. 安全策略引擎

安全 SoC 需要统一的策略管理:

✅Verilator验证通过
// 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

4. 课程回顾与成就总览

🏆 30 课成就全览

阶段课程核心成就
对称密码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

5. 进阶方向

1. 完成安全 SoC 的集成验证:编写 C 语言测试程序,通过 UART 发送命令,执行 AES 加密。

2. 在 FPGA 上实现安全 SoC 原型,运行安全启动流程。

3. 添加 DMA 引擎:支持大块数据的零拷贝加密/哈希。

4. 终极挑战:实现全栈安全——从 Boot ROM 到可信 OS,在 SoC 上运行一个完整的安全应用。

🏆 成就解锁: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,设计时需根据应用场景权衡。