2 个版本
0.0.1 | 2019 年 4 月 17 日 |
---|---|
0.0.0 | 2019 年 4 月 17 日 |
#4 in #trust-zone
每月 42 次下载
用于 optee-teec
8KB
145 代码行数(不包括注释)
Teaclave TrustZone SDK
Teaclave TrustZone SDK (Rust OP-TEE TrustZone SDK) 提供了在 Rust 中构建安全 TrustZone 应用程序的能力。该 SDK 基于 OP-TEE 项目,遵循 GlobalPlatform TEE 规范 并提供易用的 API。此外,它还支持使用 Rust 的标准库 (std) 和许多第三方库(例如 crates)编写 TrustZone 应用程序。Teaclave TrustZone SDK 是 Apache Teaclave (incubating) 的一个子项目。
目录
使用 QEMUv8 的 OP-TEE 仓库快速入门
Teaclave TrustZone SDK 自 OP-TEE 发布 3.15.0(2021 年 10 月 18 日)以来已集成到 OP-TEE 仓库中。aarch64 Rust 示例已构建并安装到 QEMUv8 的默认文件系统中。按照 此文档 设置 OP-TEE 仓库并尝试 Rust 示例!
入门指南
环境
要开始使用 Teaclave TrustZone SDK,您可以选择 用于 Armv8-A 的 QEMU(QEMUv8)或 其他平台(OP-TEE 支持的平台)作为您的开发环境。
使用 QEMUv8 开发
构建 Rust 应用程序时需要 OP-TEE 库,因此您应首先完成 使用 QEMUv8 的 OP-TEE 仓库快速入门 部分。然后,在 Teaclave TrustZone SDK 中初始化构建环境,构建 Rust 应用程序并将它们复制到目标文件系统中。
Teaclave TrustZone SDK位于[YOUR_OPTEE_DIR]/optee_rust/
。OP-TEE仓库中的Teaclave TrustZone SDK锁定在发行版本。或者,您可以使用以下命令尝试使用开发版本:git pull
cd [YOUR_OPTEE_DIR]/optee_rust/
git pull github master
在其他平台上进行开发
如果您正在为其他平台构建可信应用程序(OP-TEE支持的平台)。QEMU和OP-TEE仓库中的文件系统不是必需的。您可以按照以下步骤克隆项目并从完整的OP-TEE仓库独立构建应用程序。在这种情况下,必要的OP-TEE库在设置过程中初始化。
- 所有先决条件的完整列表可以在这里找到:OP-TEE先决条件。
# install dependencies
sudo apt-get install android-tools-adb android-tools-fastboot autoconf \
automake bc bison build-essential ccache cscope curl device-tree-compiler \
expect flex ftp-upload gdisk iasl libattr1-dev libc6:i386 libcap-dev \
libfdt-dev libftdi-dev libglib2.0-dev libhidapi-dev libncurses5-dev \
libpixman-1-dev libssl-dev libstdc++6:i386 libtool libz1:i386 make \
mtools netcat python-crypto python3-crypto python-pyelftools \
python3-pycryptodome python3-pyelftools python-serial python3-serial \
rsync unzip uuid-dev xdg-utils xterm xz-utils zlib1g-dev
或者,您可以使用我们的Dockerfile构建的docker容器。
- 在安装依赖项或构建Docker镜像之后,从官方GitHub仓库获取源代码
# clone the project
git clone https://github.com/apache/incubator-teaclave-trustzone-sdk.git
cd incubator-teaclave-trustzone-sdk
构建和安装
要构建项目,需要Rust环境和几个相关的子模块。
- 默认情况下,
OPTEE_DIR
是incubator-teaclave-trustzone-sdk/optee/
。OP-TEE子模块(optee_os
、optee_client
和build
)将在setup.sh
中自动初始化。
如果您正在QEMUv8内部构建或者已经将OP-TEE仓库克隆到某处,您可以设置OP-TEE根目录
export OPTEE_DIR=[YOUR_OPTEE_DIR]
注意:您的OPTEE根目录应包含build/
、optee_os/
和optee_client/
作为子目录。
- 按照以下方式运行脚本以安装Rust环境和初始化子模块
./setup.sh
- 在构建示例之前,应使用以下命令正确设置环境
source environment
注意:默认情况下,目标平台是aarch64
。如果您想为arm
目标构建,您可以在source environment
命令之前设置ARCH
export ARCH=arm
source environment
- 在构建rust示例和应用之前,您需要使用以下命令构建OP-TEE库
make optee
- 运行此命令以构建所有Rust示例
make examples
或者构建您自己的CA和TA
make -C examples/[YOUR_APPLICATION]
此外,您可以将所有示例CA和TA收集到/incubator-teaclave-trustzone-sdk/out
make examples-install
运行 Rust 应用程序
考虑到已经选择了平台(QEMUv8或其他),运行Rust应用程序的方式不同。
在 QEMUv8 上运行 Rust 应用程序
- 需要共享文件夹来与QEMU虚拟系统共享CA和TA。在OP-TEE中重新编译QEMU以启用QEMU VirtFS
(cd $OPTEE_DIR/build && make QEMU_VIRTFS_ENABLE=y qemu)
- 将所有Rust示例或您的应用程序复制到共享文件夹
mkdir shared_folder
cd [YOUR_OPTEE_DIR]/optee_rust/ && make examples-install)
cp -r [YOUR_OPTEE_DIR]/optee_rust/out/* shared_folder/
- 运行QEMU
(cd $OPTEE_DIR/build && make run-only QEMU_VIRTFS_ENABLE=y
QEMU_VIRTFS_HOST_DIR=$(pwd)/shared_folder)
- QEMU启动后,您需要在QEMU虚拟系统中挂载共享文件夹(用户名:root),以便从QEMU访问编译后的CA/TA。在QEMU虚拟终端中运行以下命令
mkdir shared && mount -t 9p -o trans=virtio host shared
- 然后按照此文档描述的方式运行CA和TA。
在其他平台上运行 Rust 应用程序
将应用程序复制到您的平台并运行。
文档
发布
关于设计和实现的更多细节可以在我们发表于ACSAC 2020的论文中找到:[RusTEE:开发内存安全的ARM TrustZone应用程序](https://csis.gmu.edu/ksun/publications/ACSAC20_RusTEE_2020.pdf)。以下是BiBTeX记录供您参考。
@inproceedings{wan20rustee,
author = "Shengye Wan and Mingshen Sun and Kun Sun and Ning Zhang and Xu
He",
title = "{RusTEE: Developing Memory-Safe ARM TrustZone Applications}",
booktitle = "Proceedings of the 36th Annual Computer Security Applications
Conference",
series = "ACSAC '20",
year = "2020",
month = "12",
}
贡献
Teaclave采用Apache方式开源,我们旨在创建一个由社区维护和拥有的项目。欢迎各种形式的贡献。感谢我们的贡献者。
社区
- 加入我们的邮件列表。
- 关注我们的@ApacheTeaclave。
- 更多信息请见此处。
依赖关系
~42KB