天天看点

[trustzone]-ARM trustzone的安全扩展介绍-一篇就够了

★★★ 个人博客导读首页—点击此处 ★★★

.

说明:

在默认情况下,本文讲述的都是ARMV8-aarch64架构,linux kernel 64位

.

自制ARM Trustzone学习视频(17min):

文章目录

        • 1、ARM Trustzone的安全扩展简介
        • 2、ARM Trustzone技术下的软件框图

1、ARM Trustzone的安全扩展简介

ARM Trustzone是什么? ARM Trustzone不具体指一个硬件,也不是一个软件,而是一套技术一套标志,在支持ARM Trustzone的SOC中,需按照ARM Trustzone技术对各个子模块进行设计。

[trustzone]-ARM trustzone的安全扩展介绍-一篇就够了
  • (1)、AMBA-AXI总线的扩展, 增加了标志secure读和写地址线:AWPROT[1]和ARPROT[1]
  • (2)、processor的扩展(或者说master的扩展),在ARM Core内部增加了SCR.NS比特位,这样ARM Core发起的操作就可以被标记“是以secure身份发起的访问,还是以non-secure身份发起的访问”
  • (3)、TZPC扩展,在AXI-TO-APB端增加了TZPC,用于配置apb controller的权限(或者叫secure controller),例如将efuse(OTP Fuse)配置成安全属性后,那么processor以non-secure发起的访问将会被拒绝,非法的访问将会返回给AXI总线一个错误。
  • (4)、TZASC扩展,在DDRC(DMC)之上增加一个memory filter,现在一般都是使用TZC400,或由SOC厂商自己设计一个这样的IP,或叫MPU,或集成在DMC内部,它的作用一般就是配置DDR的权限。 如果配置了DDR中某块region为安全属性,那么processor以non-secure发起的访问将会被拒绝。
  • (5)、MMU对安全扩展的支持

    TTBRx_EL0、TTBRx_EL1的扩展:在armv7上,这两个寄存器对于secure和non-secure属性是banked的,也就是说在安全世界和非安全世界各有一组这样的寄存器,所以在linux和tee中可以各自维护一张自己的内存页表.

    cache的扩展:其实cache指令(寄存器)并没有什么扩展,而是在MMU页表的entry的属性中,增加了NS的属性,当非安全世界使用MMU进行翻译地址时,检查到该entry的属性为secure,将会miss掉。

  • (6)、gic对安全扩展的支持,在gicv2、gicv3的版本中,都增加了对安全扩展的支持. 以gicv3为例,将中断划分成了group0、secure group1和non-secure group1. 在软件的配置下,group0和secure group1的中断将不会target到REE(linux)中处理

2、ARM Trustzone技术下的软件框图

EL3 is AArch64:

[trustzone]-ARM trustzone的安全扩展介绍-一篇就够了

EL3 is AArch32:

[trustzone]-ARM trustzone的安全扩展介绍-一篇就够了

AArch32和AArch64 secure monitor的理解:

  • 如果secureos和monitor都是64位,secureos跑在el1, monitor跑在el3;
  • 如果secureos和monitor都是32位,secureos和monitor都跑在EL3(secureos在svc模式、monitor在svc模式),它俩共用页表;
  • 如果monitor是64位,secureos是32位,那么secureos跑在svc模式(el1),monitor跑在el3,他俩不共用页表

armv7:

[trustzone]-ARM trustzone的安全扩展介绍-一篇就够了
欢迎添加微信、微信群,多多交流
[trustzone]-ARM trustzone的安全扩展介绍-一篇就够了