i.MX RT1170 Secure Boot

概述

介绍如何使用 RT1170 芯片的 High Assurance Boot (HAB) 功能实现 Secure Boot 功能。

本文包含 HAB 组件的功能介绍,以及简单使用步骤。

HAB 组件介绍(参考《IMXRT1170RM》sec 7.5&10.12)

由 Boot ROM 所提供的高可靠性引导功能 High-Assurance Boot (HAB),主要功能是在引导过程中检测并阻止非授权程序运行。

HAB 使用以下两种方式实现安全引导:

使用数字签名的方式验证程序权限。
在片外对程序进行加密,执行时实时解密通过将加载到RAM的程序解密。
以上两种方式有三种组合使用方式,即:A / B / A+B。

数字签名

图 1 展示了使用 HAB 进行数字签名校验的方法。

上半部分展示在片外对程序进行签名的方式,包含两个步骤:1. 计算程序的哈希值;2. 使用私钥对哈希值进行签名;3. 将程序与签名都写入 Flash 中。

下半部分展示在片内引导过程中验证程序签名的步骤:1. 计算程序的哈希值;2. 使用公钥对签名进行解密获得哈希值;3. 比较计算和解密所得的哈希值。

哈希算法使用 SHA-256 算法,RSA 签名的 Key 长度为 1024 - 4096 Bit。

图 1 程序签名和校验流程

程序加密

图 2 展示了使用 On-The-Fly AES Decryption (OTFAD) 模块对 Xip 的程序进行解密的方式。

这种方式提前将程序进行加密,而后使用 OTFAD 模块,在程序执行过程中,动态解密 Flash 中读取的程序。

OTFAD 模块通过 HAB 功能在引导的时候使能,据说不影响程序的执行性能。

图 2 程序解密执行

Bootable IMage组成介绍(参考《AN13250》sec 2.1)

要创建可引导镜像,需要将多个结构与应用程序组合,放置到启动存储器中。如图 3 Boot Image Layout 为从 FlexSPI Nor 储存器启动的可引导镜像。

图 3 引导镜像内容

OTAD/IEE Key blobs

包含 OTFAD 或 IEE 的加密密钥和上下文结构。放置在外部存储器中的偏移量 0x00000000 处。 适用于 FlexSPI NOR XiP 启动。

Firmware Configuration Block (FCB)

包含 FlexSPI 控制器的配置信息。对于 FlexSPI NOR,放置在偏移量 0x00000400 处。

Physical Unclonable Function (PUF) key store

包含用于 OTFAD 密钥 blob 解包的密钥加密密钥 (KEK)。不支持用于 IEE 密钥 blob 解包的 KEK。

Image Vector Table (IVT) and boot data

镜像向量表由位于固定地址的指针组成,BootROM 通过这些指针确定程序镜像及其他组件的位置。引导数据指示程序映像位置、程序映像大小和插件标志。

对于 FlexSPI NOR,放置在偏移量 0x00001000 处。

Device Configuration Data (DCD)

包含外围设备的配置信息。主要用于配置 SEMC 连接的 SDRAM,也可用于配置 FlexSPI 连接的 HyperRam。

Application

用户程序镜像。

Command Sequence File (CSF)

包含 HAB 进行代码认证所使用的数据命令,包括公钥、签名、证书和授权。

Data Encryption Key (DEK) blob

本区域由 SNVS 主密钥加密保护,包含一个 DEK,用于 HAB 加密启动模式。

几种启动方式的实现

通过生成不同的 Bootable IMage 来告知 BootROM 用户程序如何启动。

OTAD/IEE KeyFCBPUFIVT & BDDCDAPPCSFDEK
UnsignedAAOA
AuthenticatedAAOAA
OTFAD Encrypted UnsignedAAAAEOEAE
OTFAD Encrypted AuthenticatedAAAAEOEAEA

A. 表示需要填写区域

O. 表示选择填写区域

E. 表示加密储存区域

接下来将说明如何生成各种 Bootable IMage 的一种方式。

不签名不加密启动

Step1. 使用 GCC 环境编译生成不包含头文件的结果(例如elf)

Step2. 使用 objcopy 程序生成 S19 格式的源镜像

Step3. 参考 SPT 编辑所需要的 BD 文件(elftosb 的配置文件)

_______ BD 文件中需要包含 IVT 和 DB 所需的信息

Step4. 使用 elftosb 生成 Bootable IMage

Step5. 通过 SW1 切换 BOOT_MODE[1:0] 为 01 并复位

Step6. 使用 blhost 下载 Flashloader 镜像到 RAM 中执行

Step7. 使用 blhost 下载自定义 FCB 到 0x30000400 区域

Step8. 使用 blhost 下载 Bootable IMage 到 0x30001000 区域

Step9. 通过 SW1 切换 BOOT_MODE[1:0] 为 10 并复位

只签名不加密启动

Step1. 使用 GCC 环境编译生成不包含头文件的结果(例如elf)

Step2. 使用 objcopy 程序生成 S19 格式的源镜像

Step3. 使用 SPT 生成密钥对

Step4. 参考 SPT 编辑所需要的 BD 文件(elftosb 的配置文件)

_______ BD 文件中需要包含 IVT 和 DB 所需的信息

_______ 另外需要包含 CSF 区域生成所需的各项信息

Step5. 使用 elftosb 生成 Bootable IMage

Step6. 如果使用已签名的芯片,Flashloader 镜像也需要签名

Step7. 通过 SW1 切换 BOOT_MODE[1:0] 为 01 并复位

Step8. 使用 blhost 下载 Flashloader 镜像到 RAM 中执行

Step9. 使用 blhost 将 SRK_fuses 写入 fuses(0xB00 - 0xB70) 区域 Super Root Key Hash 和 HAB Security Configuration(写入后将会锁定)

Stepa. 使用 blhost 下载自定义 FCB 到 0x30000400 区域

Stepb. 使用 blhost 下载 Bootable IMage 到 0x30001000 区域

Stepc. 通过 SW1 切换 BOOT_MODE[1:0] 为 10 并复位

不签名只加密启动

由于先试验了只签名不加密启动,试验用的芯片锁定为签名模式。

既签名又加密启动

Step1. 使用 GCC 环境编译生成不包含头文件的结果(例如elf)

Step2. 使用 objcopy 程序生成 S19 格式的源镜像

Step3. 使用 SPT 生成密钥对

Step4. 参考 SPT 编辑所需要的 BD 文件(elftosb 的配置文件)

_______ BD 文件中需要包含 IVT 和 DB 所需的信息

_______ 另外需要包含 CSF 区域生成所需的各项信息

Step5. 使用 elftosb 生成 Bootable IMage

Step6. 如果使用已签名的芯片,Flashloader 镜像也需要签名

Step7. 使用 image_enc 进行加密,需要设定 KEK + UserKey + Counter + ProtectRegionStart + ProtectRegionLength 等参数

Step8. 通过 SW1 切换 BOOT_MODE[1:0] 为 01 并复位

Step9. 使用 blhost 下载 Flashloader 镜像到 RAM 中执行

Stepa. 使用 blhost 将 KEK 写入 fuses(0x1000 - 0x1030) 区域 OTFAD KEK(写入后将会锁定)

Stepb. 通过 SW2 将 BOOT_CFG1[1] 设置为 1

Stepc. 使用 blhost 下载自定义 FCB 到 0x30000400 区域

Stepd. 使用 blhost 下载 Bootable IMage 到 0x30001000 区域

Stepe. 使用 blhost 下载 OTFAD key 到 0x30000000 区域

Stepf. 通过 SW1 切换 BOOT_MODE[1:0] 为 10 并复位

MCUXpresso Secure Provisioning Tool

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值