fTPM over OP-TEE
fTMP over OP-TEE 仅在 NVIDIA® BlueField®-3 DPU 及更高版本上受支持,且仅限于主机操作系统 Ubuntu 22.04 或 Oracle Linux。
可信计算组织 (TCG) 负责管理可信平台模块 (TPM) 的规范。在许多系统中,TPM 提供完整性测量、健康检查和身份验证服务。
TPM 的属性
平台中对批量(对称)加密的支持
高质量随机数
加密服务
用于少量数据的受保护持久性存储、粘性位、单调计数器和可扩展寄存器
用于无限量密钥和数据的受保护伪持久性存储
访问受保护密钥和数据的广泛授权方法选择
平台身份
对平台隐私的支持
签名和验证数字签名
认证密钥和数据的属性
审计密钥和数据的使用情况
借助 TPM 2.0,TCG 创建了一个库规范,描述了服务器、笔记本电脑或嵌入式系统中可能实施且可能需要的所有命令或功能。每个平台都可以选择所需的功能以及所需的安全级别或保证级别。这种灵活性使得最新的 TPM 可以应用于许多嵌入式应用。
固件 TPM (fTPM) 在受保护的软件中实现。代码在主 CPU 上运行,因此不需要单独的芯片。虽然像任何其他程序一样运行,但代码位于一个称为可信执行环境 (TEE) 的受保护执行环境中,该环境与 CPU 上运行的其余程序是分开的。通过这样做,秘密(例如,TPM 可能需要的私钥,但不应被其他人访问)可以保存在 TEE 中,从而创建一个更安全的环境。
fTPM 提供类似于基于芯片的 TPM 的功能,但不需要额外的硬件。它符合 TPM 2.0 规范 的官方 TCG 参考实现。此实现的源代码位于此处。
fTPM 的特性
使用隔离硬件环境的模拟 TPM
在开源可信执行环境 (OP-TEE) 中执行
fTPM 可信应用程序 (TA) 是 OP-TEE 二进制文件的一部分。这允许在启动时进行早期访问,并且仅在安全 DRAM 中运行。
信息目前,唯一支持的 TA 是 fTPM。
fTPM 不是等待唤醒的任务。它仅在用户空间将 TPM 原语转发给它时才执行。通过 TEE OS 保证了屏蔽执行,并且当通过 TEE Dispatcher 调用时,它会运行完成。
fTPM TA 是 BlueField-3 当前唯一支持的 TA。OP-TEE 加载的任何 TA 都必须签名(签名在外部完成),然后由 OP-TEE 验证才能加载和执行。

重放保护内存块 (RPMB) 提供了一种系统以经过身份验证和重放保护的方式将数据存储到特定内存区域的方法,使其仅在成功进行身份验证的读/写访问后才可读写。RPMB 是 eMMC 上可用的专用分区,这使得可以在完整性和真实性支持下存储和检索数据。对 RPMB 的签名访问首先需要将身份验证密钥信息编程到 eMMC 内存(共享密钥)。RPMB 身份验证密钥在制造时被编程到 BlueField 中。
RPMB 具有 4MB 分区安全存储空间,用于 BlueField-3。
OP-TEE 中没有 eMMC 控制器驱动程序。所有设备操作都必须通过正常世界通过 TEE-supplicant 守护程序进行,该守护程序依赖于 Linux 内核的 ioctl 接口来访问设备。对 RPMB 的所有写入都是原子性的、经过身份验证的和加密的。RPMB 分区以经过身份验证、重放保护的方式存储数据,使其成为 fTPM 存储和保护数据的完美补充。

在 UEFI 菜单中启用 OP-TEE
在 BlueField 启动时按 ESC 进入 UEFI。
导航至设备管理器 > 系统配置。
选中“启用 OP-TEE”。
保存更改并重置/重启。
重启后,OP-TEE 已启用。
OP-TEE 本质上处于休眠状态(没有 OS 调度程序),并且对外部输入做出反应。
用户可以在 BlueField-3 启动期间看到 OP-TEE 版本

如果启用了 fTPM over OP-TEE,则应显示以下指示器
检查 “dmesg” 以查看 OP-TEE 驱动程序是否正在初始化
root@localhost ~]
# dmesg | grep tee
[ 5.646578] optee: probingfor
conduit method. [ 5.653282] optee: revision 3.10 (450b24ac) [ 5.653991] optee: initialized driver验证是否已加载(正在运行)以下内核模块
[root@localhost ~]
# lsmod | grep tee
tpm_ftpm_tee 16384 0 optee 49152 1tee
49152 3 optee,tpm_ftpm_tee验证是否已创建/可用正确的设备(总共 4 个)
[root@localhost ~]
# ls -l /dev/tee*
crw------- 1 root root 234, 0 Sep 8 18:24 /dev/tee0 crw------- 1 root root 234, 16 Sep 8 18:24 /dev/teepriv0 [root@localhost ~]# ls -l /dev/tpm*
crw-rw---- 1 tss root 10, 224 Sep 8 18:24 /dev/tpm0 crw-rw---- 1 tss tss 252, 65536 Sep 8 18:24 /dev/tpmrm0验证所需的进程是否正在运行(总共 3 个)
[root@localhost ~]
# ps axu | grep tee
root 707 0.0 0.0 76208 1372 ? Ssl 14:42 0:00 /usr/sbin/tee-supplicant root 715 0.0 0.0 0 0 ? I< 14:42 0:00 [optee_bus_scan] [root@localhost ~]# ps axu | grep tpm
root 124 0.0 0.0 0 0 ? I< 18:24 0:00 [tpm_dev_wq]