🛠 Secure boot RSA-3072 et chiffrement de la flash

ESP32-S2 · avance · Schéma : IMG-esp32-s2-avance-2-esp32-s2-secure-boot-chiffrement.svg — ESP32-S2 reliée en USB à un ordinateur, cadenas et bouclier au-dessus de la puce, icône de clé RSA-3072 et puce de flash chiffrée en AES-XTS.

Objectifs

Sécuriser une production ESP32-S2 : activer le secure boot v2 (signature RSA-3072, la S2 n'accepte que cette taille de clé) qui refuse tout firmware non signé, et le chiffrement de la flash (AES-XTS) qui rend la lecture de la puce inutile sans la clé. Opérations irréversibles via les eFuses : à tester sur une carte de développement dédiée.

Matériel

Code complet

// Verification a l'exécution de l'état de sécurité (Arduino-ESP32)
#include <esp_secure_boot.h>
#include <esp_flash_encryption.h>

void setup {
  Serial.begin(115200);
  delay(1000);
  Serial.printf("Secure boot actif      : %s\n",
                esp_secure_boot_enabled ? "OUI" : "NON");
  Serial.printf("Chiffrement flash actif : %s\n",
                esp_flash_encryption_enabled ? "OUI" : "NON");
}

void loop { delay(5000); }

Commandes de frittage des eFuses (à lire deux fois avant d'exécuter) :

# 1. Genere la cle de signature RSA-3072 (secure boot v2)
espsecure.py generate_signing_key --version 2 ma_cle.pem
# 2. Convertit le binaire signe
espsecure.py sign_data --version 2 --keyfile ma_cle.pem --output firmware_signed.bin firmware.bin
# 3. Grave la cle dans les eFuses puis active le secure boot
espefuse.py --port COM3 burn_key secure_boot_v2_0 ma_cle.bin
espefuse.py --port COM3 burn_efuse SECURE_BOOT_ENABLE
# 4. Chiffrement de la flash (AES-XTS)
espefuse.py --port COM3 burn_key flash_encryption cle_flash.bin
espefuse.py --port COM3 burn_efuse FLASH_CRYPT_CONFIG 0xF
espefuse.py --port COM3 burn_efuse FLASH_ENCRYPT

Vérification attendue

Après frittage, le sketch d'état affiche « Secure boot actif : OUI » et « Chiffrement flash actif : OUI ». Un firmware non signé refuse de démarrer (le moniteur série reste muet ou affiche un échec de boot). Une tentative de lecture de la flash avec esptool ne sort que des données chiffrées illisibles.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels