概述

安全启动(Secure Boot)是保障物联网设备安全的关键技术,其核心目的是确保设备只运行经过授权的固件,防止恶意代码植入或固件被非法篡改。 核心方法是利用非对称加密的私钥签名、公钥验签技术:开发者使用私钥对固件进行签名;芯片在启动时使用公钥来验证签名,从而确保固件的完整性和真实性。

当设备上电启动时,芯片内部固化的 Boot ROM 代码会自动检查即将运行的固件是否拥有合法的数字签名: 验证通过则确认固件来源可信,系统继续执行后续启动流程;验证失败则认为固件不可信,清除敏感状态并终止启动。

这一过程通过"信任链(Chain of Trust)"机制实现——信任关系从不可篡改的硬件(ROM)开始,通过逐级验签延伸至最终的应用固件。从而确保在整个运行周期内,所有的固件都是可信的。

Ameba 系列 IC 支持不同的签名算法:

算法种类

算法参数

EdDSA

ed25519

了解 Ameba 系列 IC 支持的签名算法后,下面介绍安全启动的原理与完整流程。

安全启动原理与流程

安全启动从 Boot ROM + OTP 构成的 ROT 开始,逐级传递。下图展示了完整的安全启动使用过程:

../../_images/secure_boot_diagram.svg

安全启动涉及开发、量产、运行三个环节,由不同的参与者在不同时间完成:

  • 开发阶段(开发者完成):

    • 生成非对称密钥对:私钥必须严格保密,并计算公钥哈希值。

    • 生成签名固件:使用私钥对原固件进行数字签名,生成包含公钥、签名、原固件哈希等元数据的 Manifest。Manifest 与原固件组合生成签名固件。

  • 量产阶段(产线完成):

    • 烧录公钥哈希值与使能位:将开发阶段生成的公钥哈希值烧录到芯片 OTP 的固定地址。同时烧录安全启动使能位,启用安全启动功能。

    • 烧录签名固件:将开发阶段生成的签名固件烧录到芯片的 Flash 存储中。

  • 运行阶段(芯片执行):设备上电后,Boot ROM 基于 OTP 中的公钥哈希,逐级验证各级固件的签名与完整性。验证通过则继续启动,验证失败则清除敏感信息并终止启动。

安全启动解决方案

Ameba SDK 提供完整的开箱即用安全启动解决方案。所有复杂的签名验签机制均已实现在 SDK 中, 开发者无需自行编写代码,只需要根据用户指南进行配置 SDK。 下图展示了芯片多级启动中的验签流程:

../../_images/boot_and_verification_process.svg

Ameba 系列 IC 采用多级启动流程,依次执行以下三个独立固件:

  • 第一阶段 - Boot ROM:设备上电后首先执行的是芯片内部 ROM ,物理上无法篡改。Boot ROM 从 Flash 读取 Bootloader 及其 Manifest,使用 OTP 公钥哈希验证 Manifest 中的公钥和签名。然后验证 Manifest 中存储的 Bootloader 固件哈希,验证通过后跳转执行 Bootloader,失败则清除敏感状态并终止启动。

  • 第二阶段 - Bootloader:从 Flash 加载的引导程序,负责后续固件的加载与安全验证。Bootloader 首先验证密钥证书(Key Certificate)的签名。证书中包含应用固件的公钥哈希,还允许新增多组自定义公钥哈希值。验证通过后,Bootloader 从证书中提取用于验证应用固件的公钥哈希,再使用该公钥哈希验证应用固件的 Manifest,最后计算并对比应用固件的哈希值。

  • 第三阶段 - Application:直接运行的用户应用程序,不负责固件验证。

前两个启动阶段都是执行在 Arm 安全世界。与单级验证相比,Ameba 采用的三级验证架构具备以下优势:

  • 密钥隔离:Bootloader 和应用固件使用不同的密钥对,即使应用固件密钥泄露,Bootloader 仍然安全。

  • 灵活更新:应用固件密钥存储在证书中,更新应用密钥无需修改 OTP。

  • 权限分离:开发者可以维护应用密钥,而 OEM 厂商控制 Bootloader 密钥,实现权限分离。