0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

微控制器安全起动 (Secure Boot) 的软硬件整合作法 – 以NuMicro M2351系列为例

jf_pJlTbmA9 来源:新唐MCU 作者:新唐MCU 2023-10-26 17:26 次阅读

Secure Bootloader 是一段被写在 Mask ROM 内无法被存取和更改的可开机程序代码。系统经由配置区设定为从 Secure Bootloader 启动后,便会启动 Secure Boot 验证机制,对存放在Flash Memory安全区域内的程序代码做开发者身分认证和代码完整性的验证。当 Secure 区域代码通过 Secure Boot 验证后,系统才会跳至 Secure 区域内执行被验证过的受保护代码,例如下图所示。

wKgZomUD6oCAXgffAABCijeXHfw935.png

如果下一阶段的启动代码没通过 Secure Boot 验证的检测,此时 Secure Bootloader 会执行USB/UART1 command 模式,等待接收并处理从 Secure ISPTool USB/UART1 接口送进来的 command。

另外在 Secure Bootloader 内有开放部分的 API,让程序开发人员可以直接使用这些已经在Secure Bootloader 代码内有提供的功能。

wKgaomUD6oKAF85zAABc_CXQi8s045.png

本文将以M2351为范例介绍Secure Bootloader 和整个 M2351 内存之间的关系开始,之后会说明如何配置启动 Secure Bootloader、Secure Bootloader 工作频率、如何启动 Secure Boot 验证以及Secure Boot 验证时必要的配置和验证流程。最后会介绍 USB/UART1 command 模式的功能和特性。

位置和属性

Secure Bootloader 代码被预写在 32KB Mask ROM 内,位置落在 0x0080_0000 ~ 0x0080_7FFF 间的 Secure 区域内,并被配置为 Execute-only memory (XOM) 属性,因此这段代码是无法被更改以及存取的。另外在 Secure Bootloader 运行过程中,会需要用到位于 0x2000_C000 至 0x2000_FFFF 共 16KB 的 Secure 内存。

wKgZomUD6oOAY8nhAAAwdm1KDaE880.png

起始开机区选择

M2351 User Configuration Block 是可以配置和系统启动选项相关的配置区块。在芯片上电后,CPU 执行任何代码之前,可以预先执行照配置区内所设定的动作。

因此透过更改配置区内 CBS (CONFIG0[7]) 和 MBS (CONFIG0[5]) 的设定,便可决定 M2351 在上电后的起始开机区域为何。

如要规划从 Secure Bootloader 启动开机,则只需将 MBS 配置为 0 后再做系统重置即可。否则系统起始开机区会由 CBS 的设定值来决定从 APROM 或 LDROM 启动。

wKgaomUD6oSAds1NAAAd5aIrW70100.png

Bootloader 工作频率

当起始开机区运行在 Secure Bootloader 时,系统的工作频率会切换为 48MHz。

如为有支持 USB 功能的芯片型号时,Secure Bootloader 启动后会先检测外部 HXT-12MHz 频率误差是否有小于 6% 后,再决定系统工作频率的时钟源。如外部 HXT-12MHz 频率误差小于 6%,则优先以此 HXT-12MHz 来产生 PLL-48MHz 的时钟源,并将此 PLL-48MHz 当作系统工作频率和 USB 装置的工作时钟源。

如果芯片没有支持 USB 功能,或是外部 HXT-12MHz 频率误差过大,则会转换成以内部 HIRC-12MHz 当作 PLL-48MHz 的时钟源,来当作是系统工作频率或是 USB 装置的工作时钟源。

启动 Secure Boot 验证

系统从 Secure Bootloader 启动后,可以开启 Secure Boot 验证的机制。这目的主要是验证下一阶段要被执行的 Secure 代码是否有通过代码开发者身分认证和代码完整性的验证。如果要启动 Secure Boot 验证,除了设定从 Secure Bootloader 开机外,还需透过设置 Secure Region Lock 或者是 All Region Lock 来对系统的 Secure 区域做保护。

在 Secure 区域没有受到保护的情况下,Secure Bootloader 启动后是不会执行 Secure Boot 验证机制的。此时系统将会跳到 Secure Bootloader 内的 USB/UART1 command 模式,等待接收并处理 USB/UART1 command,而不会跳到其他区域内的代码作执行。

当启动 Secure Boot 验证下一阶段要被执行的 Secure 区域代码无误后,Secure Bootloader 将会参照配置区内 CBS (CONFIG0[7]) 的设定值来决定 CPU重启之后是要执行 Secure APROM 或是 Secure LDROM 内的代码。

如果 Secure Boot 验证过程中有错误产生,则系统也一样会跳到 Secure Bootloader内 的USB/UART1 command模式,等待接收并处理 USB/UART1 command。

下面表格为 MBS、SCRLOCK、ARLOCK、CBS 和系统起始开机区的关系表:

wKgaomUD6oWAY0LJAAA_HTOKpm0338.png

Secure Boot 配置说明

前面章节大致说明了如何将系统配置从 M2351 Secure Bootloader 启动,并开启 Secure Boot验证的功能。

下面的子章节将说明执行 Secure Boot 验证时的必要配置。

SBK – Secure Boot Key

Secure Boot Key (SBK) 是一把对被 Secure Boot 验证的 Secure 区域代码 SHA-256 Hash 值做加密的 AES 加密安全密钥。

SBK安全密钥有效长度为 256-bits,只能被写入一次,无法被读出

如要更新此SBK安全密钥,只能做全芯片擦除后再做更新的操作

一定要有配置过SBK,后续的Secure Boot验证流程才可能会成功

IB – Information Block

Information Block (IB) 为一块被写在 Secure APROM 后面的数据区块。

区块内容记录着被 Secure Boot 验证的受保护代码存放位置,以及一组 256-bits 的数字检查码。此 256-bits 数字检查码为受保护代码的 SHA-256 Hash 值再使用 Secure Boot Key (SBK) 做 AES-256 加密后的结果。

IB被记录在 Secure APROM 最后的 144 bytes

最多可配置 6 组受Secure Boot验证的代码区域,

IB内容内有一组checksum数据,可让Secure Bootloaer判断这组IB数据的正确性

如果没有正确的IB数据区块,Secure Bootloader将不会执行 Secure Boot验证流程

Secure Region Lock

当系统安全属性有被配置为开启 Secure 区域保护时,Secure Bootloader 才会执行Secure Boot 验证。此时系统内的 Secure 区域代码将不能经由 ICE 界面被存取。

将SCRLOCK[7:0] 或是 ARLOCK[7:0] 任一组配置区改为非 0x5A后,Secure 区域代码将无法被 ICE 界面存取

只能做全芯片擦除后才可以解除Secure区域的保护

在没有开启Secure区域保护的系统里, Secure Bootloader将不会执行 Secure Boot验证流程

Secure Boot 验证流程

下列步骤会说明 Secure Bootloader 执行 Secure Boot 验证的流程。

判断是否有开启 Secure 区域保护功能

判断是否有正确的IB 区块

依据 IB区块内的资料,判断要被保护代码的SHA-256 Hash值是否正确

如果代码的SHA-256 Hash值比对正确,CPU将会跳去执行这段代码。如果Hash值比对错误,则Secure Bootloader会进入USB/UART1 command模式,等待接收并处理 USB/UART1 command。

下列流程图将说明 Secure Bootloader启动后执行 Secure Boot 验证到最终执行 Trusted Boot Code 的过程,以及在 Secure Boot 验证过程中出现错误时的处理方式。

wKgZomUD6oeAEgiTAAA1NNjwDT0497.png

USB/UART1 Command 模式说明

M2351 Secure Bootloader 除了可执行 Secure Boot 验证外,另一个功能为进入 USB/UART1 command 模式做代码的更新和配置区的设定。

透过 PC 端的 Nuvoton NuMicro® Secure ISPTool 即可和 Secure Bootloader 内的 USB/UART1 command 模式做传输。

本章节将会对 USB/UART1 command 模式做基本的介绍。

USB 界面

在 M2351 Secure Bootloader 提供的 USB command 模式内,用户无需做任何事先的配置,只要透过 USB 线和 PC 端的 Secure ISPTool 做连接后即可正常工作。

UART1 界面

在使用 M2351 Secure Bootloader 提供的 UART1 command 模式前,则需将目前芯片 UART1 的脚位和 PC 串口做连接,之后便可和 Secure ISPTool 做正常联机。

可透过更改配置区CONFIG3[2:0] 来决定 UART1 command模式的脚位:

000:UART1_TXD (PB.7),UART1_RXD (PB.6)

001:UART1_TXD (PA.9),UART1_RXD (PA.8)

010:UART1_TXD (PF.0), UART1_RXD (PF.1)

011:UART1_TXD (PB.3),UART1_RXD (PB.2)

Others:UART1_TXD (PA.3),UART1_RXD (PA.2)

UART1/USB Command 流程

下列流程图说明在 Secure Bootloader 程序内的 UART1/USB Command 模式和 PC 端的 Secure ISPTool 联机后的主要处理流程。

wKgZomUD6oiACnwAAABAnAmqmoU673.png

以上透过 M2351 Secure Boot 验证的程序为例,详细解释系统开发商如何确保必须要受到保护的开机代码没有被更改,意即可以确认系统启动后的行为都在程序开发者的规划内,进而可以达到数据不被窃取的目的。另由于M2351系列为带TrustZone功能,对Non-secure 程序开发者而言,另可以使用 Secure Bootloader 提供的 Non-secure callable API 来实现对 Non-secure 内存的读写和其他配置区的设定。不需要 Secure 程序开发者额外提供这些应用的 API 给 Non-secure 程序开发者使用。

而终端产品的应用可能是没有预留 ICE 脚位的。此时如果有需要做代码的更新,即可以执行 Secure Bootloader Non-secure callable API 所提供的 USB/UART1 command模式和 PC 端的Nuvoton NuMicro® Secure ISPTool 来实现代码的更新。

欢迎关注新唐的产品官网以获取更多的讯息,我们也会继续介绍M2354系列的安全启动做法。

来源:新唐MCU
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微控制器
    +关注

    关注

    48

    文章

    6809

    浏览量

    147636
  • ROM
    ROM
    +关注

    关注

    4

    文章

    524

    浏览量

    84812
  • 软硬件
    +关注

    关注

    1

    文章

    269

    浏览量

    19053
收藏 人收藏

    评论

    相关推荐

    新唐科技推出一款NuMicro M091系列小尺寸高整合模拟微控制器

    面对智慧工厂传感器升级需求,新唐科技推出NuMicro M091系列小尺寸高整合模拟微控制器
    的头像 发表于 03-25 11:33 289次阅读

    Nuvoton的M2351板子,尝试启动Debugger时,显示ICE设备找不到怎么解决?

    Nuvoton的M2351板子,已经安装了Nuvoton的USBdriver, 可以用KEIL编译blinky demo app, 也可以用Drag Drop写入新的demo app,也可以正常运行
    发表于 01-17 08:23

    安全启动Secure Boot流程

    安全启动-Secure Boot 除了NSPE和SPE两个环境的沟通流程之外,secure boot也是Trusted Firmware很重
    的头像 发表于 11-02 16:45 614次阅读
    <b class='flag-5'>安全</b>启动<b class='flag-5'>Secure</b> <b class='flag-5'>Boot</b>流程

    ADC测量微控制器内部温度传感示例码

    应用:ADC测量微控制器内部温度传感示例码 BSP 版本: M051系列 BSP CMSIS v3.01.001 硬件:Nutini-E
    发表于 08-30 06:15

    如何使用HIDAPI连接Nu-Link2和访问NuMicro系列微控制器

    应用:在Linux平台上,该示例代码使用HIDAPI图书馆连接Nu-Link2和访问NuMicro系列微控制器。 Linux 版本: Ubuntu 20.04.3 LTS 硬件: N
    发表于 08-29 07:29

    基于Keras在NuMicro M480系列微控制器上实施汽车牌照识别

    应用程序:本文件介绍如何为深层学习技术编程Keras重量,开发汽车牌照识别,并帮助用户在NuMicro M480系列微控制器上实施汽车牌
    发表于 08-29 06:46

    NuMicro M2351系列微控制器安全特色与应用

    硬件安全和软件安全功能。有了这些好处,客户可以轻松的进行 IoT 节点设备的安全设计。除了 TrustZone 技术和 Nuvoton 安全微控制器
    发表于 08-28 06:24

    M2351常见的故障注入攻击方式及原理

    Glitch的攻击, 让系统执行指令出现错误,造成SAU配置和系统原先规划的不一致,以期在这当中寻找到可利用的漏洞。 我们试图攻击M2351微控制器在配置SAU过程中设定 Non-secu
    发表于 08-25 08:23

    NuMicro M2351的智能电表参考设计方案

    NuMicro®M2351,为首款同时通过Arm PSA Certified Level 1与PSA Functional API Certified的微控制器,在安全防护上我们
    发表于 08-25 08:22

    ADC测量微控制器内部温度传感示例码

    应用:ADC测量微控制器内部温度传感示例码 BSP 版本: M051系列 BSP CMSIS v3.01.001 硬件:Nutini-E
    发表于 08-23 06:21

    新唐对应四大物联网安全攻击的保护措施

    免受所有类型的漏洞影响,新唐近年来深耕微控制器安全领域,在基于 Cortex-M23 核心的 M2351 系列后在去年推出了新一代的
    发表于 08-21 08:14

    ISP保护固件的刻录安全

    安全,这时候就会将传输的通讯进行加密,保护其中的固件,这相当于建立一个安全通道,来进行ISP的传输与刻录的动作。 新唐科技的M2351
    发表于 08-21 08:12

    整合安全闪存NuMicro M2351SF的安全特色与应用

    整合安全闪存NuMicro M2351SF的安全特色与应用
    的头像 发表于 08-11 14:54 373次阅读
    <b class='flag-5'>整合</b><b class='flag-5'>安全</b>闪存<b class='flag-5'>NuMicro</b> M<b class='flag-5'>2351</b>SF的<b class='flag-5'>安全</b>特色与应用

    使用MDK开发M2351调试工具不支持nulink如何解决?

    在学习m2351发现MDK环境下debug工具只支持有限的几种,其中没有nulink,已经安装过nulink mdk的包,开发旧内核没有这个问题。
    发表于 06-25 08:19

    求助,NuMicro™ Cortex-M系列芯片支持那些USB控制器?

    NuMicro™ Cortex-M系列芯片在不同系列支持不同的USB控制器,包含USB 2.0全速设备
    发表于 06-14 06:24