TS-TEE(可信服务项目)

此驱动程序提供对可信服务实现的的安全服务的访问。

可信服务 [1] 是 TrustedFirmware.org 的一个项目,它为在 FF-A [2] S-EL0 安全分区中开发和部署设备信任根服务提供了一个框架。该项目托管了 Arm A-profile 设备的 Arm 平台安全架构 [3] 的参考实现。

FF-A 安全分区 (SP) 可以通过 FF-A 驱动程序 [4] 访问,该驱动程序为该驱动程序提供底层通信。除此之外,还使用了可信服务 RPC 协议 [5]。为了从用户空间使用该驱动程序,[6] 处提供了参考实现,它是名为 libts [7] 的可信服务客户端库的一部分。

所有可信服务 (TS) SP 都具有相同的 FF-A UUID;它标识 TS RPC 协议。一个 TS SP 可以托管一个或多个服务(例如 PSA Crypto、PSA ITS 等)。服务由其服务 UUID 标识;同一种类型的服务不能在同一个 SP 中出现两次。在 SP 启动期间,SP 中的每个服务都会被分配一个“接口 ID”。这只是一个简短的 ID,用于简化消息寻址。

通用的 TEE 设计是一次性与可信操作系统共享内存,然后可以重用该内存以与在可信操作系统上运行的多个应用程序进行通信。但是,对于 FF-A,内存共享在端点级别上工作,即内存与特定的 SP 共享。用户空间必须能够根据其端点 ID 单独与每个 SP 共享内存;因此,为每个发现的 TS SP 注册一个单独的 TEE 设备。打开 SP 对应于打开 TEE 设备并创建 TEE 上下文。一个 TS SP 托管一个或多个服务。打开服务对应于在给定的 tee_context 中打开一个会话。

具有可信服务组件的系统的概述

User space                  Kernel space                   Secure world
~~~~~~~~~~                  ~~~~~~~~~~~~                   ~~~~~~~~~~~~
+--------+                                               +-------------+
| Client |                                               | Trusted     |
+--------+                                               | Services SP |
   /\                                                    +-------------+
   ||                                                          /\
   ||                                                          ||
   ||                                                          ||
   \/                                                          \/
+-------+                +----------+--------+           +-------------+
| libts |                |  TEE     | TS-TEE |           |  FF-A SPMC  |
|       |                |  subsys  | driver |           |   + SPMD    |
+-------+----------------+----+-----+--------+-----------+-------------+
|      Generic TEE API        |     |  FF-A  |     TS RPC protocol     |
|      IOCTL (TEE_IOC_*)      |     | driver |        over FF-A        |
+-----------------------------+     +--------+-------------------------+

参考

[1] https://www.trustedfirmware.org/projects/trusted-services/

[2] https://developer.arm.com/documentation/den0077/

[3] https://www.arm.com/architecture/security-features/platform-security

[4] drivers/firmware/arm_ffa/

[5] https://trusted-services.readthedocs.io/en/v1.0.0/developer/service-access-protocols.html#abi

[6] https://git.trustedfirmware.org/TS/trusted-services.git/tree/components/rpc/ts_rpc/caller/linux/ts_rpc_caller_linux.c?h=v1.0.0

[7] https://git.trustedfirmware.org/TS/trusted-services.git/tree/deployments/libts/arm-linux/CMakeLists.txt?h=v1.0.0