什么是TrustZone技术
TrustZone是ARMv8-M的一个安全扩展选项,主要目的是为各种嵌入式应用提供一个完善的安全系统平台。
TrustZone并不是一个新的概念,实际在Cortex-A中已经存在多年,现在这个概念被扩展到ARMv8-M处理器中。
总的来讲,ARMv8-M的TrustZone技术和Cortex-A系列基本类似。二者的处理器都有安全和非安全两种模式,非安全模式只能访问非安全的存储空间。ARMv8-M中TrustZone的设计考虑到了资源和效率两个方面。和Cortex-A系列中TrustZone不同的是,它的安全和非安全空间的划分是基于地址空间的,模式的转换也是在异常处理中自动完成的。
TrustZone在ARMv8-M和Cortex-A系列中的差异:
- ARMv8-M中TrustZone支持多个安全函数入口,而Cortex-A系列处理器只支持唯一的入口。
- 之行安全函数的时候仍然可以出发非安全异常。
ARMv8-M中TrustZone做了很多低功耗相关的优化:
- 很多嵌入式应用都使用实时操作系统,因此确定的低延迟中断非常重要。同时还需要在运行安全代码的时候可以处理异常请求。
- 通过安全和非安全状态共享寄存器组,在实际实现上ARMv8-M和ARMv6-M或者ARMv7-M的功耗水平基本相当。
- 状态切换的低开销允许安全和非安全软件频繁交互,当安全固件包含诸如GUI固件或通信协议栈的软件库时,这种情况是很常见的。
ARM的TrustZone技术将系统和软件划分为安全和非安全两个模式,安全软件可以访问安全和非安全模式下的内存和资源,而非安全模式只能访问非安全模式的内存和资源。线程[1]和中断下两种模式是正交的,也就是两种模式均支持线程和中断。
如果系统实现了安全模块,那么系统默认会从安全模式启动。如果没有安全模块,那么系统总会在非安全模式。TrustZone技术允许CPU获取当前的安全状态。但是TrustZone技术并不包含安全的每个方面,比如它并没有加密模块。下图是一个划分了安全和非安全模式的处理器框图:
处理器框图
在实现ARMv8-M安全模块的时候,很多关键组件都要用安全模式下的组件替换,这些关键组件包括:
- 安全的引导程序(boot loader)
- 安全密钥
- Flash固件烧写
- 安全信息
下图就是应用中要替换部分的一个框图:
安全(信任)和非安全(非信任)软件可以同时工作,但是非安全应用不能直接访问安全资源。也就是所有的对安全资源的访问都要通过API的形式访问,这些API由安全应用提供。API的访问需要鉴权,通过这种形式,即使非安全应用中有漏洞,黑客也不能破解整个芯片。
-
线程模式包含特权和非特权模式 ↩
网友评论