相信关注安全和嵌入式的开发者对TrustZone都不陌生,最近在我们的极术社区(www.aijishu.com)有网友询问Cortex-A和Cortex-M的TrustZone之间的差异,那么我们来简单介绍下。
Arm在2003年的Armv6开始就开始引入TrustZone,到Armv7-A和Armv8-A把TrustZone作为架构的可选的安全扩展。虽然TrustZone做架构的可选扩展,但是所有的Cortex-A的CPU都实现这个扩展,例如Cortex-A7,Cortex-A53,Cortex-A55,和最新的Cortex-A77等都支持TrustZone,并且得到非常广泛的应用,比较典型的场景如指纹识别、人脸识别、移动支付、企业应用、数字版权保护等等,都是基于TrustZone来实现保护的。
其实对于底层安全技术来说,无论是哪个场景的安全要求归结到硬件上面可以分为两点,一个对数据的访问,一个是对外设的控制。TrustZone天生就具备这样的优势,因为CPU分为安全状态和普通状态,结合地址空间控制器可以实现对不同的访问数据权限,结合总线和系统IP可以非常灵活控制外设的访问权限,网上有非常多的Cortex-A的TrustZone资料。
Arm从2015年把TrustZone引入到M系列,也是作为Armv8-M的可选的安全扩展,同样虽然是可选的安全扩展,但是Cortex-M23、Cortex-M33等CPU都实现TrustZone。为什么把TrustZone引入到M系列呢?因为越来越多的设备具备联网能力,只要能够联网都存在安全威胁,云服务商要确保只有可信的设备才能接入到他们的云服务,另外是设备端一般要把数据上传到云端,如果设备端不安全,数据的源头都不安全,那么上传到云端也没有价值,或者有负价值,所以说设备端是IoT安全的源头,确保设备的安全性是IoT安全的基础。
Cortex-A和Cortex-M的TrustZone在设计思想上是一样的,CPU都有两个安全状态,并且系统上的资源划分为安全资源和非安全资源,在非安全状态下只能访问非安全资源,在安全状态下能否访问所有的资源。但是M系列和A系列架构本身就存在差异,那么TrustZone从具体实现角度来看也存在差异,并且M系列资源比较有限和需要实时响应,在安全的具体设计时也不一样。
例如在A系列两个状态的切换只能通过monitor来切换,M系列的切换入口就比较多;M系列可以直接响应非安全中断,也可以直接调用非安全的代码;M系列的banked寄存器也会更多,在软件的差异上也比较大,A系列需要软件来保存上下文,M系列很多是通过硬件的方式自动保存......
实际上,Arm在网站介绍了Cortex-A和Cortex-M之间的差异的同时也提供了Armv8-M的TrustZone白皮书,点击“阅读原文”前往极术社区查看更多技术细节。
关注Arm中国,够深度,更精彩