srikanth-mg/riscv-tee-ibex

GitHub: srikanth-mg/riscv-tee-ibex

这是一个为 Ibex RISC-V 核心设计的硬件强制可信执行环境,通过并行匹配 PMP 消除时序侧信道以增强安全性。

Stars: 3 | Forks: 0

# Ibex RISC-V 核心的硬件强制可信执行环境(TEE) ![Status](https://img.shields.io/badge/status-functional-success) ![Tests](https://img.shields.io/badge/tests-6%2F6%20passing-success) ![Synthesis](https://img.shields.io/badge/synthesis-0%20critical%20warnings-success) ![Timing](https://img.shields.io/badge/timing-MET%20%2B2.68ns-success) ![FPGA](https://img.shields.io/badge/target-Zynq--7020-blue) ![Language](https://img.shields.io/badge/SystemVerilog-1720%20LOC-blueviolet) ![License](https://img.shields.io/badge/license-Apache%202.0-green) ## 一个完整的、开源的硬件强制可信执行环境(TEE)RTL实现,设计为 lowRISC Ibex RISC-V 核心的集成就绪 IP 模块。该设计通过一种并行匹配架构消除了传统优先编码 PMP 固有的时序侧信道,该架构已通过综合后关键路径报告独立验证。 # 项目动机 商业 TEE(如 Intel SGX、ARM TrustZone)在硬件层面是专有的。开源的 RISC-V 学术设计(如 Sanctum、Keystone)通常依赖于现有的 PMP 实现,其访问时间会通过数据依赖的比较器深度泄漏匹配的内存区域。本工作用一种平衡树并行匹配结构替代了标准的级联 MUX PMP,该结构在所有 PMP 条目上产生恒定的逻辑深度,从而消除了时序侧信道——并在综合后的硬件中证明了该特性,而不仅仅是理论论证。 # 结果 指标 数值 状态 1. 测试通过 6 / 6 ✅ 2. 综合错误 0 ✅ 3. 关键警告 0 ✅ 4. Slice LUTs 3,514 (6.61%) 5. Slice 寄存器 3,172 (2.98%) 6. 目标频率 ~57 MHz 7. WNS(建立时间) +0.18 ns ✅ 达标 8. WHS(保持时间) +0.103 ns ✅ 达标 9. 失败端点 0 / 6,243 ✅ 10. 关键路径 13 级均匀逻辑层 恒定时间 目标平台:Xilinx Zynq-7020 (`xc7z020clg400-1`),速度等级 −1,Vivado 2023.1。 关键路径从 PMP 条目寄存器经过并行匹配比较器网络到达 `pipeline_flush_o`,遍历了 13 级逻辑。该深度在所有 16 个 PMP 条目上是均匀的——在综合报告中可直接观察到,作为恒定时间特性的证据。 # 架构 ``` ┌─────────────────────────────────────────────┐ │ tee_top │ │ ┌─────────────────┐ ┌─────────────────┐ │ IF/EX ────────► │ │ Security │ │ PMP │ │ Trap ─────────► │ │ Engine (FSM) │ │ Controller │ │ CSR ─────────► │ │ 14 states │ │ parallel-match │ │ DMEM ─────────► │ └─────────────────┘ └─────────────────┘ │ │ ┌─────────────────┐ ┌─────────────────┐ │ │ │ CSR Unit │ │ Register File │ │ │ │ M-mode + 4 │ │ main + shadow │ │ │ │ custom CSRs │ │ bank │ │ │ └─────────────────┘ └─────────────────┘ │ └─────────────────────────────────────────────┘ ``` 四个子模块在 `tee_top` 后面协同工作: `tee_security_engine` — 14 状态硬件有限状态机,编排 enclave 生命周期(`CREATE`、`ENTER`、`EXIT`、`DESTROY`、`FORWARD`)。由 Vivado 自动推断为单热码,提供对单位错误状态转移的汉明距离抗性。 `tee_pmp_controller` — 带 16 个条目的并行匹配 PMP。所有比较器同时评估,平衡树优先级编码产生恒定的 13 级逻辑深度。 `tee_csr_unit` — 标准 M 模式 CSR(`mstatus`、`mtvec`、`mepc`、`mcause`)加上 RISC-V 保留供应商空间(`0x7C0`–`0x7C3`)中的 4 个自定义 enclave CSR。 `tee_register_file` — 32×32 位主寄存器文件与一个 31×32 位影子寄存器组配对,用于单周期上下文保存和恢复。影子寄存器组没有总线地址——从结构上无法被软件访问。 # 关键设计决策 ## 并行匹配 PMP 标准的 PMP 实现按优先级顺序依次检查每个条目: ``` E0 → E1 → E2 → ... → E15 → grant ^^ ^^^^^^^^^^^^ fast slow (variable depth) ``` 这会产生数据依赖的传播延迟:匹配条目 0 的访问遍历 1 级逻辑,匹配条目 15 的访问遍历多达 16 级。攻击者通过测量访问延迟即可得知匹配了哪个 PMP 条目——这是一个时序侧信道。 并行匹配实现将其扁平化为一棵平衡树: ``` E0 ─┐ E1 ─┤ E2 ─┤-> Balanced -> grant ... ─┤ Tree E15 ─┘ ``` 所有 16 个条目同时进行比较;关键路径是均匀的 13 级,无论哪个条目匹配。权衡:更多的面积(更多的比较器、更多的布线)以换取恒定时间的访问。测量成本:约占总单元数的 37%。 ## 影子寄存器组 ## M 模式自定义 CSR 地址 名称 用途 `0x7C0` `menclaveid` 当前活动 enclave 的 4 位 ID `0x7C1` `menclave_activate` 激活标志,在 `ENTER` 时设置 `0x7C2` `menclavebase` 活动 enclave 区域的基地址 `0x7C3` `menclavebound` 活动 enclave 区域的上界 `U` 模式读取返回零;`U` 模式写入会触发 `TRAP_ILLEGAL_INST`。安全引擎在状态转移时通过侧带路径写入这些 CSR——无需软件参与。 ## 威胁模型 范围内:被攻破的 U 模式应用程序、非 enclave 进程的内存窥探、上下文切换时的寄存器状态泄漏、PMP 时序侧信道。 范围外:被攻破的 M 模式固件(设计上的信任根)、物理攻击(探测、故障注入)、enclave 内部的软件错误、具有密码学签名的远程证明。 ## 仓库结构 ``` riscv-tee-ibex/ ├── README.md ← this file ├── LICENSE ← Apache 2.0 ├── rtl/ │ ├── tee\_pkg.sv ← types, enums, parameters, CSR addresses │ ├── tee\_security\_engine.sv ← 14-state hardware FSM │ ├── tee\_pmp\_controller.sv ← parallel-match PMP (16 entries) │ ├── tee\_csr\_unit.sv ← M-mode + 4 custom enclave CSRs │ ├── tee\_register\_file.sv ← main 32×32 + shadow 31×32 bank │ └── tee\_top.sv ← integration ├── tb/ │ └── tee\_rtl\_tb.sv ← directed RTL integration testbench ├── synth/ │ ├── create\_project.tcl ← Vivado project setup script │ └── tee\_constraints.xdc ← 50 MHz target SDC └── docs/ └── architecture.md ← additional design notes ``` ## 如何复现 前提条件 Xilinx Vivado 2023.1(Windows 或 Linux) 目标器件 `xc7z020clg400-1`(Zynq-7020,速度等级 −1) 无需 FPGA 开发板(仅综合 + 仿真) 运行 ``` # 在 Vivado TCL 控制台中 cd source synth/create\_project.tcl # 行为仿真 — 预期 "RESULTS: 6/6 passed" launch\_simulation # 综合 — 预期 "WNS +0.18 ns MET, 0 critical warnings" launch\_runs synth\_1 -jobs 4 wait\_on\_run synth\_1 # 报告 open\_run synth\_1 report\_utilization -file util.rpt report\_timing\_summary -file timing.rpt ``` # 测试平台概要 ## 测试 验证内容 1. 复位 复位后 FSM、寄存器、特权级的状态 2. CSR 读/写 对 MTVEC 进行先写后读 3. PMP M 模式 M 模式加载绕过 PMP(符合预期行为) 4. ecall FSM ecall 陷阱使 FSM 离开 `SE_IDLE` 状态 5. 寄存器写入 通过寄存器文件进行先写后读 6. FSM 返回 生命周期操作后 FSM 返回 `SE_IDLE` 状态 在提交历史中描述的集成补丁(`ecall_a3` 信号穿过 `tee_top` 的连线,`tee_register_file` 中的 `x0` 写入门控)之后,所有 6 个测试均通过。 ## 局限性/未来工作 独立交付 → TEE 是一个完整的 IP 模块,但尚未集成到 Ibex 流水线中。已记录三个边界集成点:到加载/存储单元的 PMP 覆盖、CSR 总线以及 ecall 陷阱路径。 仅单核 → 多核 enclave 将需要每核影子寄存器组和 PMP 条目分区。 仅本地证明 → 密码学远程证明已推迟——需要一个硬件 SHA 核心来写入密封的度量 CSR。 验证深度 → 测试 4 验证了 FSM 离开 IDLE 状态的行为;完整的 CREATE 提交观察需要将 `enclave_meta_o` 暴露给测试平台(未来工作项)。 # 背景 本项目作为宾汉姆顿大学计算机工程硕士毕业设计项目完成,指导教师为赵文锋教授。受以下工作影响: 1. Costan, Lebedev, Devadas — Sanctum: 用于强软件隔离的最小硬件扩展 (USENIX Security 2016) 2. Lee, Kohlbrenner, Shinde, Asanović, Song — Keystone: 架构可信执行环境的开放框架 (EuroSys 2020) 3. Bourgeat 等人 — MI6: 推测乱序处理器中的安全 Enclave (MICRO 2019) 4. Weiser 等人 — TIMBER-V: 将细粒度 Enclave 带入 RISC-V 的标签隔离内存 (NDSS 2019) 5. lowRISC 贡献者 — Ibex 文档 # 许可证 Apache License 2.0 — 见 LICENSE 文件。包含明确的专利授权和专利报复条款,适用于硬件安全 IP。 # 作者 Srikanth Muthuvel Ganthimathi 计算机工程硕士,宾汉姆顿大学 指导教师:赵文锋教授
标签:FPGA设计, RISC-V, RTL实现, SystemVerilog, Vivado, Zynq-7020, 低功耗处理器, 侧信道攻击防护, 内存保护, 可信执行环境, 处理器安全, 学术研究, 安全微架构, 嵌入式系统, 并行匹配PMP, 开源硬件, 数字电路设计, 时序侧信道防护, 硬件安全, 硬件强制安全, 硬件描述语言