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