14个版本 (稳定版)

新版本 4.0.0 2024年8月8日
3.2.0 2024年7月10日
3.1.1 2024年2月29日
2.0.2 2023年11月4日
0.1.0 2021年2月2日

Unix API 中排名第 57

Download history 2193/week @ 2024-04-22 1397/week @ 2024-04-29 1025/week @ 2024-05-06 1312/week @ 2024-05-13 1552/week @ 2024-05-20 1299/week @ 2024-05-27 1607/week @ 2024-06-03 1751/week @ 2024-06-10 1846/week @ 2024-06-17 1931/week @ 2024-06-24 1853/week @ 2024-07-01 1724/week @ 2024-07-08 1670/week @ 2024-07-15 2107/week @ 2024-07-22 2064/week @ 2024-07-29 1772/week @ 2024-08-05

每月下载量 7,726次
用于 9 个crate(直接使用8个)

Apache-2.0许可证

400KB
9K SLoC

sev crate 提供了 AMD 安全加密虚拟化 (SEV) API 和 SEV 安全嵌套分页固件 (SNP) ABIs 的实现。

SEV API

linux 内核公开了两个技术上的 AMD SEV API

  1. 管理 SEV 平台的 API
  2. 管理 SEV 启用 KVM 虚拟机的 API

这个 crate 实现了这两个 API,并通过灵活且类型安全的高级接口提供给客户端代码。

SNP ABIs

与 SEV 类似,linux 内核还公开了另外两个不同的 AMD SEV-SNP ABIs

  1. 管理 SEV-SNP 平台的 ABI
  2. 管理 SEV-SNP 启用 KVM 虚拟机的 ABI

这些新的 ABIs 只适用于启用了 SEV-SNP 的主机和虚拟机。

这个 crate 实现了 SEV 和 SEV-SNP 管理的 API。

SEV 和 SEV-SNP 启用

默认情况下,SEV 和 SEV-SNP 库都会被编译。因为许多模块同时提供对传统 SEV 和 SEV-SNP 的支持,它们已经被拆分为单独的子模块 sev.rssnp.rs,以隔离特定版本的行为。如果需要,您可以选择在项目的 Cargo.toml 中禁用其功能来排除任何一个子模块。

例如,仅包括 SEV API
sev= {version= "1.2.1",default-features= false,features= ["sev"] }

仅包括 SEV-SNP API
sev= {version= "1.2.1",default-features= false,features= ["snp"] }

平台管理

有关更多信息,请参阅 firmware 模块。

虚拟机管理

有关更多信息,请参阅 launch 模块。

加密验证

为了启用证书链和证明报告的加密验证,必须手动启用opensslcrypto_nossl功能。使用openssl时,使用OpenSSL进行验证。使用crypto_nossl时,不使用OpenSSL进行验证,而是使用纯Rust库(例如p384rsa等)。opensslcrypto_nossl是互斥的,同时启用两者会导致编译器错误。

备注

请注意,Linux内核通过一组ioctl提供对这些API的访问,这些ioctl应在设备节点上调用(具体为/dev/kvm/dev/sev)。因此,这些ioctl构成了sev存储库的基础。由此存储库产生的二进制文件应作为具有与设备节点交互所需权限的进程运行。

使用C API

C语言项目可以利用SEV 启动 ioctl。要安装C API,用户可以使用cargo-c与希望产生的功能一起使用,并安装一个pkg-config文件、一个静态库、一个动态库和一个C头文件

cargocinstall --prefix=/usr --libdir=/usr/lib64

依赖关系

~1–13MB
~114K SLoC