#intel-sgx #sgx-enclave #enclave #sgx #applications #environment #describe

fortanix-sgx-abi

Intel SGX enclaves的接口。这是针对 x86_64-fortanix-unknown-sgx 目标的接口。这是一个小而实用的接口,适合编写较大的enclaves。与其他enclaves接口相比,此接口主要设计用于在enclaves中运行整个应用程序。此crate完全描述了类型级别的接口,包括文档。对于实现者,此crate包含所有类型定义和一个宏,其中包含函数定义。

8个不稳定版本 (3个重大更改)

使用旧的Rust 2015

0.5.0 2022年8月16日
0.4.1 2022年7月29日
0.4.0 2021年12月3日
0.3.3 2019年7月19日
0.1.0-rc12018年11月19日

#154 in 操作系统

Download history 11835/week @ 2024-03-14 11383/week @ 2024-03-21 10790/week @ 2024-03-28 11256/week @ 2024-04-04 11323/week @ 2024-04-11 10916/week @ 2024-04-18 9529/week @ 2024-04-25 9037/week @ 2024-05-02 8699/week @ 2024-05-09 9488/week @ 2024-05-16 10813/week @ 2024-05-23 9250/week @ 2024-05-30 8933/week @ 2024-06-06 9704/week @ 2024-06-13 9604/week @ 2024-06-20 7581/week @ 2024-06-27

37,225 每月下载量
11 个crate中使用 (3 个直接使用)

MPL-2.0 许可证

47KB
231

Fortanix SGX ABI (编译器目标 x86_64-fortanix-unknown-sgx) 是Intel SGX enclaves的接口。它是一个小而实用的接口,适合编写较大的enclaves。与其他enclaves接口相比,此接口主要设计用于在enclaves中运行整个应用程序。

Fortanix SGX ABI规范包括两个部分

  1. 调用约定(见FORTANIX-SGX-ABI.md)
  2. 执行环境和 usercalls(本文档)

虽然调用约定描述了信息如何传递到enclaves以及从enclaves返回,但本文档为这些值赋予了意义。

设计执行环境和usercalls时考虑以下目标

  1. 与大多数Rust代码兼容:不链接其他C库且不使用文件(见第5点)的Rust代码应该能够直接编译。
  2. 为SGX设计:SGX环境是独特的,与其他应用程序环境不兼容。本文档中指定的原语旨在与SGX很好地协同工作,而不是与其他环境中的原语相似或兼容。
  3. 为网络服务设计:SGX最有用的用例是在不可信环境中远程运行应用程序,例如云。因此,主要关注支持这些情况下所需的功能。
  4. 没有文件系统: 加密的文件系统很难处理。特别是在SGX中,一致性和新鲜性是主要关注点。在这个初始版本中,没有文件系统支持,这对于大多数需要使用数据库服务来保持其状态的网络安全服务来说是可以接受的。未来可能会添加支持。
  5. 非POSIX: POSIX API非常庞大,包含了许多SGX指令集不支持直接使用的元素,例如fork和mmap。本规范明确指出,不支持POSIX API的所有元素。
  6. 设计为可移植: Enclaves不直接与操作系统交互,因此在不同的操作系统上运行时,无需重新编译enclaves。本规范不要求操作系统提供任何特定的原语或行为。

与常规操作系统类似,有两种类型的enclaves:可执行类型和类型。这两种不同类型的主要区别在于enclaves的进入方式。一旦进入enclaves TCS,不同类型的操作几乎相同。关于两种不同类型、TCS和enclaves进入的更多信息,请参考entry模块。

一旦进入enclaves TCS,它可以执行在调用约定中描述的同步用户调用。TCS在执行用户调用和从用户调用返回之间保持其执行状态。只有当TCS通过非用户调用退出或通过exit用户调用退出时,TCS状态才会被销毁。这在下图中表示。

Enclave execution lifecycle

Enclaves还可以执行异步用户调用。这将在async模块中详细说明。大多数用户调用可以同步或异步提交。

依赖关系

~205KB