《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架构设计。它提供了一种安全的平台,能够运行受信任的应用程序和服务,确保在执行敏感操作时的安全性和机密性。如下图所示:

相关推荐
Stone.Wu8 天前
快速理解ARM Cortex-M流水线:指令执行过程通俗解释
arm
我在人间贩卖青春8 天前
汇编之分支跳转指令
汇编·arm·分支跳转
我在人间贩卖青春8 天前
汇编之加载存储指令
汇编·arm·寄存器加载存储
我在人间贩卖青春8 天前
汇编之状态寄存器访问指令
汇编·arm·状态寄存器
我在人间贩卖青春8 天前
汇编之软中断指令和协处理指令
汇编·arm·软中断·协处理
我在人间贩卖青春8 天前
汇编之数据处理指令
汇编·arm·数据处理指令
fly的fly11 天前
浅析 QT远程部署及debug方案
qt·物联网·arm
切糕师学AI13 天前
ARM标准汇编(armasm)中的标号(Label)
汇编·arm
CHENG-JustDoIt14 天前
嵌入式开发 | ARM Cortex-M 系列中M3、M4、M23 和 M33四款处理器的深度对比分析
arm开发·单片机·嵌入式硬件·arm
toradexsh22 天前
在NXP iMX8QM上使用 Jailhouse
arm·nxp·toradex·imx8mp·jailhouse