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

相关推荐
千千道2 天前
linux的线程同步(条件变量和锁)
linux·arm开发·驱动开发·物联网·arm
冬瓜3125 天前
汇编点灯练习
汇编·arm
阿隆ALong7 天前
云手机:小红书矩阵搭建方案
线性代数·智能手机·矩阵·云计算·arm
千千道9 天前
Linux 标准 I/O 库
linux·arm开发·arm
阿隆ALong10 天前
跨境电商培训:云手机的新舞台
大数据·智能手机·矩阵·云计算·arm
阿隆ALong12 天前
云手机:应用上线测试的创新助力
智能手机·矩阵·手机·arm
阿隆ALong12 天前
云手机+YouTube:改变通信世界的划时代技术
智能手机·矩阵·云计算·arm
创龙科技-黄工14 天前
【深度剖析】自主可控的全国产方案,基于龙芯LS2K1000LA-i!
arm·龙芯·工业核心板·国产处理器
シ風箏15 天前
Neo4j【环境部署 02】图形数据库Neo4j在Linux系统ARM架构下的安装使用
linux·数据库·arm·neo4j