IBM/ACE-RISCV
GitHub: IBM/ACE-RISCV
一个为嵌入式RISC-V系统提供形式化验证保障机密计算的框架,构建带后量子密码的VM-based可信执行环境。
Stars: 203 | Forks: 24
# RISC-V 的保障机密执行(ACE)


ACE-RISCV 是一个开源项目,其目标是提供一个具有形式化证明的安全监控器的保障机密计算框架。它基于[规范架构](https://dl.acm.org/doi/pdf/10.1145/3623652.3623668),以 RISC-V 为目标,旨在可移植到其他架构。形式化验证工作集中在[安全监控器实现](security-monitor/)。我们邀请合作者与我们一起推动可证明的机密计算技术的边界。
**形式化验证:**
本项目实现了 RISC-V CoVE 规范中引用[附录 D](https://github.com/riscv-non-isa/riscv-ap-tee/blob/main/)的部署模型 3。形式化规范嵌入在安全监控器的源代码中,证明位于[验证/](verification/)文件夹中。请阅读我们的[paper1](https://arxiv.org/pdf/2505.12995)和[paper2](https://dl.acm.org/doi/pdf/10.1145/3623652.3623668)以了解方法和目标。
**后量子密码学(PQC)和 Attestation**:ACE 支持本地 Attestation,这是一种用于认证机密虚拟机(VM)的机制,适用于网络连接有限或没有网络连接的嵌入式系统。我们已经支持 PQC,具体使用 ML-KEM、SHA-384 和 AES-GCM-256 密码学。
## 硬件要求
我们目前正在基于 RISC-V 64 位构建,具备整数(I)、原子(A)和超级扩展(H)、物理内存保护(PMP)、内存管理单元(MMU)、IOPMP、核心本地中断控制器(CLINT)以及超级时间比较扩展(Sstc)。
**用于运行 ACE 的 RISC-V 硬件:**
* HiFive Premiere P550 评估板,[查看说明](security-monitor/platform/p550)。
## 快速开始
按照说明在模拟的 RISC-V 环境中运行一个示例[机密工作负载](confidential-vms),使用[不受信任的 Linux KVM 虚拟机监控程序](hypervisor/)。
### 要求
完整编译框架需要很长时间,因为许多工具是从源码构建的。我们的工具链目前包括:虚拟机监控程序内核(`Linux kernel`)、机密客户机内核(`Linux kernel`)和固件(`安全监控器`和`OpenSBI 固件`)。请确保在至少拥有 4 核、4GB 内存和 50GB 磁盘空间的机器上构建此项目,以获得合理的(约 30 分钟)构建时间。
### 依赖项
您必须安装特定于所使用操作系统的构建依赖项 **并且** 安装 Rust 工具链。您也可以查看持续集成(CI)系统的[可重现构建配置](.github/workflows/build.yml)。
Ubuntu 22.04 的依赖项
```
sudo apt update
# riscv-gnu-toolchain 依赖项:
sudo apt -qq -y install autoconf automake autotools-dev curl python3 libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev xz-utils
# OpenSBI
sudo apt -qq -y install clang
# Qemu 8.2
sudo apt -qq -y install git libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev ninja-build python3-venv libslirp-dev
# Buildroot
sudo apt -qq -y install unzip sed binutils diffutils build-essential bash patch gzip bzip2 perl tar cpio unzip rsync file bc findutils
# 工具
sudo apt install -y sshpass
```
安装最新 Rust:
```
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source "$HOME/.cargo/env"
rustup default nightly
rustup target add riscv64gc-unknown-none-elf
rustup component add rustfmt
cargo install cargo-binutils
# 检查 ~/.bashrc 是否包含以下行
. "$HOME/.cargo/env"
```
### 源码
使用子模块检出此仓库:
```
git clone --recurse-submodules git@github.com:IBM/ACE-RISCV.git
```
### 编译
#### 前置条件
从包含此 README 文件的目录运行以下命令。
确保所有子模块已获取:
```
git submodule update --init --recursive
```
设置 ACE_DIR 变量指向项目构建位置。默认值为执行 `make` 命令的位置下的 `build/` 子目录。
```
export ACE_DIR=/your/path/to/build/ace
```
#### 构建全部
以下命令将构建整个框架。将 `-j` 标志设置为系统中的处理器核心数。以下命令假设您有 4 个核心。
```
MAKEFLAGS="--silent -j4" make
```
#### 单独构建组件
或者,您可以单独构建组件以避免长时间构建导致的“SSH 断开连接”、“挂起”等问题。
安装编译 RISC-V 架构代码所需的所有开发工具:
```
make devtools
```
构建主机操作系统——[Linux KVM 虚拟机监控程序](hypervisor/):
```
make hypervisor
```
构建负责启动过程的低级固件。该命令还将构建[安全监控器(SM)](security-monitor/):
```
make firmware
```
构建示例[机密工作负载](confidential-vms/):
```
make confidential_vms
```
构建 RISC-V 模拟器和简化运行测试环境的实用工具:
```
make emulator
```
## 运行与测试
确保已设置 `ACE_DIR` 环境变量并指向构建位置。如果未设置该变量,请查看“编译”部分。
```
echo $ACE_DIR
```
要在 RISC-V 模拟器上运行测试环境,请运行:
```
${ACE_DIR}/tools/ace run
```
您应该会看到启动过程的输出以及登录虚拟机监控程序的提示:
```
# 登录: root, 密码: passwd
```
要运行作为机密虚拟机的示例 Linux 操作系统(登录名:root,密码:passwd),请执行:
```
./run_linux_vm_qemu.sh
```
您应该会看到指示本地 Attestation 成功的输出:
```
#ACE: Reference PCR4=Sha512=0x86774eec200ca6552cbc50211e4b32e7a4ba815c190d56b11ffabc8df1ebb6d9c41d04a64099d860b90c65729a28ded8
#ACE: Attestation succeeded, read 1 secret
```
现在可以登录到机密虚拟机:
```
# 登录: root, 密码: passwd
```
您可以从机密虚拟机内部读取密钥:
```
# 如果根文件系统未挂载,则执行以下操作:
mount /dev/vda /root
cd /root/root/ace_module
insmod ace.ko
```
您应该会看到密钥:
```
[ 203.051959] Requesting secret from the security monitor
[ 203.107150] Secret=0xc0ffee
```
将本地 Attestation 与 dm-crypt/LUKS 集成正在进行中。完成后,您将能够加密根文件系统并通过 TAP 传递解密密钥。
初始化内存盘中的一个脚本将随后从 TAP 检索解密密钥并解密根文件系统。
# 许可证
本仓库在 Apache 2.0 许可证条款下分发,参见[LICENSE](LICENSE)。
**这是一个活跃的研究项目,不提供任何形式的担保。**
# 引用
**我们最新的关于 ACE 的完整论文:**
```
@misc{ozga2025ace,
author = {Ozga, Wojciech and Hunt, Guerney D. H. and Le, Michael V. and Gaeher Lennard and Shinnar, Avraham and Palmer, Elaine R. and Jamjoom, Hani and Dragone, Silvio},
title = {ACE: Confidential Computing for Embedded RISC-V Systems},
year = 2025,
howpublished = {\url{https://arxiv.org/pdf/2505.12995}}
}
```
**我们关于 ACE 的工作坊论文:**
```
@inproceedings{ozga2023riscvtee,
title={Towards a Formally Verified Security Monitor for VM-based Confidential Computing},
author={Ozga, Wojciech and Hunt, Guerney D. H. and Le, Michael V. and Palmer, Elaine R. and Shinnar, Avraham},
booktitle = {Proceedings of the 12th International Workshop on Hardware and Architectural Support for Security and Privacy},
series = {HASP2023},
year={2023}
}
```
**我们关于上下文切换验证的论文:**
```
@misc{kalani2025sailor,
author = {Kalani, Neelu and Bourgeat, Thomas and Hunt, Guerney D.H. and Ozga, Wojciech},
title = {Save what must be saved: Secure context switching with Sailor},
booktitle = {34nd USENIX Security Symposium (USENIX Security 25)},
publisher = {USENIX Association},
year = 2025
}
```
ACE-RISCV 是一个开源项目,其目标是提供一个具有形式化证明的安全监控器的保障机密计算框架。它基于[规范架构](https://dl.acm.org/doi/pdf/10.1145/3623652.3623668),以 RISC-V 为目标,旨在可移植到其他架构。形式化验证工作集中在[安全监控器实现](security-monitor/)。我们邀请合作者与我们一起推动可证明的机密计算技术的边界。
**形式化验证:**
本项目实现了 RISC-V CoVE 规范中引用[附录 D](https://github.com/riscv-non-isa/riscv-ap-tee/blob/main/)的部署模型 3。形式化规范嵌入在安全监控器的源代码中,证明位于[验证/](verification/)文件夹中。请阅读我们的[paper1](https://arxiv.org/pdf/2505.12995)和[paper2](https://dl.acm.org/doi/pdf/10.1145/3623652.3623668)以了解方法和目标。
**后量子密码学(PQC)和 Attestation**:ACE 支持本地 Attestation,这是一种用于认证机密虚拟机(VM)的机制,适用于网络连接有限或没有网络连接的嵌入式系统。我们已经支持 PQC,具体使用 ML-KEM、SHA-384 和 AES-GCM-256 密码学。
## 硬件要求
我们目前正在基于 RISC-V 64 位构建,具备整数(I)、原子(A)和超级扩展(H)、物理内存保护(PMP)、内存管理单元(MMU)、IOPMP、核心本地中断控制器(CLINT)以及超级时间比较扩展(Sstc)。
**用于运行 ACE 的 RISC-V 硬件:**
* HiFive Premiere P550 评估板,[查看说明](security-monitor/platform/p550)。
## 快速开始
按照说明在模拟的 RISC-V 环境中运行一个示例[机密工作负载](confidential-vms),使用[不受信任的 Linux KVM 虚拟机监控程序](hypervisor/)。
### 要求
完整编译框架需要很长时间,因为许多工具是从源码构建的。我们的工具链目前包括:虚拟机监控程序内核(`Linux kernel`)、机密客户机内核(`Linux kernel`)和固件(`安全监控器`和`OpenSBI 固件`)。请确保在至少拥有 4 核、4GB 内存和 50GB 磁盘空间的机器上构建此项目,以获得合理的(约 30 分钟)构建时间。
### 依赖项
您必须安装特定于所使用操作系统的构建依赖项 **并且** 安装 Rust 工具链。您也可以查看持续集成(CI)系统的[可重现构建配置](.github/workflows/build.yml)。
Ubuntu 22.04 的依赖项
```
sudo apt update
# riscv-gnu-toolchain 依赖项:
sudo apt -qq -y install autoconf automake autotools-dev curl python3 libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev xz-utils
# OpenSBI
sudo apt -qq -y install clang
# Qemu 8.2
sudo apt -qq -y install git libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev ninja-build python3-venv libslirp-dev
# Buildroot
sudo apt -qq -y install unzip sed binutils diffutils build-essential bash patch gzip bzip2 perl tar cpio unzip rsync file bc findutils
# 工具
sudo apt install -y sshpass
```
安装最新 Rust:
```
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source "$HOME/.cargo/env"
rustup default nightly
rustup target add riscv64gc-unknown-none-elf
rustup component add rustfmt
cargo install cargo-binutils
# 检查 ~/.bashrc 是否包含以下行
. "$HOME/.cargo/env"
```
### 源码
使用子模块检出此仓库:
```
git clone --recurse-submodules git@github.com:IBM/ACE-RISCV.git
```
### 编译
#### 前置条件
从包含此 README 文件的目录运行以下命令。
确保所有子模块已获取:
```
git submodule update --init --recursive
```
设置 ACE_DIR 变量指向项目构建位置。默认值为执行 `make` 命令的位置下的 `build/` 子目录。
```
export ACE_DIR=/your/path/to/build/ace
```
#### 构建全部
以下命令将构建整个框架。将 `-j` 标志设置为系统中的处理器核心数。以下命令假设您有 4 个核心。
```
MAKEFLAGS="--silent -j4" make
```
#### 单独构建组件
或者,您可以单独构建组件以避免长时间构建导致的“SSH 断开连接”、“挂起”等问题。
安装编译 RISC-V 架构代码所需的所有开发工具:
```
make devtools
```
构建主机操作系统——[Linux KVM 虚拟机监控程序](hypervisor/):
```
make hypervisor
```
构建负责启动过程的低级固件。该命令还将构建[安全监控器(SM)](security-monitor/):
```
make firmware
```
构建示例[机密工作负载](confidential-vms/):
```
make confidential_vms
```
构建 RISC-V 模拟器和简化运行测试环境的实用工具:
```
make emulator
```
## 运行与测试
确保已设置 `ACE_DIR` 环境变量并指向构建位置。如果未设置该变量,请查看“编译”部分。
```
echo $ACE_DIR
```
要在 RISC-V 模拟器上运行测试环境,请运行:
```
${ACE_DIR}/tools/ace run
```
您应该会看到启动过程的输出以及登录虚拟机监控程序的提示:
```
# 登录: root, 密码: passwd
```
要运行作为机密虚拟机的示例 Linux 操作系统(登录名:root,密码:passwd),请执行:
```
./run_linux_vm_qemu.sh
```
您应该会看到指示本地 Attestation 成功的输出:
```
#ACE: Reference PCR4=Sha512=0x86774eec200ca6552cbc50211e4b32e7a4ba815c190d56b11ffabc8df1ebb6d9c41d04a64099d860b90c65729a28ded8
#ACE: Attestation succeeded, read 1 secret
```
现在可以登录到机密虚拟机:
```
# 登录: root, 密码: passwd
```
您可以从机密虚拟机内部读取密钥:
```
# 如果根文件系统未挂载,则执行以下操作:
mount /dev/vda /root
cd /root/root/ace_module
insmod ace.ko
```
您应该会看到密钥:
```
[ 203.051959] Requesting secret from the security monitor
[ 203.107150] Secret=0xc0ffee
```
将本地 Attestation 与 dm-crypt/LUKS 集成正在进行中。完成后,您将能够加密根文件系统并通过 TAP 传递解密密钥。
初始化内存盘中的一个脚本将随后从 TAP 检索解密密钥并解密根文件系统。
# 许可证
本仓库在 Apache 2.0 许可证条款下分发,参见[LICENSE](LICENSE)。
**这是一个活跃的研究项目,不提供任何形式的担保。**
# 引用
**我们最新的关于 ACE 的完整论文:**
```
@misc{ozga2025ace,
author = {Ozga, Wojciech and Hunt, Guerney D. H. and Le, Michael V. and Gaeher Lennard and Shinnar, Avraham and Palmer, Elaine R. and Jamjoom, Hani and Dragone, Silvio},
title = {ACE: Confidential Computing for Embedded RISC-V Systems},
year = 2025,
howpublished = {\url{https://arxiv.org/pdf/2505.12995}}
}
```
**我们关于 ACE 的工作坊论文:**
```
@inproceedings{ozga2023riscvtee,
title={Towards a Formally Verified Security Monitor for VM-based Confidential Computing},
author={Ozga, Wojciech and Hunt, Guerney D. H. and Le, Michael V. and Palmer, Elaine R. and Shinnar, Avraham},
booktitle = {Proceedings of the 12th International Workshop on Hardware and Architectural Support for Security and Privacy},
series = {HASP2023},
year={2023}
}
```
**我们关于上下文切换验证的论文:**
```
@misc{kalani2025sailor,
author = {Kalani, Neelu and Bourgeat, Thomas and Hunt, Guerney D.H. and Ozga, Wojciech},
title = {Save what must be saved: Secure context switching with Sailor},
booktitle = {34nd USENIX Security Symposium (USENIX Security 25)},
publisher = {USENIX Association},
year = 2025
}
```
标签:ACE-RISCV, AES-GCM-256, Attestation, CoVE, IBM, ML-KEM, PMP, RISC-V, SHA-384, TEE, 保密计算框架, 内存管理单元, 可信执行环境, 可视化界面, 后量子密码, 固件审计, 安全监控器, 安全监控器形式化验证, 嵌入式系统, 形式化证明, 形式化验证, 本地认证, 机密计算, 虚拟机监控器, 身份验证强制, 通知系统