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