概述
TrustZone 是 ARM 架构中提供的硬件级安全技术,通过在处理器中创建隔离的安全环境(Secure World)和普通环境(Normal World),实现对敏感数据和关键操作的保护.
架构
TrustZone 技术通过硬件隔离实现安全世界与非安全世界的分离,确保非安全软件无法直接访问安全资源。在 Arm Cortex-A 架构中,非安全状态与安全状态之间的同步与状态切换是通过安全监控调用(SMC)异常来完成的。SMC 异常由执行 SMC 指令触发,并由安全监控程序(Secure Monitor)处理。TrustZone 的架构如下图所示。
特性
TrustZone 架构具备以下特性:
安全世界与普通世界的通信:
基于共享内存机制.
针对零拷贝数据传输进行了优化.
抢占式微内核架构:
不会阻塞普通世界操作系统.
自定义安全驱动程序:
SiP 或 OEM 可通过 SDK 开发自有的安全驱动程序.
内部 API:
支持主流算法的加密处理.
提供持久化安全存储的数据包裹功能.
内存隔离:
每个进程和 TA(受信应用)都拥有独立的虚拟地址空间,由 MMU 强制执行.
支持电源管理:
在电源管理事件发生时,支持安全内存的保存与恢复.
APIs
GlobalPlatform API 是一套标准化接口,主要用于受信任执行环境(TEE)、操作系统、应用程序及其他组件之间的交互。其核心组件详细说明如下:
TEE 客户端 API
由正常操作系统中的应用程序用于与 TEE 通信,支持安全存储和加密操作等功能
API |
描述 |
用法 |
---|---|---|
TEEC_InitializeContext() |
初始化一个与 TEE 连接的上下文. |
建立与 TEE 的通信 |
TEEC_FinalizeContext() |
释放之前初始化的上下文. |
释放资源 |
TEEC_OpenSession() |
在客户端和受信应用之间打开一个会话. |
开始安全会话 |
TEEC_CloseSession() |
关闭现有的会话. |
结束安全会话 |
TEEC_InvokeCommand() |
在已打开的会话中调用命令. |
调用受信应用中的某个函数 |
TEEC_RegisterSharedMemory() |
将内存块注册为操作系统与 TEE 之间的共享内存. |
在 REE 与 TEE 之间共享数据 |
TEEC_AllocateSharedMemory() |
分配一块共享内存. |
临时数据交换 |
TEEC_ReleaseSharedMemory() |
释放之前分配的共享内存块. |
释放共享内存 |
TEE 内部 API
为 TEE 内部组件设计,例如 TEE 核心模块与安全元件之间的通信
API |
Description |
用法 |
---|---|---|
TA_CreateEntryPoint() |
当 TA 实例首次被创建时调用. |
初始化资源、分配内存、设置初始状态. |
TA_DestroyEntryPoint() |
当 TA 实例被销毁时调用. |
释放资源,进行清理. |
TA_OpenSessionEntryPoint() |
当客户端打开到 TA 的新会话时调用. |
检查客户端身份,准备会话相关的数据. |
TA_CloseSessionEntryPoint() |
当关闭到 TA 的会话时调用. |
释放与会话相关的资源. |
TA_InvokeCommandEntryPoint() |
当 TA 被请求执行某个命令时调用. |
执行来自客户端特定命令 ID 的逻辑 |
TEE 加密 API
提供加密功能,包括对称/非对称加密、消息摘要、随机数生成和安全数据处理.
TEE 安全存储 API
用于在 TEE 内安全地存储数据,确保数据隐私.
TEE 可信用户界面 API
支持在 TEE 内显示用户界面元素(如密码输入框),以增强安全性。 该标准由 GlobalPlatform 组织维护,并支持跨平台的可移植性.