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

    文章

    8258

    浏览量

    162530
  • ROM
    ROM
    +关注

    关注

    4

    文章

    578

    浏览量

    88563
  • 软硬件
    +关注

    关注

    1

    文章

    318

    浏览量

    20086
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    新唐科技发布升级版NuMicro M2354微控制器

    新唐科技正式推出升级版 NuMicro M2354 微控制器系列,专为服务 RoT、智能城市、物联网与智能电表等应用量身打造。
    的头像 发表于 10-30 17:49 959次阅读

    新唐科技NuMicro M253系列微控制器盘点

    NuMicro M253 系列产品是基于Armv8-M指令集架构的 Arm Cortex-M23 内核的MCU,主频可达 48 MHz,支持
    的头像 发表于 09-30 09:27 1038次阅读
    新唐科技<b class='flag-5'>NuMicro</b> <b class='flag-5'>M</b>253<b class='flag-5'>系列</b><b class='flag-5'>微控制器</b>盘点

    兆芯加入基础软硬件产品漏洞生态联盟

    近日,CCS 2025成都网络安全技术交流系列活动——国家漏洞库(CNNVD)基础软硬件产品漏洞治理生态大会在成都成功举办。来自国家关键基础设施单位、基础软硬件企业、高校科研机构的数百
    的头像 发表于 09-22 13:50 633次阅读

    新唐 M2354 系列,RTU 应用的最佳选择

    M2354 系列框图: 新唐 M2354 系列具有引人注目的功能,使其成为 RTU 应用的最佳选择: 1. 安全性高
    发表于 09-05 08:25

    无法将 XOM 设置为非安全区域,为什么?

    M2351 中,我将非安全边界设置为0x40000。 非安全区域应为 0x10040000 ~ 0x1007ffff。 然后,我将 XOM 设置为 0x10060000,但它失败了。 非
    发表于 08-27 07:01

    求助,关于PFM-M2351开发环境设置的问题求解

    。 发展似乎需要三样东西。 1. NuMicro Cortex-M2351 系列 2. 凯尔 MDK Plus v5.24 3. 新唐 Nu-Link 调试 我知道新唐提供 ke
    发表于 08-27 06:49

    NuMicro®系列微控制器中具有相同模块的ADC的每个通道是否可以同时采样?

    NuMicro®系列微控制器中具有相同模块的ADC的每个通道是否可以同时采样?
    发表于 08-26 08:08

    如何使用 M032 系列微控制器 (MCU) 实现 USB 磁盘和 FatFs 功能?

    使用 M032 系列微控制器 (MCU) 实现 USB 磁盘和 FatFs 功能
    发表于 08-20 06:40

    如何使用 M460 系列微控制器 (MCU) 接收和打印 CANFD 总线上的所有消息?

    使用 M460 系列微控制器 (MCU) 接收和打印 CANFD 总线上的所有消息
    发表于 08-20 06:17

    如何将 FreeMODBUS 从属 RTU 模式移植到 M032 系列微控制器

    如何将 FreeMODBUS 从属 RTU 模式移植到 M032 系列微控制器
    发表于 08-19 07:20

    如何在 M55M1 系列微控制器低功耗模式使用运动检测功能?

    如何在 M55M1 系列微控制器低功耗模式使用运动检测功能。根据物体检测结果,系统将动态启用或禁用运动检测块,实现最佳性能和能效。
    发表于 08-19 06:56

    新唐科技推出NuMicro M2A23系列微控制器

    新唐科技推出 NuMicro M2A23 系列微控制器,专为汽车与工业应用设计。该系列能够在高达 125°C 的环境温度下运行,并具备多达三
    的头像 发表于 04-16 16:40 969次阅读

    新唐科技微控制器在触控应用方面的优势

    随着物联网 (IoT) 和智能家居应用的蓬勃发展,触控按键技术已成为人机互动界面的关键。搭载电容式触控按键技术的新唐科技NuMicro 微控制器系列,提供防水、抗噪及高灵敏度的触控体验,为各类
    的头像 发表于 02-27 15:52 1054次阅读

    新唐科技M2351系列MCU引领物联网安全时代

    新唐科技的NuMicro M2351系列作为首批基于Arm Cortex-M23内核的微控制器,通过PSA Certified Level
    的头像 发表于 02-26 15:53 772次阅读
    新唐科技<b class='flag-5'>M2351</b><b class='flag-5'>系列</b>MCU引领物联网<b class='flag-5'>安全</b>时代

    兆芯CPU近期软硬件适配动态

    近期,兆芯携手多家软硬件合作伙伴,基于开先KX-7000、开胜KH-40000等自主CPU和信创操作系统环境,持续推进应用生态建设工作,顺利完成医疗自主终端、商用收款机、服务操作系统、数据库管理
    的头像 发表于 01-15 15:33 999次阅读