概述

TrustZone 是 ARM 架构中提供的硬件级安全技术,通过在处理器中创建隔离的安全环境(Secure World)和普通环境(Normal World),实现对敏感数据和关键操作的保护.

架构

TrustZone 技术通过硬件隔离实现安全世界与非安全世界的分离,确保非安全软件无法直接访问安全资源。在 Arm Cortex-A 架构中,非安全状态与安全状态之间的同步与状态切换是通过安全监控调用(SMC)异常来完成的。SMC 异常由执行 SMC 指令触发,并由安全监控程序(Secure Monitor)处理。TrustZone 的架构如下图所示。

../../rst_secure/3_nda_spe_linux/figures/trustzone_software_arch.svg

特性

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 组织维护,并支持跨平台的可移植性.