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