TrustZone中的属性单元
上一节中我们提到,内存的划分是通过属性单元(Attribute Unit)实现的,它主要有两种:内部的Secure Attribute Unit(SAU)和外部Implementation Defined Attribution Unit(IDAU).处理器所支持的SAU区域数量在设计时候就定义好了,SAU模块上电的时候是禁用的。
如果没有定义SAU区域,并且系统中也么有IDAU,那么整个处理器所有地址空间都将被当做安全空间对待,不支持也没有比较安全和非安全两个系统状态之间的切换。
SAU在安全状态下是可以编程的,它的编程模型和内存保护单元(Memory Protection Unit)类似。SAU具体实现可以根据需求进行设计,设计者可以设计不同数量的区域。当然设计者也可以通过引入外部IDAU定义一个固定的内存模型,而通过SAU替换掉默写内存区域的划分。一个基本的应用是通过IDAU将内存划分为大小是500MB的多个空间。
S和NS区域的划分可以在SOC设计阶段由设计人员指定,也可以是在软件开发阶段通过SAU指定,或者通过器件专有的IDAU指定。内存区域的划分同样适用于保护片上模块的寄存器。
SAU和IDAU还定义了划分内存区域的数量,这个数量是一个8-bit的数据,软件可以通过Test Target(TT)指令获取这个数据以及内存当前被配置为S或NS的这个属性。
一般实现了ARMv8-M安全扩展的处理器上只有SAU可以用,SAU中可以划分内存区域的数量一般是0,4或者8.
对SAU的配置也只能在安全模式下进行,内存的划分通过修改SAU中的Region Number Register(SAU_RNR), Region Base Address Register(SAU_RBAR), 和Region Limit Address Register(SAU_RLAR)几个寄存器实现的。SAU的使能位位于SAU Control Register(SAU_CTRL)中。
注意:用户在修改SAU相关寄存器的时候,必须保证敏感数据不被暴露于非安全应用。
对于内存的安全属性和内存保护,可以通过SAU实现,也可以通过Memory Protection Units(MPUs)实现。
不管对于指令还是数据,SAU都是通过地址信息返回指定内存的安全属性。
对于指令地址,安全属性决定了指令在当前状态下是不是可以执行,也可以去判断安全区域的指令能否在非安全状态下调用。
对于数据,安全属性决定了数据能否在非安全模式下访问,还可以确定外部访问数据的请求是安全的或者非安全请求。
如果在非安全模式下请求一个安全区域的地址,处理器会产生一个Secure Fault异常。如果是从安全模式下访问一个非安全区域的数据,相应的内存也会标记为非安全1。
- 有点绕,也不知道翻译的对不对,反正不怎么通顺,问题肯定有的。 ↩
最后更新于 2019-08-03 22:26:30 并被添加「MCU 安全 ARM」标签,已有 5254 位童鞋阅读过。
本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。