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

RP2350 (générique / cartes basées sur le 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)

Objectifs

Le RP2350 est la première puce « grand public » de Raspberry Pi avec une vraie pile sécurité : Arm TrustZone-M étendu système (périphériques, GPIO et canaux DMA individuellement assignables aux domaines Secure/Non-Secure, 8 régions SAU + 8+8 régions MPU par cœur), boot signé (SHA-256 + ECDSA secp256k1, empreinte de clé publique dans l'OTP 8 Ko, compteur anti-recul), clés de chiffrement dans l'OTP, accélérateur matériel SHA-256, TRNG, coprocesseur de redondance (RCP) et détecteur de glitchs contre l'injection de fautes (datasheet RP2350, §10, §3.6.3, §12.12–12.13). Ce tuto : comprendre la chaîne de confiance, ses deux gros compromis, et l'ordre des manipulations — parce que l'OTP est irréversible.

Matériel

La chaîne de confiance

  1. Boot ROM immuable : à chaque reset, il lit un descripteur de signature en flash ; si le secure boot est désactivé (état par défaut), il boote n'importe quoi — c'est ce qui rend le drag-and-drop UF2 possible.
  2. Empreinte de clé dans l'OTP : activer le secure boot = graver l'empreinte de ta clé publique dans l'OTP. Toute image non signée avec la clé privée correspondante est refusée. Il n'existe pas de « off » à l'OTP : une clé perdue = plus aucun firmware possible sur la puce.
  3. Anti-recul : le compteur OTP interdit de revenir en arrière (protection contre le downgrade) — prévois ta politique de version AVANT de graver.
  4. TrustZone-M : découpe SAU/MPU par cœur, et surtout la granularité système — tu peux mettre le contrôleur USB en Non-Secure et ta clé en Secure. Attention errata E3 sur RP2350A (QFN-60) : GPIO_NSMASK0 applique les permissions Non-Secure des PADS aux mauvaises broches (le mapping ignore le remap des pads QFN-60, datasheet Appendix D.1.1) — relis l'errata avant de concevoir un partitionnement Secure/Non-Secure sur un RP2350A.

Les deux compromis à connaître

Vérification attendue

Sur la carte de test : image signée bootée, image modifiée d'un octet refusée (la LED de statut ou le code retour bootrom le signale).

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels