Nessuna di queste opzioni è particolarmente migliore o peggiore delle altre, perché sono tutte molto insicure. Vado con l'opzione 4.
SRAM è il posto più sicuro dove conservare le chiavi, ma non devi mai iniettarle dal mondo esterno. Devono SEMPRE essere generati all'interno del processore, durante l'avvio. Fare qualsiasi altra cosa invalida immediatamente il resto: è automaticamente insicuro.
Non conservare le chiavi nella memoria non volatile, hai ragione su questo. Non importa se si protegge la EEPROM o la memoria flash dalla lettura. Il fusibile di protezione dalla lettura del codice è facilmente reversibile. Un aggressore deve solo decapare (rimuovere o incidere chimicamente la confezione epossidica nera per esporre il dado di silicio all'interno). A questo punto, possono coprire la parte del dado che è celle di memoria non volatili (queste sezioni sono molto regolari e mentre le singole celle di memoria sono troppo piccole per essere viste, la struttura più grande può essere) e un piccolo pezzo di qualcosa opaco a UV è mascherato su quella sezione. Quindi l'attaccante può semplicemente illuminare una luce UV sul chip per 5-10 minuti e ripristinare tutti i fusibili, incluso il fusibile CRP. La memoria OTP può ora essere letta da qualsiasi programmatore standard.
Oppure, se sono ben finanziati (diciamo, ottenere quelle chiavi vale più di $ 1000 per qualcuno), possono semplicemente leggere le celle di memoria direttamente con diversi tipi di microscopi elettronici.
Per sicurezza, le chiavi devono essere cancellate, non nascoste.
- No, per le stesse ragioni sopra.
Ora, sull'opzione 4:
- Usa solo la crittografia. La distribuzione delle chiavi è un problema risolto. Quindi usa quella soluzione prontamente disponibile. Il chip dovrebbe usare il suo RNG e varie altre considerazioni dovrebbero essere fatte per assicurarsi che abbia una scorta sufficiente di entropia disponibile e il boot loader dovrebbe avviarsi direttamente nel programma che genera le chiavi segrete necessarie, che dovrebbero essere di uso generale si registra e si sposta direttamente in SRAM, dove rimarranno fino alla cancellazione.
Tuttavia, esiste un problema, ovvero che nulla tranne la CPU ha idea di quale sia la chiave segreta. Nessun problema: usa la crittografia a chiave pubblica. Ciò che hai memorizzato nella memoria OTP è la tua chiave pubblica. Questa chiave può essere letta da chiunque, puoi pubblicarla sullo scambio di pile, puoi dipingerla sul lato di una petroliera con lettere alte 5 piedi, non importa. La cosa meravigliosa della crittografia a chiave pubblica è che è asimmetrica. La chiave per crittografare qualcosa non può decrittografare, ciò richiede la chiave privata. E viceversa, la chiave per decrittografare qualcosa di crittografato dalla chiave pubblica non può essere utilizzata per crittografare qualcosa. Quindi, la CPU genera le chiavi segrete, utilizza la chiave pubblica memorizzata per ENCRYPT le chiavi segrete e la invia semplicemente tramite USB o RS232 o qualunque cosa tu voglia. La lettura della chiave segreta richiede la tua chiave privata, che non devono essere memorizzati, inviati o mai coinvolti con il chip. Una volta decifrata la chiave segreta con la tua chiave privata (altrove, al di fuori del chip), sei pronto. Hai una chiave segreta trasmessa in modo sicuro che è stata GENERATA interamente all'interno del chip, senza dover archiviare nulla tranne una chiave pubblica - che, come affermato in precedenza, non deve essere affatto protetta dalla lettura.
Questo processo è formalmente chiamato negoziazione chiave e ogni cosa lo utilizza. L'hai usato più volte oggi. Ci sono molte risorse e librerie disponibili per gestirlo. Per favore, non "iniettare" mai le chiavi in nulla.
Un'ultima cosa da menzionare: tutto ciò è discutibile perché la chiave AES può essere facilmente ripristinata usando gli attacchi del canale laterale, che si trovano sull'alimentatore e misurano i piccoli cambiamenti nell'assorbimento di corrente e il tempo tra quei cambiamenti causati dai bit che lanciano nella CPU come registri. Questo, combinato con la conoscenza di come funziona AES (o qualunque sia una delle pochissime serie di possibili algoritmi di crittografia che potrebbero essere utilizzati), rende relativamente semplice ed economico recuperare la chiave. Non consentirà di leggere la chiave, ma può restringere lo spazio della chiave a qualcosa di ridicolmente piccolo, come 255 possibili chiavi. Inoltre, il chip non può rilevarlo, poiché è a monte.
Ciò ha sconfitto i boot loader crittografati AES-256 su processori crittografici "sicuri" e non è nemmeno così difficile. Per quanto ne so, non ci sono veri contromisure hardware per questo attacco. Tuttavia, sono gli algoritmi di crittografia stessi e il modo in cui richiedono una CPU per capovolgere i bit, che sta causando questa vulnerabilità. Sospetto che dovranno essere sviluppati (e si spera lo siano) algoritmi resistenti ai canali laterali o ai canali laterali.
Così com'è adesso, la vera risposta a come archiviare una chiave (o anche solo usare una chiave temporanea) su un dispositivo incorporato in modo sicuro è: non puoi.
Ma almeno se si genera una nuova chiave ogni volta che si utilizza la negoziazione della chiave nell'opzione 4, un attacco del canale laterale può solo compromettere la chiave di un canale in uso e solo se hanno un po 'di tempo per monitorare la potenza mentre crittografa i dati . Se negoziate frequentemente nuove chiavi generate internamente, ciò può offrire utili quantità di sicurezza.
Genera chiavi e conservale il più breve tempo possibile.