Show HN: 用于高可靠性 RISC-V 嵌入式系统的可信计算
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
[](//: # (</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-KEM
、SHA-384
和 AES-GCM-256
密码学。
硬件要求
我们目前正在构建带有整数 (I)、原子 (A) 和虚拟机监控程序扩展 (H)、物理内存保护 (PMP)、内存管理单元 (MMU)、IOPMP、核心本地中断控制器 (CLINT) 和监控程序 timecmp
扩展 (Sstc) 的 64 位 RISC-V
上。
运行 ACE 的 RISC-V 硬件:
SiFive P550
评估板,[请参阅说明](//: # (</IBM/ACE-RISCV/blob/main/security-monitor/platform/p550>))。
快速开始
按照说明在模拟 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>))
- [
](//: # (</github.com/wojciechozga>))
- [
](//: # (</github.com/lgaeher>))
- [
](//: # (</github.com/gdhh>))
- [
](//: # (</github.com/shinnar>))
- [
](//: # (</github.com/apps/renovate>))
- [
](//: # (</github.com/ibm-open-source-bot>))
Languages
- [Rust 83.2%](//: # (</IBM/ACE-RISCV/search?l=rust>))
- [Coq 6.9%](//: # (</IBM/ACE-RISCV/search?l=coq>))
- [Makefile 3.8%](//: # (</IBM/ACE-RISCV/search?l=makefile>))
- [Shell 2.3%](//: # (</IBM/ACE-RISCV/search?l=shell>))
- [C 2.0%](//: # (</IBM/ACE-RISCV/search?l=c>))
- [Assembly 1.6%](//: # (</IBM/ACE-RISCV/search?l=assembly>))
- Other 0.2%