Assured confidential execution (ACE)实现了基于 VM 的可信执行环境(TEE),用于嵌入式 RISC-V 系统,重点是经过形式验证且可审计的固件。

License

[Apache-2.0 license](//: # (</IBM/ACE-RISCV/blob/main/LICENSE>))

[93 stars](//: # (</IBM/ACE-RISCV/stargazers>)) [15 forks](//: # (</IBM/ACE-RISCV/forks>)) [Branches](//: # (</IBM/ACE-RISCV/branches>)) [Tags](//: # (</IBM/ACE-RISCV/tags>)) [Activity](//: # (</IBM/ACE-RISCV/activity>))

Assured Confidential Execution (ACE) for RISC-V

[Build Status](//: # (</IBM/ACE-RISCV/actions/workflows/build.yml/badge.svg?branch=main>)) [](//: # (</IBM/ACE-RISCV/blob/main/.github/ace.png>))

ACE-RISCV 是一个开源项目,其目标是提供一个具有经过形式验证的安全监控器的可信计算框架。它基于[规范架构](//: # (</dl.acm.org/doi/pdf/10.1145/3623652.3623668>)),并以 RISC-V 为目标,旨在可移植到其他架构。形式验证工作侧重于[安全监控器实现](//: # (</IBM/ACE-RISCV/blob/main/security-monitor>))。我们邀请合作者与我们一起推动可证明可信计算技术的边界。

形式验证: 该项目实现了 RISC-V CoVE 规范的部署模型 3,参考[附录 D](//: # (</github.com/riscv-non-isa/riscv-ap-tee/blob/main/>))。形式规范嵌入在安全监控器的源代码中,证明位于 [verification/](//: # (</IBM/ACE-RISCV/blob/main/verification>)) 文件夹中。请阅读我们的 [paper1](//: # (</arxiv.org/pdf/2505.12995>)) 和 [paper2](//: # (</dl.acm.org/doi/pdf/10.1145/3623652.3623668>)),了解该方法和目标。

后量子密码学 (PQC) 和证明 : ACE 支持本地证明,这是一种用于验证具有有限或没有网络连接的嵌入式系统的机密 VM 的机制。我们已经支持 PQC,特别是我们使用 ML-KEMSHA-384AES-GCM-256 密码学。

硬件要求

我们目前正在构建带有整数 (I)、原子 (A) 和虚拟机监控程序扩展 (H)、物理内存保护 (PMP)、内存管理单元 (MMU)、IOPMP、核心本地中断控制器 (CLINT) 和监控程序 timecmp 扩展 (Sstc) 的 64 位 RISC-V 上。

运行 ACE 的 RISC-V 硬件:

快速开始

按照说明在模拟 RISC-V 环境中的[不受信任的 Linux KVM 虚拟机监控程序](//: # (</IBM/ACE-RISCV/blob/main/hypervisor>))下运行其中一个示例[机密工作负载](//: # (</IBM/ACE-RISCV/blob/main/confidential-vms>))。

要求

框架的完整编译需要很长时间,因为许多工具都是从源代码构建的。我们的工具链目前包括:虚拟机监控程序内核(Linux 内核)、机密客户机内核(Linux 内核)和固件(带有 OpenSBI 固件的 security monitor)。确保在具有至少 4 个内核、4GB RAM 和 50GB 磁盘空间的机器上构建此项目,以获得合理的(约 30 分钟)构建时间。

依赖项

您必须安装特定于您使用的操作系统的构建依赖项,并且必须安装 Rust 工具链。您还可以查看持续集成 (CI) 系统的[可重现构建配置](//: # (</IBM/ACE-RISCV/blob/main/.github/workflows/build.yml>))。

Ubuntu 22.04 的依赖项

sudo apt update
# riscv-gnu-toolchain dependencies:
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
# utilities
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
# check that the below lines are in the ~/.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 虚拟机监控程序](//: # (</IBM/ACE-RISCV/blob/main/hypervisor>)):

make hypervisor

构建负责启动过程的[底层固件](//: # (</IBM/ACE-RISCV/blob/main/security-monitor/opensbi>))。此命令还将构建 [security monitor (SM)](//: # (</IBM/ACE-RISCV/blob/main/security-monitor>)):

make firmware

构建示例[机密工作负载](//: # (</IBM/ACE-RISCV/blob/main/confidential-vms>)):

make confidential_vms

构建 RISC-V 模拟器和简化测试环境运行的实用工具:

make emulator

运行和测试

确保已设置 ACE_DIR 环境变量,并且它指向您的构建位置。 如果未设置此变量,请查看“编译”部分。

echo $ACE_DIR

要在 RISC-V 模拟器上运行测试环境,请运行:

${ACE_DIR}/tools/ace run

您应该会看到启动过程的输出,并提示您登录到虚拟机监控程序:

# login: root, password: passwd

要将示例 Linux 操作系统作为机密 VM 运行(登录名:root,密码:passwd),请执行:

./run_linux_vm_qemu.sh

您应该会看到表明本地证明成功的输出:

#ACE: Reference PCR4=Sha512=0x86774eec200ca6552cbc50211e4b32e7a4ba815c190d56b11ffabc8df1ebb6d9c41d04a64099d860b90c65729a28ded8
#ACE: Attestation succeeded, read 1 secret

您现在可以登录到机密 VM:

# login: root, password: passwd

您可以从机密 VM 内部读取密钥:

# if the root file system has not been mounted, then execute below:
mount /dev/vda /root
cd /root/root/ace_module
insmod ace.ko

您应该会看到密钥:

[ 203.051959] Requesting secret from the security monitor
[ 203.107150] Secret=0xc0ffee

将本地证明与 dm-crypt/LUKS 集成正在进行中。 完成后,您将能够加密您的 rootfs 并通过 TAP 传递解密密钥。 然后,initrd 中的脚本将从 TAP 检索解密密钥并解密 rootfs

License

此存储库根据 Apache 2.0 License 的条款分发,请参阅 [LICENSE](//: # (</IBM/ACE-RISCV/blob/main/LICENSE>))。

这是一个积极的研究项目,不提供任何形式的保证。

Citation

我们关于 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},
  year = 2025,
  howpublished = {\url{https://arxiv.org/pdf/2502.06609}}
}

关于

Assured confidential execution (ACE) 实现了基于 VM 的可信执行环境(TEE),用于嵌入式 RISC-V 系统,重点是经过形式验证且可审计的固件。

Topics

[security](//: # (</topics/security> "Topic: security")) [coq](//: # (</topics/coq> "Topic: coq")) [virtualization](//: # (</topics/virtualization> "Topic: virtualization")) [riscv](//: # (</topics/riscv> "Topic: riscv")) [rust-lang](//: # (</topics/rust-lang> "Topic: rust-lang")) [formal-verification](//: # (</topics/formal-verification> "Topic: formal-verification")) [trusted-computing](//: # (</topics/trusted-computing> "Topic: trusted-computing")) [cove](//: # (</topics/cove> "Topic: cove")) [trusted-execution-environment](//: # (</topics/trusted-execution-environment> "Topic: trusted-execution-environment")) [confidential-computing](//: # (</topics/confidential-computing> "Topic: confidential-computing")) [refinedrust](//: # (</topics/refinedrust> "Topic: refinedrust")) [rocq](//: # (</topics/rocq> "Topic: rocq"))

Resources

[Readme](//: # (<#readme-ov-file>))

License

[Apache-2.0 license](//: # (<#Apache-2.0-1-ov-file>))

[Activity](//: # (</IBM/ACE-RISCV/activity>))

[Custom properties](//: # (</IBM/ACE-RISCV/custom-properties>))

Stars

[93 stars](//: # (</IBM/ACE-RISCV/stargazers>))

Watchers

[4 watching](//: # (</IBM/ACE-RISCV/watchers>))

Forks

[15 forks](//: # (</IBM/ACE-RISCV/forks>))

[Report repository](//: # (</contact/report-content?content_url=https%3A%2F%2Fgithub.com%2FIBM%2FACE-RISCV&report=IBM+%28user%29>))

[Contributors 6](//: # (</IBM/ACE-RISCV/graphs/contributors>))

Languages