2009年4月1日星期三

对ARM的TrustZone理解

TrustZone是ARM对ARM6的扩展,其实只是增加了一条指令,一个配置状态位,以及一个新的有别于核心态和用户态的安全态。ARM并没有把TrustZone设计成能够解决所有的安全问题,它的目标是希望TrustZone能把一些安全性要求高的代码放在安全区域里执行,这也就是TrustZone名字的由来。

ARM把TrustZone固化在硬件里的道理是,系统的安全性不能全靠软件来保证,而且改写现有的不安全的软件,使之更安全也不大可行。较为可行的方案就是引入一块安全的硬件逻辑,并且只让一小块软>件控制此安全逻辑。这样既保护了既有投资,也把系统的安全风险降到最小。

因为操作系统和普通应用都可以运行在安全态,所以安全态不同于传统的运行态环状的特权划分,因此ARM把安全态描述成一个平行区域,称之为安全区,又称为安全监控模式。

核心态程序要进入到安全区运行,必须执行安全监控中断( secure monitor interrupt, SMI) 指令,而应用程序则必须通过API 函数来调用SMI 指令,此时,操作系统要负责检查应用程序是否安全,若通过检查则执行SMI 指令进入到安全区。这样,整个系统的安全性就全由操作系统负责了。换句话说,TrustZone需要软件的支持,才能达到安全目标。

执行SMI 指令的具体动作是,SMI 在CP15的安全状态寄存器中设置S位.。S位扩展还体现在AMBA总线上,这样外设也可以实现对TrustZone的支持。

安全监控程序(固件)是独立于操作系统的、自足的、不可重入的一小段代码。只要CP15安全状态寄存的S位处于置1状态,安全监控程序就要起作用(监测所有处理器操作)。首先监控程序要负责保存>上下文状态,即寄存器内容(一般保存到紧致内存TCM中),并且把当前处理器配置信息保存到CP15的单独一组分编(banked)寄存器中。TrustZone的开销是增加了大约350位状态信息,完成上下文切换需要200时钟周期。

由于TrustZone为安全区配备了单独的缓存、TLB和紧致内存TCM,上下文切换并不会导致这些性能构件内容的倒换,也即不会导致系统性能的降低。

ARM建议把安全监控程序及其运行时需要的内存置于一个TCM块中,以使延迟更低且更可预测。

安全扩展对于中断处理也有影响。因为中断既可以来自外设,也可来自软件,那就必须假定中断有可能造成安全漏洞,这样,在安全代码执行时,就不能简单地让任何中断切入进来。ARM建议的方案是,把中断也分为安全的和非安全的,安全代码只能被安全中断打断。当然,也可以把所有中断都提升为安全的,但那样会引入不必要的延迟。

TrustZone是体系结构的扩展,系统软件可以利用这一扩展提供安全支持,TrustZone本身并不能实现安全保障功能,但这一解决方案硬件实现不复杂,也不增加许多功耗,仍是具有很好性价比的安全嵌入式解决方案。

1 条评论: