2 个版本

0.0.1 2019 年 4 月 17 日
0.0.0 2019 年 4 月 17 日

#4 in #trust-zone

每月 42 次下载
用于 optee-teec

Apache-2.0

8KB
145 代码行数(不包括注释)

Teaclave TrustZone SDK

License Release Homepage

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库在设置过程中初始化。

  1. 所有先决条件的完整列表可以在这里找到: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容器。

  1. 在安装依赖项或构建Docker镜像之后,从官方GitHub仓库获取源代码
# clone the project
git clone https://github.com/apache/incubator-teaclave-trustzone-sdk.git
cd incubator-teaclave-trustzone-sdk

构建和安装

要构建项目,需要Rust环境和几个相关的子模块。

  1. 默认情况下,OPTEE_DIRincubator-teaclave-trustzone-sdk/optee/。OP-TEE子模块(optee_osoptee_clientbuild)将在setup.sh中自动初始化。

如果您正在QEMUv8内部构建或者已经将OP-TEE仓库克隆到某处,您可以设置OP-TEE根目录

export OPTEE_DIR=[YOUR_OPTEE_DIR]

注意:您的OPTEE根目录应包含build/optee_os/optee_client/作为子目录。

  1. 按照以下方式运行脚本以安装Rust环境和初始化子模块
./setup.sh
  1. 在构建示例之前,应使用以下命令正确设置环境
source environment

注意:默认情况下,目标平台是aarch64。如果您想为arm目标构建,您可以在source environment命令之前设置ARCH

export ARCH=arm
source environment
  1. 在构建rust示例和应用之前,您需要使用以下命令构建OP-TEE库
make optee
  1. 运行此命令以构建所有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 应用程序

  1. 需要共享文件夹来与QEMU虚拟系统共享CA和TA。在OP-TEE中重新编译QEMU以启用QEMU VirtFS
(cd $OPTEE_DIR/build && make QEMU_VIRTFS_ENABLE=y qemu)
  1. 将所有Rust示例或您的应用程序复制到共享文件夹
mkdir shared_folder
cd [YOUR_OPTEE_DIR]/optee_rust/ && make examples-install)
cp -r [YOUR_OPTEE_DIR]/optee_rust/out/* shared_folder/
  1. 运行QEMU
(cd $OPTEE_DIR/build && make run-only QEMU_VIRTFS_ENABLE=y
QEMU_VIRTFS_HOST_DIR=$(pwd)/shared_folder)
  1. QEMU启动后,您需要在QEMU虚拟系统中挂载共享文件夹(用户名:root),以便从QEMU访问编译后的CA/TA。在QEMU虚拟终端中运行以下命令
mkdir shared && mount -t 9p -o trans=virtio host shared
  1. 然后按照此文档描述的方式运行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方式开源,我们旨在创建一个由社区维护和拥有的项目。欢迎各种形式的贡献。感谢我们的贡献者

社区

依赖关系

~42KB