PEmicro-erlebniswelt

Programmazione di NXP i.MX RT10xx con Secure Boot

I programmatori di produzione Cyclone di PEmicro rendono la programmazione dei dispositivi NXP i.MX RT10xx con Secure Boot abilitato estremamente facile e sicura.  La Secure Boot Utility inclusa nel programmatore gestisce la firma, la crittografia dell'applicazione i.MX RT10xx e i dettagli della configurazione e del blocco del fusibile di sicurezza. Il programmatore supporta una connessione Secure JTAG estremamente veloce al dispositivo i.MX di destinazione.  

Le immagini di programmazione di produzione di PEmicro sono fortemente codificate e opzionalmente protette da crittografia,  in modo che i file del firmware dell'utente, le chiavi di crittografia, le impostazioni di backup e le password siano protette in modo sicuro dal momento in cui l'immagine viene generata durante il processo di produzione. Le immagini di programmazione possono essere limitate all'uso su Cyclone specifici con intervalli di date e numeri di programmazione specifici. 

Scopri di più sulle caratteristiche di sicurezza di i.MX e guarda una dimostrazione su come creare un'immagine di programmazione sicura per i.MX RT10xx.

 
Creazione di un'immagine di programmazione Secure Boot per i.MX RT1011

Il video seguente mostra come utilizzare l'Utilità di Creazione Immagini insieme all'Utilità di Avvio Sicuro integrata per generare un'immagine di programmazione autonoma che protegga un processore NXP i.MX RT1011:

secure-boot-video

panoramica delle principali funzioni di sicurezza di i.MX

1. Esegui solo firmware firmato

La serie i.MX RT supporta un processo di avvio sicuro in cui solo il codice applicativo firmato con certificati specifici può essere eseguito. In genere si genera una volta un set di quattro certificati di firma, che vengono memorizzati in una raccolta di PEKeyFile. Se programmi l'hash di questi certificati nei backup di un dispositivo i.MX RT con altre impostazioni appropriate, il dispositivo i.MX avvierà solo il codice firmato con uno di questi certificati.

L'effetto di questa funzione è che puoi programmare un dispositivo i.MX in fase di produzione affinché esegua solo il codice applicativo che hai firmato. Questo può essere utilizzato per evitare che codice dannoso, non autorizzato o corrotto venga eseguito nel tuo prodotto.

I certificati originali non sono programmati nei backup della macchina e come tali rimangono sotto la tua custodia privata. Solo i valori hash dei certificati sono programmati nei backup e solo la parte pubblica del certificato viene inclusa nella tua applicazione.

Una raccolta di PEKeyFile contiene l'insieme dei quattro certificati di firma e può essere associata a un numero qualsiasi di progetti di avvio sicuri.

NXP_imx_1

2. Crittografia del firmware dell'applicazione 

Oltre all'opzione del codice firmato, esiste un'opzione per criptare il codice dell'applicazione. Il codice dell'applicazione viene memorizzato in modo criptato nella memoria interna/esterna. Nella maggior parte dei casi, il processore esegue direttamente dalla memoria criptata in un processo chiamato Execute In Place (XIP). La decodifica viene eseguita al volo utilizzando i moduli BEE o OTFAD presenti sul chip. In alternativa, il codice crittografato può essere decrittografato all'avvio, memorizzato nella RAM e non disporre più di RAM sufficiente. L'esecuzione dell'applicazione dalla RAM può offrire moderati vantaggi in termini di prestazioni rispetto allo XIP crittografato. Tuttavia, se la RAM si trova all'esterno del processore, può essere facilmente letta. 

In genere, l'utente genera una chiave di crittografia AES una volta per un particolare prodotto (o linea di prodotti), che PEmicro chiama "chiave di lancio crittografata". Questa chiave viene talvolta utilizzata insieme ad altre chiavi casuali per criptare il codice dell'applicazione prima che venga memorizzato per il flashing. Se la chiave di lancio criptata  è programmata nei backup di un dispositivo i.MX RT con altre impostazioni appropriate  , il dispositivo i.MX può eseguire e decriptare il codice dell'applicazione criptato con la stessa chiave di lancio criptata  .

NXP_IMX_2

Non è necessario che un processore i.MX con una chiave di lancio crittografata programmata nei suoi backup esegua solo binari crittografati. Il processore può eseguire applicazioni firmate o firmate + crittografate.

Il vantaggio di criptare l'applicazione utente è che offre una forte difesa contro la copia. Se l'applicazione non è criptata e viene memorizzata nella memoria esterna, può essere copiata, firmata (o non firmata) con un altro certificato ed eseguita su un nuovo dispositivo i.MX vuoto. La crittografia dell'applicazione con la chiave di lancio crittografata impedisce questa operazione. Senza una copia della chiave di lancio crittografata, il codice dell'applicazione è illeggibile e, anche se copiato, un altro dispositivo i.MX non può decifrarlo. 

Una raccolta di PEKeyFile può contenere un numero qualsiasi di chiavi di lancio crittografate.

3. Limitare l'accesso JTAG con una password

Per impedire l'accesso al debug dell'unità dopo la programmazione di produzione, è possibile impostare dei fusibili per disabilitare il modulo di debug o abilitare la modalità JTAG sicura. Per la modalità JTAG sicura, l'hardware di debug/programmazione deve utilizzare una password durante la connessione. Senza la password appropriata, la modalità JTAG sicura non permette la lettura/scrittura della memoria e non consente l'accesso al codice tramite il modulo di debug. 

NXP_IMX_3
NXP_IMX_4

Se viene specificata la password corretta, è possibile utilizzare la normale modalità JTAG / SWD per eseguire il debug o la riprogrammazione dell'unità. 

Le utility PEmicro memorizzano le password JTAG insieme ai certificati di firma e alle chiavi di avvio crittografate in un unico file di acquisizione PEKeyFile (.peKeyFile). Il PEKeyFile memorizza un singolo set di quattro certificati di firma e un numero illimitato di password JTAG e chiavi di avvio crittografate. Molti progetti di avvio sicuro possono condividere gli stessi elementi di sicurezza.

L'accesso JTAG sicuro al dispositivo dopo la programmazione di fabbrica può essere utile per riprogrammare il dispositivo o per eseguire analisi dei guasti in un secondo momento.

PEMicro consiglia di abilitare la modalità JTAG sicura o di disabilitare completamente la porta JTAG se la sicurezza è importante. I programmatori Cyclone e le interfacce di debug multilink di PEMicro supportano la modalità JTAG sicura.

Una raccolta di PEKeyFile può contenere un numero qualsiasi di password I.MX

4. Bloccare i backup sensibili

Esistono backup con valori sensibili, in particolare quelli che contengono la chiave di lancio criptata e la password JTAG. Uno dei vantaggi della soluzione di programmazione PEmicro Cyclone è che le immagini di programmazione create sono completamente autonome e crittografate. Ciò significa che i valori delle chiavi sensibili sono protetti durante il processo di produzione e dalle persone che maneggiano i dati di programmazione. 

Una volta che le chiavi sono state programmate nel dispositivo di destinazione, si consiglia di bloccarle per una lettura futura. Se l'opzione "Blocca i fusibili" è abilitata nell'utilità di avvio sicuro, il Cyclone bloccherà i fusibili sensibili contro la lettura/scrittura subito dopo la programmazione. Il codice applicativo eseguito sull'unità e l'accesso tramite le interfacce di debug non possono leggere i valori di questi fusibili sensibili. 

NXP_IMX_5

Anche se le funzioni di firma, crittografia e password/disabilitazione JTAG dovrebbero impedire l'accesso alla lettura di questi backup, PEmicro raccomanda di limitare in modo permanente ("bloccare") l'accesso a questi backup sensibili per motivi di sicurezza.

Utilità di creazione di immagini e di avvio sicuro di PEmicro

L'utility di creazione immagini di PEmicro è un'interfaccia grafica che consente all'utente di definire tutti gli input necessari per creare un'immagine di programmazione stand-alone. Un'immagine eSAP di programmazione stand-alone contiene tutti i file del firmware, le definizioni di backup, le impostazioni di alimentazione, le impostazioni di debug, la serializzazione, gli algoritmi e altro ancora necessari durante la programmazione ed è crittografata per proteggerne il contenuto. L'utilità di creazione dell'immagine genera un file di configurazione (.CFG) che viene utilizzato dal SAP Image Compiler per creare l'immagine.

le applicazioni i.MX RT10xx create per la produzione richiedono impostazioni di sicurezza aggiuntive per facilitare la firma e la crittografia del codice dell'applicazione e la generazione di tutti i file di backup, chiavi, certificati e password necessari. Per gestire questi dettagli, PEMicro include l'utilità grafica Secure Boot Utility, comodamente integrata con l'utilità di creazione dell'immagine.

NXP_IMX_6

L'utilità di avvio sicuro crea/salva un file Secure Boot Project (.SBP) all'uscita, che viene poi utilizzato per creare parti dell'immagine eSAP. 

Impostazioni di sicurezza di i.MX RT consigliate per la produzione

L'utilità Secure Boot ha due tipi principali di impostazioni che influiscono sulla sicurezza delle applicazioni i.MX: 1) Impostazioni dell'applicazione e 2) Impostazioni del dispositivo. Le impostazioni dell'applicazione riguardano la firma e la crittografia del codice dell'applicazione, mentre le impostazioni del dispositivo si occupano di limitare l'accesso alle risorse del chip, come JTAG e fusibili sensibili. La modifica di molte di queste impostazioni cambierà il profilo di sicurezza del dispositivo i.MX RT. La buona notizia è che l'utilità di avvio sicuro ha una scheda Panoramica sulla sicurezza che analizza le impostazioni di avvio sicuro per individuare eventuali vulnerabilità. PEmicro consiglia di controllare la panoramica della sicurezza ogni volta che vengono apportate modifiche alle impostazioni di sicurezza nella Secure Boot Utility e di correggere eventuali vulnerabilità riscontrate. Ecco le impostazioni più importanti:

Per garantire che solo il codice firmato venga eseguito sul processore di destinazione, è necessario chiuderlo.

NXP_IMX_8

Per garantire che il codice programmato sia criptato e che il dispositivo di destinazione disponga delle chiavi necessarie per eseguire il codice criptato, la modalità di lancio sicuro deve essere impostata su OTFAD o BEE (a seconda del dispositivo si utilizza l'una o l'altra):

 

Per bloccare i backup sensibili (chiave di crittografia di avvio e password JTAG) per accedervi in futuro, la voce Blocca backup deve essere impostata su "Sì":

 

NXP_IMX_9
NXP_IMX_10

Lo stato JTAG deve essere disabilitato in modo permanente ("No Debug") o protetto da password ("Secure JTAG"):

Crittografia dell'immagine SAP consigliata (programmazione stand-alone) per la produzione

Un'immagine di programmazione stand-alone può essere crittografata al momento della sua creazione. Indipendentemente dall'uso della crittografia, l'utente non ha accesso diretto al contenuto dell'immagine di programmazione, poiché tutti i dati sono abilmente codificati e incorporati in un unico file. Aggiungendo uno strato di crittografia standard del settore, questo guscio protettivo viene notevolmente rafforzato. PEmicro raccomanda la crittografia nei casi in cui il cliente:

  1. Limitare l'uso dell'immagine di programmazione solo su specifiche unità Cyclone. Questi Cyclone devono essere equipaggiati con la stessa chiave crittografica utilizzata per criptare l'immagine.
  2. Limitare la programmazione a un intervallo di date o a un numero di programmazione specifici
  3. Rendere praticamente impossibile il reverse engineering dei contenuti dell'immagine di programmazione
NXP_IMX_11

Quando un'immagine criptata viene memorizzata sul disco rigido, ha l'estensione .esap (.sap è l'estensione dell'immagine non criptata). Le utilità di PEmicro e il display di Cyclone indicano chiaramente quando un'immagine è criptata.

modificare le impostazioni di avvio sicuro nell'Utilità di creazione immagini

 

L'utilità di avvio sicuro è integrata con l'utilità di creazione dell'immagine come segue:

NXP_IMX_12
NXP_IMX_13

il pulsante Collega / Crea progetto di avvio sicuro ti permette di specificare o creare un progetto di avvio sicuro e di collegarlo alla configurazione di creazione dell'immagine corrente. Il pulsante Modifica progetto di avvio sicuro lancia l'Utilità di avvio sicuro di  , che consente all'utente di modificare le impostazioni di avvio sicuro. Il pulsante Elimina consente di scollegare un progetto di avvio sicuro collegato. 

Ogni volta che il progetto di avvio sicuro viene editato/modificato tramite l'Utilità di creazione immagini o che viene cliccato il pulsante Rigenera sequenza di programmazione, l'utente può aggiornare lo script della sequenza di programmazione nella configurazione di creazione immagini per farlo corrispondere alle impostazioni del progetto di avvio sicuro. In genere si consiglia di aggiornare lo script della sequenza di programmazione, anche se le modifiche precedentemente apportate allo script della sequenza di programmazione andranno perse.  

La casella di controllo "Crea automaticamente binari firmati ..." durante il processo di creazione dell'immagine SAP "fa sì che il processo di creazione dell'immagine crei l'applicazione firmata o firmata + crittografata dall'applicazione non firmata inserita ogni volta che viene creata un'immagine eSAP, oltre a un file di backup contenente tutte le opzioni di sicurezza create in base al progetto Secure Boot collegato". Nell'esempio precedente,  evkmimxrt1010_iled_blinky_final.srec  e  evkmimxrt1010_iled_blinky_fuses.OPT  vengono creati ogni volta immediatamente prima che venga creata l'immagine di programmazione eSAP . 

Il processo di creazione di questo caso può essere visto qui:

NXP_IMX_14

In base alle impostazioni del file Secure Boot Project, il compilatore a riga di comando Secure Boot Utility genera dei file intermedi di output Flash/Fuse che vengono poi utilizzati dal SAP Image Compiler per creare l'immagine di programmazione standalone. Questi file intermedi sono:

NXP_IMX_15

File di applicazione protetto:  Si tratta di un file S-Record che contiene tutti i dati dell'applicazione, le tabelle richieste dal boot loader per avviare l'applicazione e tutte le firme e gli hash appropriati necessari per avviare la modalità appropriata. Il binario dell'applicazione di partenza e i certificati/chiavi specifici utilizzati per criptare/firmare i dati dell'applicazione sono specificati nel file Secure Boot Project.

NXP_IMX_16

File di configurazione per i backup aggregati di  : Si tratta di un file di opzioni (.opt) che descrive l'intero set di backup da programmare come parte del processo autonomo. Include backup personalizzati oltre a quelli necessari per implementare la selezione di sicurezza nel file Secure Boot Project.

Questo riferimento nello script della sequenza di programmazione nella configurazione di creazione dell'immagine fa sì che questi file binari intermedi vengano catturati nell'immagine di programmazione eSAP e utilizzati per programmare il processore di destinazione. Nell'esempio precedente, il file dell'applicazione firmata viene programmato con l'algoritmo di programmazione della flash esterna e il file del fusibile viene programmato con l'algoritmo OTP i.MX RT1011 (One Time Programmable Fuse Region). Una volta importato dal Secure Boot Project, lo script può essere modificato. In questo modo è possibile apportare modifiche dettagliate alla sequenza di programmazione utilizzata nell'immagine eSAP.

Si noti che questi file di output intermedi sono referenziati nello script di programmazione generato automaticamente e importato nella configurazione di creazione dell'immagine:

NXP_IMX_17

PEmicro Ciclone FX Universale