srikanth-mg/riscv-tee-ibex
GitHub: srikanth-mg/riscv-tee-ibex
这是一个为 Ibex RISC-V 核心设计的硬件强制可信执行环境,通过并行匹配 PMP 消除时序侧信道以增强安全性。
Stars: 3 | Forks: 0
# Ibex RISC-V 核心的硬件强制可信执行环境(TEE)







## 一个完整的、开源的硬件强制可信执行环境(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, 开源硬件, 数字电路设计, 时序侧信道防护, 硬件安全, 硬件强制安全, 硬件描述语言