TrustZone 旨在帮助从事资源受限设备的嵌入式开发人员改进其安全架构。它为开发人员提供了一种容器化和隔离软件的方法,同时仍提供 Cortex-M 处理器所期望的特性,例如低中断延迟。TrustZone 将内存、处理域和应用程序分成两个独立的域 — 安全和非安全,有时也分别称为可信应用程序和用户应用程序。
用户域包含用户应用程序、RTOS、设备驱动程序、协议栈和通用外围设备等项目。用户域的行为与当今典型的 Cortex-M 应用程序完全相同。事实上,开发人员可以使用禁用 TrustZone 的 TrustZone 处理器,他们不会注意到任何差异。不过,这会破坏整个目的。安全域包含几个旨在保护系统的项目,例如安全启动、安全存储、加密库,甚至 RTOS 任务和内核代码。这些项目肯定存在于当今的用户应用程序中。但是有了 TrustZone,他们现在能够在没有明确这样做的情况下以不再直接访问的状态存在。
第一次使用 TrustZone 的开发人员会发现,即使是软件的开发方式也不同。开发人员现在需要将他们的应用程序分成两个独立的应用程序,而不是使用单个代码项目:固件项目和用户项目。固件项目包含应用程序的所有安全代码,并将驻留在安全内存位置。外部世界或用户应用程序无法访问这些内存位置,除非嵌入式开发人员专门在其代码中创建安全网关以公开安全功能。不过,重要的是要知道,安全区域可以完全访问所有内存位置。这意味着,如果为安全域编写的软件计划访问不太安全的用户应用程序空间中的数据或固件,则需要非常小心。
用户应用程序是标准的,是目前每个 Cortex-M 开发人员都习惯的类型。如前所述,用户应用程序受限于它可以访问的内存位置、功能和外围设备。如果需要执行安全功能,用户应用程序可以通过安全网关调用安全域。如果用户应用程序尝试访问任何其他安全内存区域,则会导致错误。这可以防止错误的用户程序随机访问安全内存或以任何方式对其进行操作。
TrustZone 应用程序首先在安全域中执行。开发人员从他们的安全启动应用程序开始,并可以启动他们的处理器。一旦完成,执行可以从安全状态切换到用户状态并开始执行用户代码。
当处理器从用户状态切换到安全状态时,硬件处理转换,开发人员无需添加代码。相反,编译器会自动添加一条 CPU 指令,指示切换到安全状态。在两种状态之间切换的最坏情况确定性开销是三个时钟周期。根据应用程序,如果嵌入式开发人员正在进行函数调用并且需要验证函数参数或测试在域之间传递的指针,则开销可能会更大。
当开发人员第一次遇到 Cortex-M 的 TrustZone 时,他们会发现他们编写应用程序的方式将永远改变。他们实际上必须设置两个应用程序,其中一个将存在于用户域中,另一个存在于安全域中。当存在提高系统安全性的机会时,必须以不同的方式开发软件不一定是坏事。开发人员需要仔细考虑他们的应用程序架构,并确保他们正确地识别他们的软件和数据应该存在的领域。TrustZone 是嵌入式开发人员可以用来提高系统安全性的工具。但只有通过正确使用,任何系统都会变得更加安全。
领取专属 10元无门槛券
私享最新 技术干货