Trustzone 硬件架构

1. 用于ARMv8-A / ARMv7-A / ARMv6Z的ARM TrustZone 基本介绍

TrustZone技术为全系统的安全性和可信赖平台的创建提供了基础。系统的任何部分都可以设计为安全的世界的一部分,包括调试,外设,中断和内存。通过创建安全子系统,资产可以免受软件攻击和普通硬件攻击。

这两个世界的划分是通过AMBA总线结构,外围设备和处理器中存在的硬件逻辑实现的。每个物理处理器内核都有两个虚拟内核:一个被认为是安全的,另一个是非安全的,并且提供一个可靠的机制,用于它们之间的上下文切换(安全监控呼叫)。非安全虚拟处理器只能访问非安全系统资源,而安全虚拟处理器可以查看所有资源。通过执行专用的安全监控呼叫(SMC)指令或许多异常机制的软件可触发安全监视器的输入。监视器代码通常保存当前世界的状态并恢复被切换到的世界的状态。

为了在SoC信任的软件中实现一个安全的世界,需要开发使用受保护的资产。此代码通常实现可信引导,安全世界切换监视器,小型可信操作系统和受信任的应用程序。提供多级别的安全世界权限,用于在可信引导,受信任的操作系统和可信应用之间进行隔离。基于TrustZone的硬件隔离,可信引导和受信任的OS的组合构成了可信执行环境(TEE)。 TEE为多个受信任的应用程序提供了机密性和完整性的安全属性。许多TEE提供商遵循GlobalPlatforms标准API到其TEE,以跨平台和不同市场提供通用的安全功能。 GlobalPlatform针对TEE编写了一个保护配置文件,并开发了一个可由独立测试实验室获得安全认证的合作伙伴使用的安全评估方案。

SoC开发人员和OEM厂商可以从被称为ARM可信固件的低级安全世界软件的参考实现中获益。该软件可作为GitHub上的开放源代码使用,包括可信引导和安全运行时,可使用安全监视代码调用约定(SMCCC)来管理正常(非信任)和安全(受信任)世界之间的切换。 ARM可信固件可以与商业或开源的可信操作系统集成,以创建TEE。

这里写图片描述

2. Trustzone硬件架构

TrustZone架构为系统设计人员提供了一种帮助安全系统,使用TrustZone安全扩展和安全外设的方法。 低级程序员必须了解TrustZone架构对系统的限制,即使它们不使用安全功能。

ARM安全模型将设备硬件和软件资源分开,以便它们存在于安全子系统的安全环境中,或存在于其他一切的正常世界中。 系统硬件确保从普通世界不能访问安全的世界资产。 安全设计将所有敏感资源放置在安全领域,理想情况下,可以保护资产免受各种可能的软件攻击。

ARM体系结构参考手册使用安全和非安全术语来指系统安全状态。 非安全状态不会自动意味着安全漏洞,而是正常运行,因此与正常世界相同。 通常情况下,非安全和安全世界之间存在主从关系,因此,仅当正常世界执行安全监控呼叫(SMC)时,才能执行安全环境(参见“ARMv8-A体系结构参考手册”中的SMC指令)。用不同的世界不仅仅是描述执行状态,而且还描述了只能在该状态下访问的所有内存和外围设备。

增加这个架构意味着单个物理内核可以以时间分片的方式从正常世界和安全世界执行代码,尽管这取决于可以被配置为仅可由访问的中断生成外设的可用性 安全世界。 例如,可以使用安全定时器中断来保护安全世界的一些执行时间,类似于抢占式多任务。 这些外围设备可能或可能不可用,具体取决于平台设计人员打算支持的安全级别和用例。

或者,可以使用更接近协作多任务的执行模型。 在这种情况下,尽管安全世界在每个世界可以访问的资源方面独立于正常世界,但执行时间的调度通常在两个世界之间相互依赖。

像固件或任何其他系统软件一样,安全世界中的软件必须小心,以尽量减少对系统其他部分的影响。 例如,除非执行普通世界要求的一些操作,否则通常应避免大量执行时间的消耗,而且应尽可能快地向非正常世界发出非安全中断。 这有助于确保普通世界软件的良好性能和响应能力,而无需大量移植。

存储器系统通过伴随外围设备和存储器地址的附加位分配。 称为NS位的该位指示访问是安全还是不安全。 该位被添加到所有内存系统事务中,包括缓存标记和对系统内存和外设的访问。 这个额外的地址位为安全世界提供了物理地址空间,并为普通世界提供了一个完全独立的物理地址空间。 在正常世界中运行的软件只能对存储器进行非安全访问,因为在正常生成的任何内存事务中,内核总是将NS位设置为1
世界。 在安全环境中运行的软件通常只能使用安全内存访问,也可以使用其表页条目中的NS和NSTable标志来对特定内存映射进行非安全访问。

尝试对标记为“安全”的缓存数据执行非安全访问会导致高速缓存未命中。 尝试对标记为“安全”的外部存储器执行非安全访问,使内存系统不允许该请求,从设备返回错误响应。 非安全系统没有指示该错误是由尝试访问安全内存引起的。

在AArch64中,EL3有自己的转换表,由寄存器TTBR0_EL3和TCR_EL3控制。 只有第一阶段翻译才能在安全世界中使用,并且没有TTBR1_EL3。 AArch64 EL1转换表寄存器不存在于安全状态之间,因此必须为每个世界保存和恢复TTBR0_EL1,TTBR1_EL1和TCR_EL1的值,作为安全监控器上下文切换操作的一部分。 这使得每个世界都有一套本地的翻译表,安全世界的映射隐藏并保护了普通世界。 Secure World翻译表中的条目包含NS和NSTable属性位,用于确定特定访问是否可访问安全或非安全物理地址空间。

安全和非安全条目可以在缓存和翻译后备缓冲区(TLB)中共存。 在世界之间切换时,无需使缓存数据无效。 普通世界只能生成非安全访问,所以只能打到标记为非安全的缓存行,而安全世界可以生成安全和非安全访问。 TLB记录中的条目生成一个特定的条目,尽管非安全状态永远不会在安全数据上运行,但是Secure世界可能会导致NS行分配到缓存中。 另外,为每个Exception级别分别启用和禁用缓存。 缓存控制对于两个世界是独立的,但对于所有的异常级别都不是独立的,所以EL0永远不能直接启用或禁用高速缓存,EL2可以覆盖非安全EL1的行为。

这里写图片描述

ps: 细节再慢慢补充吧,如有错误,欢迎指出交流,每天进步一点,你们给我见证,加油!!!

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值