La scheda ESPertino presenta tutte le caratteristiche richieste per supportare anche le più critiche e sfidanti applicazioni in ambito IoT (Internet of Things). Oltre alla connettività, resa possibile grazie alle interfacce integrate WiFi e Bluetooth, ESPertino dispone anche di funzionalità avanzate per la crittografia, con acceleratori hardware compatibili con i più diffusi algoritmi crittografici
Introduzione
Il modulo ESP32 che equipaggia la board ESPertino dispone di acceleratori hardware integrati capaci di supportare diversi algoritmi crittografici. Come visibile nello schema a blocchi di Figura 1, l'accelerazione crittografica hardware comprende i seguenti moduli: AES, SHA-2 (con dimensione dell'hash pari a 256 bit), RSA e ECC. A questi algoritmi di crittografia (che potremmo definire come "classici") si accompagna un generatore di numeri casuali (RNG, acronimo di Random Number Generator), particolarmente utile per la creazione di chiavi per la cifratura/decifrazione dei dati.
L'acceleratore AES (acronimo di Advanced Encryption Standard) supporta sei algoritmi conformi alle specifiche FIPS PUB 197, in particolare: AES-128, AES-192 e AES-256, sia per la crittografia che per la decrittografia. Le prestazioni dell'acceleratore AES sono notevolmente superiori rispetto a quelle degli stessi algoritmi implementati a livello software. Basti pensare che sono richiesti da 11 a 15 cicli di clock per criptare un singolo messaggio e da 21 a 22 cicli di clock per eseguire la decodifica dello stesso messaggio. L'acceleratore SHA supporta quattro algoritmi conformi alle specifiche FIPS PUB 180-4, in particolare: SHA-1, SHA-256, SHA-384 e SHA-512. Gli ultimi tre algoritmi appartengono al gruppo di funzioni di hash SHA-2, con dimensione dell'hash pari a, rispettivamente, 256, 384 e 512 bit. L'acceleratore RSA fornisce invece un supporto hardware per le operazioni aritmetiche a multipla precisione utilizzate negli algoritmi di cifratura asimmetrica RSA. L'algoritmo RSA (acronimo di Rivest Shamir Adelman) vine largamente utilizzato per la cifratura di chiavi pubbliche. Infine, il modulo ESP32 include un generatore di veri numeri casuali, utilizzabile come base per molte operazioni crittografiche. I numeri casuali sono generati basandosi sull'entità del rumore presente nella componente a radio frequenza del modulo, ovvero nei transceiver Bluetooth e WiFi. Quando le interfacce WiFi e Bluetooth sono disabilitate, il generatore produce dei numeri pseudo casuali. Viceversa, quando le stesse interfacce sono abilitate, il generatore è alimentato da due bit di entropia ad ogni ciclo di clock del bus APB (normalmente impostato a 80 MHz). Ne consegue che, nel caso di massima entropia, è conveniente leggere il registro del generatore random a una frequenza massima di 5 MHz (il registro è a 32 bit, 2 bit vengono scritti ad ogni ciclo di clock APB). Dopo questa breve, ma doverosa, panoramica sui moduli hardware per la crittografia integrati nel modulo ESP32, ci poniamo l'obiettivo di applicare e testare uno degli acceleratori hardware maggiormente utilizzato a livello pratico: lo SHA-256.
SHA-256
In altri articoli relativi al tema criptovalute e blockchain abbiamo già trattato l'argomento relativo alle funzioni di hash e in particolare a una loro categoria molto importante: le funzioni crittografiche di hash. Ci interessa ora solo ricordare che tali funzioni ricevono in ingresso un qualsivoglia blocco dati (messaggio) di lunghezza arbitraria, applicano allo stesso un determinato algoritmo e producono in uscita una sequenza di bit di dimensione fissa (indicato spesso con il termine digest o semplicemente hash). Il comportamento di una generica funzione crittografica di hash è schematizzato nella Figura 2.
SHA-256 è un algoritmo di hash e come tale definisce le operazioni necessarie per implementare una determinata funzione crittografica di hash. In particolare, SHA-256 appartiene all'insieme di algoritmi SHA-2, ovvero alla versione 2 del Secure Hash Algorithm, un insieme di specifiche redatto dall'ente statunitense NIST (National Institute of Standards and Technology). A differenza di altri algoritmi precedenti (come lo SHA-1 e l'MD5), lo SHA-2 non è ancora stato "rotto", intendendo con ciò la possibilità di trovare (applicando tipicamente il metodo della "forza bruta" o altre sue varianti) un messaggio di ingresso all'algoritmo che produca un hash in uscita esattamente identico a un valore desiderato (equivale più o meno a trovare la combinazione per aprire una cassaforte..). Lo SHA-256 rappresenta pertanto un'ottima garanzia di sicurezza ed è questo il motivo per cui viene largamente utilizzato per proteggere le transazioni generate con le criptovalute. A titolo di esempio, ricordiamo che la rete su cui si basa la principale criptovaluta (la blockchain del Bitcoin) utilizza proprio l'algoritmo SHA-256 per implementare la Proof of Work, ovvero il processo matematico che porta alla validazione delle transazioni presenti nella blockchain.
Il progetto
Lo scopo del progetto (interamente software) presentato in questo articolo è quello di dimostrare le capacità crittografiche della scheda ESPertino mettendo alla prova l'acceleratore hardware che supporta l'algoritmo SHA-256. In particolare, calcoleremo l'hash di un messaggio utilizzando l'algoritmo SHA-256, verificando poi la correttezza del valore (digest) prodotto in uscita confrontandolo con il valore calcolato da uno dei tanti generatori di SHA-256 disponibili online. È importante sottolineare [...]
ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2851 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici che potrai leggere in formato PDF per un anno. ABBONATI ORA, è semplice e sicuro.