本应用笔记旨在介绍 G32R501芯片安全启动的相关内容,包括安全启动应用程序的设计原则,以及如何使用 G32R5xx SDK所提供的安全启动例程。
G32R5xx安全启动概述
G32R5xx的安全启动功能由芯片固化的 BootROM代码实现,采用 128位 AES-CMAC身份验证算法,对存储在 Flash中的用户固件的前 8KB数据进行身份验证。只有在验证通过后,才会跳转执行用户应用程序。
其中,主要安全启动校验的所在 Flash扇区,必须设置为 Zone1-ExeOnly权限。扩展安全启动校验的所在 Flash扇区,则可配置为 Unsecure、Zone1-Secure、Zone1-ExeOnly三种权限均可。也就是说,进行 CMAC身份验证的应用程序所在的 Flash扇区,其加密权限不允许配置为 Zone2区域的权限。
安全启动选项
| Option | BootMode值 | Flash入口点 | Flash块/扇区 | Golden CMAC Tag存储 位置 |
|---|---|---|---|---|
| 0 | 0x0A | 0x08000000 | Bank 0, Sector 0(Busmatrix IF) | 0x08000008 |
| 1 | 0x2A | 0x00100000 | Bank 0, Sector 0(ITCM IF) | 0x00100008 |
| 2 | 0x4A | 0x08020000 | Bank 1, Sector 0(Busmatrix IF,DualBank Mode |
0x08020008 |
| 3 | 0x6A | 0x00120000 | Bank 1, Sector 0(ITCM IF,BualBank Mode) |
0x00120008 |
注意:安全启动对应的入口扇区,必须配置为 Zone1-ExeOnly权限。
如何设计安全启动的应用程序
对于需要进行安全启动的应用程序,必须满足本章所描述的要求,以确保对应用程序进行正确的校验,从而保证其正常运行。
Golden CMAC Tag存储位置
Golden CMAC Tag值是用户存储在固件中的,用于进行 CMAC身份验证的期望 Tag值,其大小为 16字节。对于主要安全启动,Golden CMAC Tag的存储的起始地址必须位于安全启动对应入口地址之后的 8个字节处。例如,如果安全启动校验的入口地址为 0x08000000,则 Golden CMAC Tag的存储的起始地址应为 0x08000008。
对于用户希望自定义校验 Flash扇区区间的扩展安全启动,Golden CMAC Tag值存储的起始地址没有限制,但必须满足以下要求:
- 扩展安全启动的 Golden CMAC Tag值不得位于主要安全启动校验范围内。
- 扩展安全启动的 Golden CMAC Tag值存储的起始地址必须为 4字节对齐。
- 扩展安全启动的 Golden CMAC Tag值存储区域必须位于进行 CMAC校验的范围内。例如,如果校验的是整个 Flash的大小,则 Golden CMAC Tag必须存储在 Flash范围内。
待校验应用程序加密扇区设置的要求
当需要进行 CMAC身份验证的程序所在的 Flash扇区被设置为加密权限后,该区域只能被 CPU执行程序,而不允许 CPU读取该 Flash扇区的数据。因此,如果需要 CPU读取的数据存放在 Flash中,则对应的 Flash扇区不得设置为加密权限。
通常,CPU需要从 Flash读取的数据包括只读数据段(例如,使用 const修饰的全局变量),以及具有非零初始值的全局变量的初始值,这些变量的初始值会存储在 Flash区域,并在 MCU启动时复制到 RAM区域。因此,不允许设置为加密权限的代码区域包括:
- (1) CONST(RO-DATA):只读数据区域。
- (2) RW:可读写数据段。具有非零初始值的全局变量在编译时会被存放到代码中并与其他数据一起存储,电源开启后会从 Flash复制初始值到 RAM。
由此可知,唯一允许被加密的所存放在 Flash的段是 text段,即代码段。其他数据段所在的 Flash扇区均不允许被加密。
G32R5xx安全启动功能如何使用
安全启动的操作流程
- 配置安全启动的起始扇区权限为 Zone1 ExeOnly权限。
- 配置芯片的 CMACKEY值。芯片的 CMACKEY值存储在 OTP区域,地址为 0x0810B020,长度为 128字节。芯片出厂时,CMACKEY值默认为全 FF。
- 对用户编译生成的应用程序的原始 bin文件,根据用户设置的 CMACKEY值,使用 Geehy_Bin工具生成带有 Golden CMAC Tag值的 bin文件。
- 把带有 Golden CMAC Tag值的 bin文件烧录下载到芯片。
- 根据表格 1的安全启动选项配置表,设置所需要的 BootMode值(在调试阶段,建议使用仿真 BootMode值设置为安全启动模式)。
- 按复位键或者上电复位,执行应用程序。
242
