《learn_the_architecture_-_trustzone_for_aarch64_102418_0101_03_en》学习笔记

1.TrustZone是Arm A-profile架构中安全架构的名称。TrustZone首次在Armv6K中引入,Armv7-A和Armv8-A也支持。TrustZone提供两个执行环境,它们之间具有系统范围的硬件强制隔离。在Arm架构中,有两种安全状态:安全和非安全。在EL0、EL1和EL2处,处理器可以处于安全状态或非安全状态,这由SCR_EL3.NS位控制(该位为0则位于安全状态,为1则位于非安全状态)。无论SCR_EL3.NS位的值如何,EL3始终处于安全状态。

2.如果PE 处于NS(Non-secure)状态并且想要移至S(secure)状态,其必须通过EL3,包括修改SCR_EL3.NS位,保存和恢复相关寄存器:

Trusted Firmware提供了安全监控器的参考实现,部分寄存器根据处理器的安全状态有两个副本,分别用于安全状态(S)和非安全状态(NS)。处理器会根据当前状态自动选择相应的寄存器副本,例如用于中断抢占控制的ICC_BPR1_EL1寄存器,是否拥有两个副本在处理器的架构参考手册中会明确指出。(S)和(NS)用于区分不同安全状态下的寄存器版本,如ICC_BPR1_EL1 (S)和ICC_BPR1_EL1 (NS)。

3.在ARM架构中,存在针对安全状态(Secure)和非安全状态(Non-secure)不同的地址转换机制(translation regimes),例如S.EL1:0x8000 和 NS.EL1:0x8000 是两个不同且独立的虚拟地址。在非安全状态下,虚拟地址始终转换为非安全物理地址。这意味着处于非安全状态的软件只能看到非安全资源,而永远看不到安全资源。如下所示:

在安全状态下,软件可以访问安全和非安全物理地址空间。转换表条目中的NS位控制虚拟内存块或页转换到哪个物理地址空间,如下图所示:

与虚拟地址一样,通常使用前缀来标识所引用的地址空间。对于物理地址,这些前缀是NP:和SP:,如NP: 0x8000表示非安全物理地址空间中的地址0x8000,SP:0x8000表示安全物理地址空间中的地址0x8000。安全和非安全是不同的地址空间,而不仅仅是可读或可写等属性,即NP:0x8000和SP:0x8000是不同的内存位置,并且被处理器视为不同的内存位置。

4.当软件在EL1或EL2发出TLB失效指令(TLBI)时,操作会针对当前的安全状态。例如,如果在安全状态下发出TLBI ALLE1指令(这个指令使所有EL1级别的TLB条目失效,因为是安全状态下发出,则只会使S状态条目失效),这将使与S.EL0/1翻译机制相关的所有缓存条目失效,S代表安全状态。EL3始终处于安全状态,无论SCR_EL3.NS位的状态如何。虽然在EL0/1/2特权级中,SCR_EL3.NS位控制处理器处于安全状态还是非安全状态,但在EL3中,这个位控制的是TLB失效操作针对的是哪个安全状态的缓存条目。因此,当在EL3执行TLBI操作时,SCR_EL3.NS位决定操作作用于安全状态的缓存条目还是非安全状态的缓存条目。

5.SMC指令即Secure Monitor Call,它是ARM架构中用于进行安全监控调用的指令,主要用于在非安全世界和安全世界之间进行通信。EL0无法特权下无法使用SMC指令。

6.Armv7-A中首次引入虚拟化时,仅在非安全状态下添加虚拟化。在Armv8.3之前,Armv8也是如此,如下图所示:

Armv8.4-A开始在安全状态下引入对EL2的支持,支持S.EL2时,可以通过SCR_EL3.EEL2 位来启用或禁用S.EL2。支持S.EL2的架构如下图所示:

7.在ARM处理器中,总线安全访问表示对安全物理地址空间的访问,而总线非安全访问则指对非安全地址空间的访问。在安全状态下,软件可以访问两种地址空间,表明总线访问的安全性与处理器的安全状态不一定相同。使用AMBA AXI和ACE协议时,AxPROT[1]信号用于指示正在访问的地址空间,0表示安全空间,1表示非安全空间。系统理论上可拥有两个独立的内存系统,但通常情况下,物理地址空间作为属性控制对不同设备的访问。设备分为两类:TrustZone感知设备(如通用中断控制器GIC)会根据安全访问呈现不同的中断视图;而非TrustZone感知设备(如定时器)则不利用访问的安全性,只能是安全或非安全其中之一。

8.TrustZone Address Space Controller(TZASC)是一种硬件组件,用于在ARM TrustZone架构中管理安全(Secure)和非安全(Non-secure)内存区域。它能够有效地将内存划分为不同区域,确保安全和非安全世界之间的数据隔离,防止未授权访问。控制TZASC的寄存器仅限安全访问,仅允许安全软件对内存进行分区。

9.通用中断控制器 (GIC) 支持 TrustZone,每个中断源(在 GIC 规范中称为 INTID)被分配给三个组之一:Secure Group0主要用于处理底层系统管理功能的安全中断,由EL3固件负责,表示为FIQ。Secure Group1则用于处理其他安全中断源,通常由S.EL1或S.EL2软件处理,以IRQ或FIQ表示。Non-secure Group1则负责处理来自非安全环境的中断,以IRQ或FIQ表示。中断的分配和控制是通过软件在安全状态下对特定寄存器(GIC[D|R]_IGROUPR<n>和GIC[D|R]_IGRPMODR<n>)进行配置,安全中断只能通过安全总线修改,而非安全中断则可以通过安全和非安全总线进行修改。安全组的中断只能在安全状态下处理,非安全组的中断只能在非安全状态下处理。产生中断时,如果对应中断的INTID属于Secure Group 0,则产生FIQ中断,必须陷入EL3进行处理;如果属于Secure Group 1,且当前PE处于EL3以下的安全状态则产生IRQ中断,如果当前PE处于EL3以下的不安全状态则产生FIQ中断;如果属于Non-secure Group 1,且当前PE处于EL3以下的安全状态则产生FIQ中断,如果当前PE处于EL3以下的不安全状态则产生IRQ中断。而若当前PE处于EL3,则产生的中断必定是FIQ。综上所述,如果产生的是FIQ中断则必须陷入EL3,然后在EL3处理或者在EL3切换安全状态后再返回后处理。

10.OP-TEE(Open Portable Trusted Execution Environment)是一个开源的可信执行环境(TEE)解决方案,专门为Arm架构设计。它提供了一种安全的平台,能够运行受信任的应用程序和服务,确保在执行敏感操作时的安全性和机密性。如下图所示:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/66216.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小程序组件 —— 28 组件案例 - 推荐商品区域 - 实现结构样式

这一节目标是实现底部推荐商品的结构和样式&#xff0c;由于这里要求横向滚动&#xff0c;所以需要使用上节介绍的 scroll-view 功能&#xff0c;并使用 scroll-x 属性支持横向滚动&#xff0c;推荐商品区域中的每一个商品是一个单独的 view&#xff0c;每个view 中需要写三个组…

【Spring Boot】Spring AOP 快速上手指南:开启面向切面编程新旅程

前言 &#x1f31f;&#x1f31f;本期讲解关于spring aop的入门介绍~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 &#x1f386;那么废话不…

数据结构(AVL树)

BST的退化 仔细观察BST你会发现&#xff0c;虽然他有良好的“搜索”特性&#xff0c;也就是&#xff1a;你可以利用其节点之间的大小关系&#xff0c;很容易地从根节点开始往下走找到你要的节点&#xff0c;但他却无法保证这种搜索所需要的时间的长短&#xff0c;因为建立BST时…

SAP 01-初识AMDP(ABAP-Managed Database Procedure)

1. 什么是AMDP(ABAP-Managed Database Procedure) 1.&#xff09;AMDP - ABAP管理数据库程序&#xff0c;是一种程序&#xff0c;我们可以使用SQLSCRIPT在AMDP内部编写代码&#xff0c;SQLSCRIPT是一种与SQL脚本相同的数据库语言&#xff0c;这种语言易于理解和编码。 将AM…

Anaconda环境配置(Windows11+python3.9)

文章目录 一、 下载ANACONDA&#xff08;1&#xff09;点击**Free Download**。&#xff08;2&#xff09;点击“skip registration”&#xff0c;跳过登录。&#xff08;3&#xff09;下载对应操作系统的ANACONDA版本。 二、 安装ANACONDA&#xff08;1&#xff09;双击运行安…

Git命令行的使用

目录 一、什么是Git 1、本地仓库 vs 远端仓库 本地仓库 远端仓库 2、.git vs .gitignore .git .gitignore 二、使用Git命令 1、安装git 2、git首次使用需要配置用户邮箱和用户名 3、上传目录/文件到远端仓库步骤 1&#xff09;创建放置文件的目录 2&#xff09;cd…

后台管理系统动态面包屑Breadcrumb组件的实现

在后管理系统开发中&#xff0c;面包屑导航是一个非常常见的功能&#xff0c;通常是根据当前的 url 自动生成面包屑导航菜单&#xff0c;当跳转路由发生变化时&#xff0c;面包屑导航都会随之发生变化&#xff0c;即动态面包屑。 要完成动态面包屑我们需要制作一个动态数组&am…

小程序租赁系统开发的优势与应用前景分析

内容概要 小程序租赁系统是一种新兴的数字化解决方案&#xff0c;旨在为用户提供更加便捷与高效的租赁服务。它通常包括一系列功能&#xff0c;如在线浏览、即时预定、支付功能以及用户反馈机制。这些系统在使用上极为友好&#xff0c;让用户能够轻松选择所需的商品或服务&…

凸包(convex hull)简述

凸包&#xff08;convex hull&#xff09;简述 这里主要介绍二维凸包&#xff0c;二维凸多边形是指所有内角都在 [ 0 , Π ] [0,\Pi ] [0,Π]范围内的简单多边形。 凸包是指在平面上包含所有给定点的最小凸多边形。 数学定义&#xff1a;对于给定集合 X X X&#xff0c;所有…

小波与傅里叶变换在去噪效果上的对比分析-附Matlab源程序

&#x1f468;‍&#x1f393; 博主简介&#xff1a;博士研究生 &#x1f52c; 超级学长&#xff1a;超级学长实验室&#xff08;提供各种程序开发、实验复现与论文指导&#xff09; &#x1f4e7; 个人邮箱&#xff1a;easy_optics126.com &#x1f56e; 目 录 摘要一、…

CVPR2019 | AA | 特征空间扰动产生更具迁移性的对抗样本

Feature Space Perturbations Yield More Transferable Adversarial Examples 摘要-Abstract引言-Introduction相关工作-Related WorkTransferability Metrics-迁移性指标激活攻击方法-Activation Attack Methodology损失函数-Loss Function攻击算法-Attack Algorithm 实验设置…

游戏如何检测Root权限

Root权限&#xff0c;即超级用户权限&#xff0c;在Android系统中&#xff0c;获取Root权限意味着用户可以修改系统文件、移除预装应用、安装特殊应用等。 在Root环境下&#xff0c;游戏面临着相当大的安全隐患&#xff0c;用户获取了最高权限&#xff0c;意味着可以通过各类工…

MySQL性能优化explain关键字详解

系列文章目录 一、MySQL数据结构选择 二、MySQL性能优化explain关键字详解 三、MySQL索引优化 文章目录 系列文章目录一、explain是什么&#xff1f;二、explain字段详解2.1、ID2.2、select_type2.3、table2.4、partitions2.5、type&#xff08;重点&#xff09;2.6、key2.7、…

【Go学习】-01-5-网络编程

【Go学习】-01-5-网络编程 1 互联网协议介绍1.1 互联网分层模型 2 Go网络编程2.1 socket编程2.1.1 socket图解2.2.2 TCP编程2.2.3 UDP编程 2.3 http编程2.3.1 web工作流程2.3.2 HTTP协议 2.4 WebSocket编程2.5 聊天室的小例子2.5.1 server.go文件代码2.5.2 hub.go文件代码2.5.3…

推荐系统重排:MMR 多样性算法

和谐共存&#xff1a;相关性与多样性在MMR中共舞 推荐系统【多样性算法】系列文章&#xff08;置顶&#xff09; 1.推荐系统重排&#xff1a;MMR 多样性算法 2.推荐系统重排&#xff1a;DPP 多样性算法 引言 在信息检索和推荐系统中&#xff0c;提供既与用户查询高度相关的文…

简历_熟悉缓存高并发场景处理方法,如缓存穿透、缓存击穿、缓存雪崩

系列博客目录 文章目录 系列博客目录1.缓存穿透总结 2.缓存雪崩3.缓存击穿代码总结 1.缓存穿透 缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在&#xff0c;这样缓存永远不会生效&#xff0c;这些请求都会打到数据库。 常见的解决方案有两种&#xff1a; 缓存空对…

Rabbitmq追问1

如果消费端代码异常&#xff0c;未手动确认&#xff0c;那么这个消息去哪里 2024-12-31 21:19:12 如果消费端代码发生异常&#xff0c;未手动确认&#xff08;ACK&#xff09;的情况下&#xff0c;消息的处理行为取决于消息队列的实现和配置&#xff0c;以下是基于 RabbitMQ …

STM32-笔记37-吸烟室管控系统项目

一、项目需求 1. 使用 mq-2 获取环境烟雾值&#xff0c;并显示在 LCD1602 上&#xff1b; 2. 按键修改阈值&#xff0c;并显示在 LCD1602 上&#xff1b; 3. 烟雾值超过阈值时&#xff0c;蜂鸣器长响&#xff0c;风扇打开&#xff1b;烟雾值小于阈值时&#xff0c;蜂鸣器不响…

2、pycharm常用快捷命令和配置【持续更新中】

1、常用快捷命令 Ctrl / 行注释/取消行注释 Ctrl Alt L 代码格式化 Ctrl Alt I 自动缩进 Tab / Shift Tab 缩进、不缩进当前行 Ctrl N 跳转到类 Ctrl 鼠标点击方法 可以跳转到方法所在的类 2、使用pip命令安装request库 命令&#xff1a;pip install requests 安装好了…

SpringCloud系列教程:微服务的未来(八)项目部署、DockerCompose

本博客将重点介绍如何在 Docker 环境中部署一个 Java 项目&#xff0c;并使用 Docker Compose 来简化和管理多个服务的协调部署。我们将通过一个典型的 Java Web 应用&#xff08;如基于 Spring Boot 的应用&#xff09;为例&#xff0c;演示如何构建、配置和运行 Docker 容器&…