> ## Documentation Index
> Fetch the complete documentation index at: https://dragonwingdocs.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）](./security-features#qualcomm-tee)。

Qualcomm<sup>®</sup> Linux<sup>®</sup> 运行在 64 位 Arm 8.x 架构上。在此设置中，Arm 核心有两种执行模式：

> * 非安全模式：Linux 在 Arm 核心的此模式下运行。
> * 安全模式：Qualcomm TEE 和可信应用程序在 Arm 核心的此安全模式下运行。

Arm 核心的安全模式构成了 TrustZone 技术的核心。它为安全操作系统提供基于硬件的安全环境，并将安全世界与非安全世界分离。

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

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

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

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

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

|                               **异常级别**                               |                             **软件组件**                             |
| :------------------------------------------------------------------: | :--------------------------------------------------------------: |
|  [非安全 EL0](./security-architecture#linux-user-space-non-secure-el0)  | Linux 用户空间 - Mink、密钥管理、客户端应用程序和 Qualcomm<sup>®</sup> 无线边缘服务（WES） |
|  [非安全 EL1](./security-architecture#linux-kernel-space-nonsecure-el1) |            Linux 内核空间 - QCOMTEE 驱动和加密/伪随机数生成器（PRNG）驱动            |
| [非安全 EL2](./security-architecture#qualcomm-hypervisor-nonsecure-el2) |                  Qualcomm<sup>®</sup> Hypervisor                 |
|     [安全 EL0](./security-architecture#qualcomm-tee-sdk-secure-el0)    |                     Qualcomm TEE SDK 和可信应用程序                     |
|    [安全 EL1](./security-architecture#qualcomm-tee-mink-secure-el1)    |                         Qualcomm TEE mink                        |
|      [安全 EL3](./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 Client API Specification](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-prod/y8h-WRUMxdbs_SSD/System/Security/media-security/k2c-qli-security/key-management-updated.png?fit=max&auto=format&n=y8h-WRUMxdbs_SSD&q=85&s=97b1a3aecd954da40c219600489212f4" alt="内核和用户空间中的密钥管理" width="475" height="653" data-path="System/Security/media-security/k2c-qli-security/key-management-updated.png" />
* 有关密钥管理的更多信息，请参阅 [Qualcomm WES](./security-features#qualcomm-wireless-edge-services) 和[存储加密](./security-features#storage-encryption)。
* 有关各种安全软件组件的更多信息，请参阅[安全功能](./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 或对象 IPC 接口与 QTEE 交互。
>   >   > * TEE 子系统：尽可能重用标准 IOCTL（如 TEE\_IOC\_SHM\_ALLOC），而新的 IOCTL（`like IOCTL_OBJECT_INVOKE`）处理对象特定逻辑。
>   >   > * QCOMTEE 驱动：将参数编组为 Qualcomm TEE 可理解的格式。
>   >   > * 固件（Qualcomm TEE）：接收请求并执行所请求的可信应用程序逻辑。
> * 有关 CM 和加密/PRNG 驱动，请参阅相应的内核文档。

## **Qualcomm Hypervisor（非安全 EL2）**

有关更多信息，请参阅 [Qualcomm Hypervisor](./security-features#qualcomm-hypervisor)。

## **Qualcomm TEE SDK（安全 EL0）**

Qualcomm 提供用于开发和构建可信应用程序的软件开发套件（SDK）。该 SDK 包含编译可信应用程序所需的构建系统、头文件和库依赖项。

* 可信应用程序。请参阅 [Qualcomm TEE → 可信应用程序](./security-features#qualcomm-tee)。

## **Qualcomm TEE mink（安全 EL1）**

在基于 Qualcomm TEE 内核的系统中，软件在一个或多个相互通信的域中运行，例如内核域或用户域。

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

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

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

## **安全监视器（安全 EL3）**

安全监视器是 TrustZone 的一个组件，负责管理安全世界与非安全世界之间的切换。

它运行在 Monitor 模式下，该模式通过在特权 Arm 模式下运行指令来激活。

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

## **后续步骤**

* 要了解安全工具以及如何将其集成到你的工作流程中，请参阅[安全工具](./security-tools)。
* 要探索全部集成保护和功能，请参阅[安全功能](./security-features)。
