Uso di EEPROM crittografata esterna per proteggere i dati in sistemi embedded

Di Bill Giovino

Contributo di Editori nordamericani di DigiKey

Alcuni microcontroller dispongono di EEPROM su chip. Ciò fornisce memoria dati non volatile e fa risparmiare spazio sulla scheda. Tuttavia, poiché la sicurezza dei dati è sempre più importante, molti sistemi embedded moderni hanno bisogno di una soluzione pratica per archiviare i dati in modo sicuro utilizzando una memoria non volatile in grado di resistente anche agli hacker esterni.

Questo articolo descrive come le EEPROM sicure a chip singolo permettono un'archiviazione dei dati non volatile, protetta e resistente agli hacker; tuttavia non entreremo nel merito della crittografia. Verrà invece presentato un esempio pertinente di una EEPROM sicura di un noto fornitore, spiegandone il funzionamento e come applicarla.

La necessità di una EEPROM sicura

Molti sistemi embedded si avvalgono normalmente di memorie dati non volatili, tipicamente EEPROM. La EEPROM può essere letta e scritta sotto il controllo del firmware e mantiene il suo stato anche quando viene tolta l'alimentazione dal sistema, contrariamente alla RAM che perde il suo stato allo spegnimento.

Anche se la EEPROM nei microcontroller si è sempre rivelata utile per memorizzare i dati del programma che devono essere conservati anche dopo lo spegnimento, di solito ha le stesse vulnerabilità di sicurezza della RAM. In alcuni moderni microcontroller a 8, 16 e 32 bit, esistono metodi di sicurezza che possono impedire la lettura di un'area della memoria dati sotto il controllo del firmware, o che possono bloccare la lettura dei dati da un'interfaccia esterna come un debugger. In passato questa sicurezza poteva essere adeguata, ma ora ci sono situazioni in cui gli hacker possono avere risorse finanziarie e tecniche, tempo e motivazioni per aggirarle efficacemente e accedere ai sistemi critici.

I moderni sistemi embedded si sono evoluti al punto che molte applicazioni richiedono ora una protezione dei dati più robusta. Ciò vale in particolare per alcuni nodi presenti all'interno di IoT, sistemi di sicurezza, comunicazioni da veicolo a veicolo, dispositivi medicali moderni e veicoli autonomi. La sicurezza dei dati può anche essere necessaria per prevenire semplicemente la clonazione del sistema. Si tratta di applicazioni in cui i dati delle EEPROM, compromessi da un attacco riuscito da parte di hacker malintenzionati, possono causare danni materiali o peggio.

In queste situazioni è necessaria una EEPROM altamente resistente agli hacker che dispongono di notevoli risorse. Per questi casi è disponibile una EEPROM ad alta sicurezza che può facilmente crittografare dati sensibili come password, hash di clonazione, dati di impronte digitali, informazioni di calibrazione dei sensori e dati biometrici.

Microchip Technology ha risolto questo problema di progettazione con una linea di dispositivi denominata CryptoAuthentication™. Se questo nome non vi è nuovo, è perché Microchip ha ereditato questa linea nell'ambito della sua acquisizione di Atmel. Uno di questi dispositivi è la EEPROM sicura da 32 kbyte ATAES132A (Figura 1).

Immagine della EEPROM seriale da 32 kbyte ATAES132A di Atmel

Figura 1: La EEPROM seriale da 32 kbyte ATAES132A di Atmel è progettata appositamente con funzioni di sicurezza per proteggere i dati e i registri interni. (Immagine per gentile concessione di DigiKey)

ATAES132A può essere usata come qualsiasi EEPROM seriale da 32 kbyte. Avendo piedinatura SPI e I2C standard, può sostituire le EEPROM seriali standard sui progetti esistenti senza alcuna modifica hardware. Pertanto, i progetti esistenti possono essere dotati facilmente di ulteriore sicurezza modificando solo il firmware dell'applicazione.

Tuttavia, offre anche protezione fisica, crittografia e altre funzionalità di sicurezza integrate che, se abilitate, proteggeranno i dati EEPROM e i registri interni dagli hacker meno determinati. I dati possono essere protetti utilizzando la crittografia AES di grado militare con un massimo di sedici chiavi a 128 bit.

Protezione fisica

Anzitutto, ATAES132A ha molti meccanismi di sicurezza meccanica per impedire il reverse engineering fisico del dispositivo. Il dispositivo è sensibile a determinati cambiamenti della temperatura ambiente, come i tentativi di "congelarlo" per mantenere il contenuto della memoria. Il dispositivo può rilevare tentativi di de-capping per esporre il die. Se la protezione di metallo che lo ricopre viene rimossa, il die rileva l'esposizione alla luce, il che può avviare un meccanismo per distruggere il contenuto della memoria.

Infine, i contenuti della memoria interna sono crittografati. Il dispositivo può anche includere meccanismi di sicurezza non divulgati, noti solo agli ingegneri Microchip perché Microchip mantiene riservate le loro specificità. Questa riservatezza fornisce alla memoria sicura una protezione fisica estesa, evitando allo sviluppatore di dover creare envelope complesse come barriera a difesa della EEPROM.

All'accensione, ATAES132A può essere configurata per interfacciarsi con la maggior parte dei microcontroller che utilizzano l'interfaccia SPI o I2C. Quando usata in modalità I2C, il pin chip-select non è utilizzato e deve essere collegato all'alimentazione o a terra. Quando configurata per la modalità SPI, viene usato come di norma chip-select.

Crittografia dei dati AES

La crittografia è implementata in ATAES132A tramite AES-CCM con una chiave a 128 bit. In parole semplici, i dati da crittografare vengono fatti passare attraverso una serie di funzioni matematiche complesse in cui vengono combinati con un numero a 128 bit programmato dallo sviluppatore del firmware. I complessi calcoli matematici eseguiti durante le operazioni di crittografia e decrittografia AES vengono tutti svolti da ATAES132A e, fatta eccezione per l'impostazione di alcune variabili e la selezione delle chiavi a 128 bit, questo processo non presenta difficoltà per lo sviluppatore del firmware, il che facilita notevolmente lo sviluppo del prodotto.

Mappa della memoria di ATAES132A

Il dispositivo può essere semplicemente utilizzato come EEPROM seriale standard non crittografata. Tuttavia, se uno sviluppatore utilizza le funzionalità di sicurezza avanzate, il dispositivo viene strutturato e utilizzato in modo molto diverso. Il modo più rapido per capire ATAES132A è esaminare la mappa della memoria, che è più profonda di quella di una EEPROM standard come si vede nella Tabella 1.

Intervallo di indirizzi di ATAES132A Descrizione
0000h-0FFFh Memoria EEPROM (dati) utente di 32 kbyte
1000h-EFFFh Riservato
F000h-F05Fh Registri di configurazione del dispositivo
F060h-F07Fh Registri di configurazione Cpimter
F080h-F0BFh Registri di configurazione delle chiavi
F0C0h-F0FFh Registri di configurazione delle zone di sicurezza
F100h-F17Fh Registri dei contatori di zona
F180h-F1DFh Memoria non crittografata FreeSpace di 96 byte
F1E0h-F1FFh Memoria non crittografata SmallZone di 32 byte
F200h-F2FFh Posizione di memoria della chiave
F300h-FDFFh Riservato
FE00h Buffer della memoria di comandi e risposte
FE01h-FFDFh Riservato
FFE0h Registro di ripristino dell'indirizzo I/O (solo scrittura)
FFE1h-FFEFh Riservato
FFF0h Registro di stato (solo lettura)
FFF1h-FFFFh Riservato

Tabella 1: La mappa della memoria di ATAES132A è più profonda di quella di una EEPROM seriale standard. (Fonte dei dati: Microchip Technology)

La maggior parte delle posizioni nella mappa della memoria vengono lette o scritte tramite i comandi I2C o SPI standard.

EEPROM e i registri di configurazione delle zone di sicurezza

I 32 kbyte della memoria EEPROM sono separati in sedici zone da 2 kbyte. Ogni zona di memoria può essere configurata individualmente con o senza sicurezza. Le impostazioni di sicurezza per ognuna delle 16 zone di memoria sono configurate nell'area dei registri di configurazione della sicurezza delle zone. Di seguito sono riportate le impostazioni di sicurezza base che possono essere specificate singolarmente per ognuna delle sedici zone da 2 kbyte:

  • Abilita/Disabilita la crittografia per leggere i dati
  • Abilita/Disabilita la crittografia per scrivere i dati
  • Abilita/Disabilita l'autenticazione per leggere i dati
  • Abilita/Disabilita l'autenticazione per scrivere i dati
  • Zona impostata in modo permanente per la sola lettura

Queste impostazioni offrono molta flessibilità quando si configura la sicurezza per un'applicazione. Una zona può essere configurata in modo che non utilizzi né la crittografia né l'autenticazione con accesso in lettura/scrittura, consentendo letture e scritture come qualsiasi EEPROM standard. Un'altra zona può richiedere crittografia e autorizzazione complete, garantendo una sicurezza elevata per i dati sensibili.

Registri di configurazione del dispositivo

Il comportamento generale del dispositivo viene impostato nella sua area dei registri di configurazione. Quest'area contiene anche alcune informazioni di sola lettura sul dispositivo. Fra le informazioni vi è anche un numero seriale a 32 bit usato per identificare il dispositivo. Altri registri consentono di impostare le zone di memoria o altri registri su sola lettura. Questa impostazione è detta blocco della memoria. Il blocco di un registro o di una zona di memoria è permanente e non può mai essere sbloccato.

In quest'area vi è anche il registro I2CAddr usato per configurare se il dispositivo è utilizzato in modalità I2C o SPI. All'accensione del dispositivo viene scritto il registro I2CAddr a un byte. Il bit 0 di I2CAddr determina la modalità dell'interfaccia seriale. Se il firmware scrive 0, il dispositivo è configurato per la modalità SPI. Se viene scritto 1, viene selezionata la modalità I2C. Se viene scelta la modalità I2C, l'indirizzo del dispositivo a 7 bit è 50h.

Buffer della memoria di comandi e risposte

È possibile accedere alle posizioni di memoria nel dispositivo utilizzando l'indirizzamento SPI o I2C standard, ma il dispositivo accetta anche comandi in modo simile a un microcontroller. Un comando e i suoi operandi, chiamati blocco di comandi, possono essere costituiti da uno o più byte e vengono sempre scritti direttamente nel buffer della memoria di comandi e risposte all'indirizzo FE00h. Un blocco di comandi è composto da un'istruzione a byte singolo, da uno o più byte di operandi e da una checksum a 2 byte.

I comandi disponibili includono l'autenticazione dei dati, le letture dei blocchi dalle zone EEPROM, l'incremento dei contatori e la lettura diretta di qualsiasi memoria protetta o registro che richiede l'autenticazione. Le risposte ai comandi vengono lette dalla stessa posizione FE00h. Tutte le operazioni di scrittura in FE00h sono comandi inviati al buffer della memoria dei comandi. Tutte le operazioni di lettura da FE00h sono letture dal buffer della memoria delle risposte.

Il registro di ripristino dell'indirizzo I/O in FFE0h è di sola scrittura e viene utilizzato per ripristinare i buffer della memoria dei comandi e delle risposte. La scrittura di un qualsiasi valore in FFE0h avviene tramite due operazioni: il buffer della memoria dei comandi viene svuotato in modo che possa accettare un nuovo blocco di comandi e quello della memoria delle risposte viene azzerato per permettere di leggere il contenuto dall'inizio.

Il ripristino del buffer della memoria delle risposte consente al firmware di rileggere l'intera risposta. Questo può essere utile nel codice in cui può essersi verificato un interrupt mentre il microcontroller host stava leggendo il buffer della memoria delle risposte. Dopo l'interrupt i dati devono essere riletti dall'inizio.

Esistono anche dei comandi per eseguire la crittografia e la decrittografia AES per le letture e le scritture sulla EEPROM. Questi calcoli sono molto complessi e non verranno trattati in questa sede. Microchip fornisce tuttavia driver e firmware per microcontroller che eseguono facilmente tutte queste funzioni, per cui al programmatore è richiesta una conoscenza minima della crittografia AES.

Registri dei contatori di zona

L'area dei registri contiene 16 contatori di sola lettura associati a ogni zona. Ogni zona di memoria è crittografata o decrittografata usando la sua chiave a 128 bit. Ogni volta che si utilizza una chiave di zona, il relativo contatore a 32 bit può essere incrementato o meno a seconda dell'impostazione nei registri di configurazione dei contatori di zona associati. Per motivi di sicurezza, i contatori non possono mai essere decrementati o azzerati.

Il firmware può scrivere direttamente in un contatore di zona per incrementarlo a un valore iniziale, ma mai a un valore inferiore rispetto al contenuto esistente. Per limitare il numero di conteggi, i contatori di zona possono essere scritti e bloccati durante la produzione. Quando il contatore raggiunge il valore massimo di 2.097.151, la chiave ad esso associata può essere disabilitata in modo permanente per impedirne l'utilizzo per ulteriori operazioni di crittografia o decrittografia. Questa possibilità può essere utile per chiavi con un uso limitato, ad esempio per consentire che il firmware del microcontroller venga aggiornato solo per un numero limitato di volte.

Per maggiore sicurezza ogni contatore di zona a 32 bit è duplicato. Questo serve a rilevare eventuali suoi danni se l'alimentazione si interrompe durante un incremento del contatore di zona. All'accensione dell'applicazione, il firmware dovrebbe leggere entrambi i valori del contatore per tutti i contatori di zona. Se in un'applicazione robusta i valori sono diversi, significa che vi è stato un evento di spegnimento non autorizzato, il che potrebbe indicare un tentativo non autorizzato di disabilitare la sicurezza dell'applicazione mentre è in funzione.

Registro di stato

Il registro di stato di ATAES132A è di sola lettura e indica i codici di errore, inclusi checksum errate ed errori di comando. Indica anche se ATAES132A è in modalità I2C o SPI, oltre all'andamento dei comandi e alla validità delle risposte. Dovrebbe essere letto prima e dopo ogni lettura, scrittura, comando e risposta. Gli errori possono indicare tentativi esterni di interferire con la connessione I2C o SPI tra il microcontroller host e ATAES132A. È compito del firmware host intraprendere l'azione appropriata, ad esempio avvertire l'operatore o emettere un allarme.

Impostazione di ATAES132A durante la produzione

La sicurezza del dispositivo ATAES132A dovrebbe essere impostata durante la fabbricazione del prodotto finale. Per ridurre la possibilità di errori di configurazione, ATAES132A dovrebbe essere configurato mentre è nel sistema. Per prima cosa, si dovrebbero impostare i valori di tutti i contatori iniziali e le rispettive configurazioni. Quindi, si dovrebbero programmare i parametri di crittografia e delle chiavi. Infine, si dovrebbero programmare tutti i valori iniziali della EEPROM. Il numero seriale univoco del dispositivo a 32 bit può essere letto da ATAES132A per cui può essere incorporato nel firmware del microcontroller host.

Per assicurare la corretta configurazione di ATAES132A si consiglia di rileggere tutti i valori EEPROM programmati. Se alcuni valori non vengono riletti correttamente, o se il registro di stato indica un errore di checksum o di comando, il prodotto finale deve essere contrassegnato e rimosso dalla produzione. A scelta, se la EEPROM libera è sufficiente, è possibile eseguire una crittografia e decrittografia di prova.

Sviluppo di ATAES132A

Per facilitare lo sviluppo, Microchip mette a disposizione lo starter kit Xplained-Pro CryptoAuthentication DM320109 (Figura 2). ATAES132A si interfaccia con un microcontroller Arm® Cortex®-M0+ ATSAMD21J18A di Microchip.

Immagine dello starter kit/kit di sviluppo Xplained CryptoAuthentication DM320109 di Microchip

Figura 2: Lo starter kit Xplained CryptoAuthentication DM320109 di Microchip è un modo semplice per valutare e sviluppare il codice per ATAES132A. Comprende numerosi esempi di codice e interfacce per la maggior parte dei PC che supportano Windows, Linux o MacOS. (Immagine per gentile concessione di Microchip Technology)

Il microcontroller ATSAMD21J18A di Microchip è dotato di un'interfaccia USB per collegarsi a un ambiente di sviluppo su PC. Supporta entrambe le interfacce I2C e SPI e può essere utilizzato per interfacciarsi con ATAES132A. Una volta collegato al PC di destinazione tramite il cavo USB in dotazione, il kit può essere usato per configurare e monitorare tutte le funzionalità di ATAES132A.

Per monitorare e registrare i pacchetti di dati tra ATAES132A e ATSAMD21J18A viene fornito un secondo cavo USB. Questo cavo viene collegato tra la scheda Xplained e una porta USB disponibile sul PC. Lo sviluppatore può così monitorare i segnali tra il microcontroller e la EEPROM per osservare lo spostamento dei dati crittografati tra i due dispositivi.

Il kit Xplained è dotato di tutte le librerie del firmware e del codice di esempio di ATAES132A. Uno sviluppatore che capisca la mappa della memoria e i registri di ATAES132A descritti in questo articolo, e con una conoscenza minima della crittografia del dispositivo, può facilmente personalizzare il codice di esempio per adattarlo alla sua applicazione di destinazione.

Conclusione

La crittografia a 128 bit AES è un argomento complesso. Ciononostante, gli sviluppatori possono proteggere i dati sensibili in una EEPROM progettata appositamente per questo scopo. Utilizzate protezioni meccaniche, crittografia avanzata, zonizzazione e mappatura della memoria speciali, oltre a funzionalità personalizzate o riservate note solo alla società e/o all'utente finale.

DigiKey logo

Esonero della responsabilità: le opinioni, le convinzioni e i punti di vista espressi dai vari autori e/o dai partecipanti al forum su questo sito Web non riflettono necessariamente le opinioni, le convinzioni e i punti di vista di DigiKey o le sue politiche.

Informazioni su questo autore

Image of Bill Giovino

Bill Giovino

Bill Giovino è un ingegnere elettronico con un BSEE ottenuto a Syracuse University, ed è uno dei pochi ad essere passati con successo da progettista, a ingegnere delle applicazioni sul campo, al marketing tecnologico.

Da oltre 25 anni, Bill promuove le nuove tecnologie per un pubblico tecnico e non tecnico a nome di molte aziende, tra cui STMicroelectronics, Intel e Maxim Integrated. In STMicroelectronics, Bill ha contribuito a guidare i primi successi dell'azienda nel settore dei microcontroller. Con Infineon, Bill ha orchestrato i primi successi di progettazione di microcontroller dell'azienda nel settore automotive statunitense. In qualità di consulente di marketing per la sua società CPU Technologies, Bill ha aiutato molte aziende a trasformare prodotti di secondo grado in storie di successo.

Bill è stato uno dei primi ad adottare l'Internet delle cose, compresa l'integrazione del primo stack TCP/IP completo su un microcontroller. Bill è fedele al motto "Le vendite guidate dall'educazione" e tiene molto alla crescente importanza di comunicazioni chiare e ben scritte nella promozione di prodotti online. È moderatore del famoso gruppo Sales & Marketing di LinkedIn Semiconductor e parla correntemente di B2E.

Informazioni su questo editore

Editori nordamericani di DigiKey