Secure Boot Chain¶
meta-tolomeo implements a two-stage authenticated boot chain: the first stage is hardware-specific and covers the path from the silicon BootROM to the bootloader, the second is generic and covers the path from U-Boot to the Linux kernel. Each stage authenticates the next component in the chain before handing over execution.
The Trust Chain¶
BootROM → SPL / U-Boot (Stage 1 — NXP HAB4 or AHAB)
U-Boot → Linux kernel (Stage 2 — U-Boot FIT signature)
Stage 1 is enforced by hardware: the i.MX BootROM will not execute a bootloader container that does not pass signature verification. Stage 2 is enforced by U-Boot firmware: a kernel FIT image that does not carry a valid RSA signature is rejected before the kernel is started.
Both stages are gated by the secure-boot distro feature and are inactive in
development builds that do not set it.
Stage 1 — BootROM to Bootloader (NXP i.MX)¶
The i.MX BootROM holds a hash of the Super Root Key (SRK) set burned permanently into device fuses during manufacturing. At every power-on, the BootROM verifies the cryptographic signature of the SPL/U-Boot container against that fused hash before transferring execution. A container that fails verification causes the BootROM to halt.
meta-tolomeo supports two NXP signing protocols depending on the i.MX device family:
HAB4 — i.MX8M (mx8-generic-bsp)¶
High Assurance Boot version 4, used on i.MX8M Plus and related i.MX8M variants. The
signing tool is the NXP Code Signing Tool (CST). The U-Boot config fragment enables
CONFIG_IMX_HAB.
External reference: NXP Code Signing Tool (CST) documentation
AHAB — i.MX9 (mx9-generic-bsp)¶
Advanced High Assurance Boot, used on i.MX93 and other i.MX9 variants. Authentication
is delegated to the EdgeLock Enclave (ELE), a dedicated security subsystem on the SoC.
The signing tool is the NXP Secure Provisioning SDK (SPSDK). The U-Boot config fragment
enables CONFIG_AHAB_BOOT.
External references:
Stage 2 — U-Boot to Linux Kernel (FIT Signature)¶
The Linux kernel, device trees, and optional firmware are packaged into a FIT (Flattened Image Tree) image at build time. The build system signs the FIT image with an RSA private key and embeds the corresponding public key into U-Boot's own device tree.
At boot time, U-Boot reads the embedded public key and verifies the FIT image signature before loading the kernel. A FIT image without a valid signature, or signed with an unknown key, is rejected.
This mechanism is not NXP-specific. It applies to any BSP that inherits
kernel_fitimage_mcore and enables UBOOT_SIGN_ENABLE.
The secure-boot Distro Feature¶
Adding secure-boot to DISTRO_FEATURES is the single switch that activates the full
chain:
- Enables the HAB/AHAB U-Boot config fragment (
CONFIG_IMX_HABorCONFIG_AHAB_BOOT) - Enables FIT image signing at build time (
UBOOT_SIGN_ENABLE = "1") - Activates the
imx-boot-signaturerecipe, which produces the signed NXP boot image
Builds without secure-boot produce unsigned images and are suitable for development
and emulation targets (e.g. QEMU) where hardware authentication is not available.
Development Keys¶
DAVE provides pre-generated key material under devel-keys/ for build validation
without requiring production key infrastructure:
| Material | Purpose |
|---|---|
devel-keys/secure-boot/ahab/spsdk_ahab.yaml |
AHAB signing configuration for mimx9352 |
devel-keys/secure-boot/ahab/crts/ |
SRK certificate set SRK0–SRK3 (secp384r1) |
devel-keys/secure-boot/ahab/keys/ |
SRK private keys SRK0–SRK3 (secp384r1) |
devel-keys/fitImage-sign.crt |
X.509 certificate for FIT image signing |
devel-keys/fitImage-sign.key |
RSA private key for FIT image signing |
Warning
The keys in devel-keys/ are publicly known and exist only for build
validation. Never fuse or use them on a production device.
See also
- Enable NXP Authenticated Boot — HAB4/AHAB integration steps
- Enable FIT Image Signing — generic FIT signing integration
- Secure Boot Reference — variables, includes, classes, and recipes