> ## Documentation Index
> Fetch the complete documentation index at: https://dragonwingdocs-staging.qualcomm.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 安全架构

Arm<sup>®</sup> v8 增强了 TrustZone 技术,将安全性纳入其架构。此技术提供了一个安全框架,使设备能够在软件和硬件层面处理安全威胁。

<Note>
  架构信息仅供理解之用。您无需执行任何配置或自定义。
</Note>

Arm 的硬件解决方案允许在安全执行环境中设计和部署软件、应用程序或服务。此环境是一个独立的执行单元,确保与非安全执行环境的硬件隔离。有关更多信息,请参阅 [Qualcomm® 可信执行环境 (Qualcomm TEE)](/zh/System/Security/security-features#qualcomm-tee)。

Qualcomm<sup>®</sup> Linux<sup>®</sup> 在 64 位 Arm 8.x 架构上运行。在这种设置下,Arm 核心有两种执行模式:

> * 非安全模式:Linux 在 Arm 核心的这种模式下运行。
> * 安全模式:Qualcomm TEE 和受信任的应用程序在 Arm 核心的这种安全模式下运行。

Arm 核心的安全模式构成了 TrustZone 技术的本质。它为安全 OS 提供了基于硬件的安全环境,并将安全世界与非安全世界分开。

下图显示了 Qualcomm Linux 安全软件架构。它显示了组件或模块在丰富(用户空间和内核空间)和可信执行环境中的分布。

**图:Qualcomm Linux 安全软件组件**

<img src="https://mintcdn.com/qualcomm-staging/uWQLnBcS9sxlZhgB/System/Security/media-security/k2c-qli-security/security-software-component-updated.png?fit=max&auto=format&n=uWQLnBcS9sxlZhgB&q=85&s=b5fd060c83695e166b0fa459891d3768" alt="Qualcomm Linux 安全软件组件" width="1436" height="846" data-path="System/Security/media-security/k2c-qli-security/security-software-component-updated.png" />

Qualcomm Linux 安全软件具有以下关键组件,每个组件在不同的执行环境中运行。

**表:执行环境和关键组件**

|                                        **异常级别**                                        |                              **软件组件**                             |
| :------------------------------------------------------------------------------------: | :---------------------------------------------------------------: |
|  [非安全 EL0](/zh/System/Security/security-architecture#linux-user-space-non-secure-el0)  | Linux 用户空间 - Mink、密钥管理、客户端应用程序和 Qualcomm<sup>®</sup> 无线边缘服务 (WES) |
| [非安全 EL1](/zh/System/Security/security-architecture#linux-kernel-space-non‑secure-el1) |          Linux 内核空间 - QCOMTEE 驱动程序和加密/伪随机数生成器 (PRNG) 驱动程序         |
|     [安全 EL0](/zh/System/Security/security-architecture#qualcomm-tee-sdk-secure-el0)    |                     Qualcomm TEE SDK 和受信任的应用程序                    |
|    [安全 EL1](/zh/System/Security/security-architecture#qualcomm-tee-mink-secure-el1)    |                         Qualcomm TEE mink                         |
|      [安全 EL3](/zh/System/Security/security-architecture#secure-monitor-secure-el3)     |                               安全监视器                               |

## **Linux 用户空间(非安全 EL0)**

此用户空间包括 Linux 用户空间中存在的主要安全模块/接口,根据 [Arm 异常级别](https://developer.arm.com/documentation/102412/0103/Privilege-and-Exception-levels/Exception-levels),它在非安全 EL0 中运行。

> * Mink—Linux(Mink 平台/系统监听器服务/传输机制)
>   > * 通过受信任的应用程序提供服务和传输机制以使用 Qualcomm TEE 功能。
>   > * 形成系统监听器服务(QTEE supplicant),旨在扩展 Qualcomm TEE 功能。
>   > * 通过 `libminkteec` 实现全局平台 TEE 客户端 API,以运行基于全局平台的受信任应用程序。有关更多信息,请参阅 [TEE 客户端 API 规范](https://globalplatform.org/specs-library/tee-client-api-specification/)。
>   > * 在丰富执行环境(Linux 用户空间)中实现与在 Qualcomm TEE 中运行的受信任应用程序交互的客户端应用程序。各种客户端应用程序包括:
>   >   > * 使用 mink API 开发的客户端应用程序
>   >   > * 基于全局平台的客户端应用程序
>   >   > * 使用基于全局平台的 TEE 客户端 API 规范开发的客户端应用程序

* 密钥管理
  > * 加密客户端库 (`libckqteec`) 实现了对在 QTEE 中运行的 PKCS#11 受信任应用程序的 PKCS#11 接口。在 Linux 上运行的用户空间应用程序可以链接到此库,通过 PKCS#11 标准接口从 TEE 请求加密操作。
  > * `libckqteec` 库定义了应用程序和加密设备之间的标准 PKCS#11 接口,使应用程序能够将加密设备视为令牌,并执行这些令牌实现的加密功能。
  > * PKCS#11 接口提供了一系列加密服务,用于加密、解密、签名生成、签名验证和永久密钥存储。
  >
  > 下图显示了内核和用户空间中的密钥管理。
  >
  > > **图:内核和用户空间中的密钥管理**
  >
  > <img src="https://mintcdn.com/qualcomm-staging/uWQLnBcS9sxlZhgB/System/Security/media-security/k2c-qli-security/key-management-updated.png?fit=max&auto=format&n=uWQLnBcS9sxlZhgB&q=85&s=043f67a1eb58d3ba08533cc5a0bb63cb" alt="内核和用户空间中的密钥管理" width="475" height="653" data-path="System/Security/media-security/k2c-qli-security/key-management-updated.png" />
* 有关密钥管理的更多信息,请参阅 [Qualcomm WES](/zh/System/Security/security-features#qualcomm-wireless-edge-services) 和 [存储加密](/zh/System/Security/security-features#storage-encryption)。
* 有关各种安全软件组件的更多信息,请参阅 [安全功能](/zh/System/Security/security-features)。

## **Linux 内核空间(非安全 EL1)**

以下是特定于安全的内核驱动程序:

> * QCOMTEE 驱动程序:
>   > * 该驱动程序集成到标准 Linux TEE 子系统中,但它扩展了子系统的功能以支持 Qualcomm 的独特要求。
>   > * 放置位置:驱动程序源代码位于 `drivers/tee/qcomtee/`。
>   > * 驱动程序 ID:在 TEE 子系统内,QCOMTEE 注册了唯一 ID(通常为 3),使其与 OP-TEE (1) 和 AMD-TEE (2) 区分开来。
>   > * 对象 IPC 集成:由于标准 TEE 子系统原生不支持基于对象的 IPC,因此 QCOMTEE 驱动程序在其之上分层对象 IPC。它引入了可以使用特定 IOCTL 调用的通用对象抽象。
>   > * 通信流程:
>   >   > * 用户空间:应用程序使用 Mink TEEC 或 Mink Adaptor 库,通过 GlobalPlatform 或 Object-IPC 接口与 QTEE 交互。
>   >   > * TEE 子系统:尽可能重用标准 IOCTL(如 TEE\_IOC\_SHM\_ALLOC),而新的 IOCTL(`like IOCTL_OBJECT_INVOKE`)则处理特定于对象的逻辑。
>   >   > * QCOMTEE 驱动程序:将参数编组为 Qualcomm TEE 理解的格式。
>   >   > * 固件 (Qualcomm TEE):接收请求并执行请求的受信任应用程序逻辑。
> * 有关 CM 和加密/PRNG 驱动程序,请参阅相应的内核文档。

## **Qualcomm TEE SDK(安全 EL0)**

Qualcomm 提供软件开发套件 (SDK) 用于开发和构建受信任的应用程序。此 SDK 包括编译受信任应用程序所需的构建系统、头文件和库依赖项。

* 受信任的应用程序。请参阅 [Qualcomm TEE → 受信任的应用程序](/zh/System/Security/security-features#qualcomm-tee)。

## **Qualcomm TEE mink(安全 EL1)**

在基于 Qualcomm TEE 内核的系统中,软件在一个或多个通信域(如内核域或用户域)中运行。

这些域在访问内存和其他系统资源的能力方面有所不同。

> * 其中一个域称为内核域,在安全 EL1 上执行,并对系统资源具有完全控制权。
> * 其他域称为用户域或进程,在安全 EL0 上运行,对系统资源的访问受限。基于 Object-IPC 的 Mink 协议允许对授予进程的访问进行精确控制。

Mink 是基于对象能力模型的、基于 Object-IPC 的同步消息传递协议,旨在促进不同域之间的安全通信。它使一个域中的代码能够通过将不可伪造的对象引用作为输入或输出参数传递来调用另一个域中的对象。

## **安全监视器(安全 EL3)**

安全监视器是 TrustZone 的一个组件,负责管理安全世界和非安全世界之间的转换。

它在监视器模式下运行,该模式通过从特权 Arm 模式运行指令激活。

安全监视器确保在非安全和安全世界之间切换时正确保存和恢复上下文。此外,它还处理安全中断的初始处理。

## **后续步骤**

* 要了解安全工具及如何将其集成到工作流程中,请参阅 [安全工具](/zh/System/Security/security-tools)。
* 要探索集成保护和功能的完整范围,请参阅 [安全功能](/zh/System/Security/security-features)。
