什么是TrustZone,它有什么作用
TrustZone®是Arm®开发的一项核心技术,作为Armv8-M架构的一部分,通过强制硬件隔离提供系统级安全措施。TrustZone®要求在软件中划分安全和非安全MCU区域对应的逻辑分区,从而创建受保护的环境。该技术通常在搭载Arm®Cortex®-M33内核的器件上实现,个别情况下也在搭载ArmCortex-M23内核的器件上实现。
内存区域划分为三个不同的分区:
一个安全分区,用于密钥存储和数据解密等受信任或受保护的IP;
一个非安全分区,用于常规应用;
以及一个非安全可调用分区,用作其他两个分区之间的网关。
通过最后一个非安全可调用分区,位于非安全分区中的代码可以调用安全分区中的服务。此功能可以通过跳板(veneer)实现,支持隔离安全分区和非安全分区。
如上图所示:TrustZone支持对安全区域和非安全区域进行隔离。在安全和非安全状态下都可以访问非安全环境中的函数和数据,而非安全环境中的例程只能通过调用位于非安全可调用环境(NSC)的跳板来访问安全环境中的服务。通过此方式提供一个进入安全环境的确定入口点。
安全环境和非安全环境的划分
现在我们已经清楚,程序需要划分为安全和非安全环境,我们该如何相应地对软件进行分区?为此,基于TrustZone®的系统始终包含两个不同的项目:一个安全项目,另一个是非安全项目。二者都可以利用SRAM以及代码和数据闪存,但只有安全代码可以直接访问两个(安全和非安全)分区。
可借助e2studio中的项目配置器设置这些项目。创建新项目后,系统将提示您选择项目应具有的类型。
Flat扁平化(非TrustZone)项目
TrustZone安全项目
TrustZone非安全项目
注解:
关于TrustZone的具体应用方法请参考本教程的最后章节的TrustZone应用示例。与安全环境和非安全环境的划分相关的内容包括:跨边界的函数调用、从安全代码到非安全代码的回调、保护函数等。
器件生命周期管理(DLM)
器件生命周期(DLM)定义了器件寿命的不同阶段,并控制调试接口、串行编程接口和瑞萨测试模式的功能。出于安全原因,这样便可将位于安全环境中的代码的编写与在非安全环境中运行的应用程序的编写分开,并且可以由两个独立的团队来开发产品:由安全开发人员团队创建信任根(RoT)或孤立的子系统,并由非安全环境的设计人员创建使用该RoT或子系统的应用程序。灵活配置软件包(FSP)和e2studio支持这种设计划分。
安全环境的代码准备就绪后,可将其预先烧录到器件中,并将生命周期设置为NSECSD,从而锁定安全环境,或者作为捆绑包由非安全项目引用。应用程序设计人员将以此作为起点,在非安全环境中编写应用程序,对其进行调试,然后将其烧录到器件中。如果需要,他们还可以禁用所使用的闪存模块的编程和擦除功能。最后一步,将生命周期的状态设置为已部署、调试锁定或引导锁定。这样一来,整个器件可获得保护,并且不能对编程接口和器件进行调试、读取或编程。如下图显示了器件生命周期可能的状态和转换。
器件生命周期管理的不同状态:
有三种不同的调试访问级别,它们视生命周期的状态而变化:
DBG2:允许调试器连接,访问存储器和外设没有任何限制。
DBG1:允许调试器连接,但访问只限于非安全内存区域和外设。
DBG0:不允许进行调试连接。
下面的表格提供了对每个生命周期的解释:
可以使用瑞萨闪存编程器(RenesasFlashProgrammer(RFP))或瑞萨器件分区管理器(DevicePartition Manager)执行从一种状态到另一种状态的转换,但后者可选择的状态有限。可以通过使用身份验证密钥来保护状态之间的转换。有关不同DLM状态和器件特定转换的更多信息,请参见相应微控制器的用户手册。
如您在使用瑞萨MCU/MPU产品中有任何问题,可识别下方二维码或复制网址到浏览器中打开,进入瑞萨技术论坛寻找答案或获取在线技术支持。
https://community-ja.renesas.com/zh/forums-groups/mcu-mpu/
未完待续
推荐阅读
如何安装Keil开发环境及如何更新开发环境的FSP库版本——瑞萨RA系列FSP库开发实战指南连载(02)
初识ARM微控制器及瑞萨RA系列MCU概览——瑞萨RA系列FSP库开发实战指南连载(03)
瑞萨RA系列MCU命名方法与选型——瑞萨RA系列FSP库开发实战指南连载(04)