🛠 Secure boot et TrustZone-M sur RP2350 : signer son firmware sans se faire avoir

RP2350 (genérico / placas basadas en RP2350) · avance · Schéma : IMG-rp2350-generic-avance-1-rp2350-secure-boot-trustzone.svg — puce RP2350 avec bloc boot ROM vérifiant une signature ECDSA secp256k1, mémoire OTP avec empreinte de clé publique et compteur anti-recul, domaines Secure/Non-Secure séparés par la SAU, cœurs RISC-V barrés (désactivés par le secure boot)

Objetivos

El RP2350 es el primer chip «de consumo» de Raspberry Pi con una pila de seguridad real: Arm TrustZone-M extendido al sistema (periféricos, GPIO y canales DMA asignables individualmente a los dominios Secure/Non-Secure, 8 regiones SAU + 8+8 regiones MPU por núcleo), arranque firmado (SHA-256 + ECDSA secp256k1, huella de clave pública en el OTP de 8 KB, contador anti-retroceso), claves de cifrado en el OTP, acelerador de hardware SHA-256, TRNG, coprocesador de redundancia (RCP) y detector de glitches contra la inyección de fallos (datasheet RP2350, §10, §3.6.3, §12.12–12.13). Este tutorial: comprender la cadena de confianza, sus dos grandes compromisos y el orden de las operaciones — porque el OTP es irreversible.

Material

La cadena de confianza

  1. Boot ROM inmutable: en cada reinicio, lee un descriptor de firma en la flash; si el arranque seguro está desactivado (estado predeterminado), arranca cualquier cosa — esto es lo que hace posible el arrastre y suelta de UF2.
  2. Huella de clave en el OTP: activar el arranque seguro = grabar la huella de tu clave pública en el OTP. Cualquier imagen no firmada con la clave privada correspondiente es rechazada. No existe un «apagado» para el OTP: una clave perdida = ningún firmware posible en el chip.
  3. Anti-retroceso: el contador OTP impide volver a versiones anteriores (protección contra el downgrade) — define tu política de versiones ANTES de grabar.
  4. TrustZone-M: partición SAU/MPU por núcleo, y sobre todo la granularidad del sistema — puedes poner el controlador USB en Non-Secure y tu clave en Secure. Atención al errata E3 en RP2350A (QFN-60): GPIO_NSMASK0 aplica los permisos Non-Secure de los PADS a los pines incorrectos (el mapeo ignora el remapeo de los pads QFN-60, datasheet Appendix D.1.1) — revisa el errata antes de diseñar una partición Secure/Non-Secure en un RP2350A.

Los dos compromisos a conocer

Verificación esperada

En la placa de prueba: imagen firmada arrancada, imagen modificada en un byte rechazada (el LED de estado o el código de retorno del bootrom lo indican). SIN VERIFICAR: el procedimiento exacto de escritura OTP (comandos pico-bootrom, páginas involucradas) — sigue la documentación de seguridad del SDK, no improvises con el OTP.

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales