memorizzazione sicura e utilizzo delle chiavi in ​​un sistema incorporato


7

Sto usando un microprocessore - MCU PIC32MZ2048efm144 che riceve comandi crittografati con una chiave specifica , li decodifica ed esegue il comando. I comandi crittografati vengono archiviati offline , quindi non posso semplicemente cambiare la chiave quando voglio. La chiave è FISSA . I comandi sono crittografati da un server e scaricati da un telefono . Il telefono invia i comandi crittografati all'MCU in un secondo momento, quando non è in linea . I comandi vengono crittografati prima che il telefono li comunichi all'MCU, quindi una chiave di sessione non è possibile.

Sono autorizzato a collegare un modulo di crittografia / decrittografia esterno al PIC, ma i dati passeranno decodificati in almeno una direzione.

La soluzione proposta qui: memorizzazione di una chiave sicura nella memoria di un dispositivo incorporato

usa le chiavi una tantum per crittografare, ma ho bisogno di memorizzare una singola chiave super segreta

Ciò che il mio datore di lavoro richiede è che le chiavi non siano accessibili, quindi non viene considerata la protezione fisica oltre a quella offerta dai moduli di memoria sicuri e dall'MCU.

Supponendo che non vengano utilizzate apparecchiature di livello militare, esistono delle soluzioni conosciute che voi ragazzi conoscete e che potete consigliare?

Grazie in anticipo!


Puoi spiegare di più su ciò che stai cercando di prevenire? Cosa fa il microprocessore? Pensi che l'utilizzo di una chiave pubblica / privata potrebbe funzionare? Se hai memorizzato la chiave privata sul microprocessore? Quindi i dispositivi che inviano i comandi creano una chiave di sessione, la crittografano utilizzando la chiave pubblica e la inviano a te. Successivamente, entrambe le parti utilizzano la chiave di sessione. Cosa accadrebbe se un utente malintenzionato avesse la chiave pubblica (che, sebbene sia chiamata "pubblica", in realtà non deve essere pubblica)?
mkeith,

@mkeith Ho aggiornato la domanda, spero che sia d'aiuto :)
Sonja,

3
Dal momento che hai scelto quel PIC, perché non utilizzare il "Archiviazione chiavi programmaticamente sicura" che fornisce? Ha il suo modulo crittografico integrato!
pjc50,

2
Non credo che tu abbia chiaramente quantificato il valore del tuo segreto. Sembra che tu voglia un metodo economico e affidabile (che penso sia sconosciuto). Chiedere chiarimenti su ciò che deve essere possibile dopo che è stata rilevata una vulnerabilità in questa prima soluzione. Gli aggiornamenti del firmware over-the-air firmati sarebbero la mia prima funzionalità non negoziabile ... È sempre un problema di sistema.
Sean Houlihane,

Bene, se la memoria del PIC è protetta (e ha anche un modulo di archiviazione delle chiavi) perché non usare una semplice crittografia AES? So che è simmetrico, ma se il server è sicuro (cosa che dovremmo supporre) allora non ci sono rischi qui - o c'è?
Jan Dorniak,

Risposte:


11

Mi dispiace che questa risposta non risolva effettivamente il tuo problema. Ma è troppo lungo per inserirsi in un commento e ti permetterà di ripensare il tuo problema nel modo giusto (perché così com'è, penso che sia difettoso).

Questo tipo di problemi deve essere risolto tenendo conto di tutti i componenti del sistema e facendo ipotesi ragionevoli su ciò che un potenziale hacker può o non può fare.

Per esempio:

Dici: "PIC32MZ2048efm144 (MCU) riceve comandi crittografati con una chiave specifica, li decodifica ed esegue il comando". Suppongo che il risultato dell'esecuzione del comando sia attivare e disattivare alcuni GPIO.

Quindi, perché hai paura che, potenzialmente, alcuni dati vengano decodificati tra l'MCU e un modulo di crittografia / decrittografia? Un hacker che ha accesso all'hardware per vedere i comandi decifrati sarebbe comunque in grado di agire direttamente sui GPIO dell'MCU e "azionare le cose" con la stessa facilità.

Secondo esempio:

L'uso dei tasti puntuali è un'idea. Ma come dici tu, dove memorizzi la chiave principale principale utilizzata per generare le chiavi singole? Dovrai affrontare le stesse domande del tuo problema originale.

In realtà, non c'è modo di rendere sicuro il tuo sistema se supponi che un hacker possa potenzialmente intrufolarsi in qualsiasi posizione del tuo sistema (che è quello che mi sembra che tu stia attualmente assumendo).

Cosa rende sicuro un sistema, quindi?

Una smart card è resa sicura perché è irragionevole supporre che un hacker possa sondare i percorsi interni all'interno dell'IC, tra la memoria e il blocco CPU.

Una serratura elettrica è resa sicura perché è irragionevole supporre che un hacker possa raggiungere i fili che attivano la serratura.

Ecc ... Fondamentalmente, devi iniziare identificando le cose che un hacker non sarà in grado di fare, e elaborare tutta la tua soluzione da lì. Ad esempio, è possibile mettere l'intero sistema in una scatola sicura e antimanomissione? In questo caso, è possibile disporre liberamente di comandi decrittografati che passano attraverso un bus interno.

Non puoi costruire un sistema sicuro senza sapere che cosa l'ha ragionevolmente l'hacker. Non ci hai detto questo. Pertanto non possiamo proporre una soluzione completa.


prima di tutto, grazie per la risposta elaborata! Ho aggiornato la domanda in un modo che credo ti risponderà :)
Sonja,

Quello che ho capito dalla modifica del tuo post è che solo le chiavi devono essere protette. I risultati effettivi dei comandi non hanno bisogno di essere protetto. In questo caso, inserisci le chiavi in ​​un modulo sicuro esterno come da te suggerito e accetta che i comandi decrittografati possano essere visualizzati in modo chiaro. Se il mio suggerimento non è valido per qualche motivo, prenditi il ​​tempo per spiegare in dettaglio cosa è accettabile e cosa non lo è . Non è solo un'altra frase nel tuo post che ci serve. Abbiamo bisogno del quadro completo della cosa. Veramente.
dim

5
Inoltre, ritengo che la crittografia dei comandi non sia effettivamente ciò che si desidera fare. Di solito, dobbiamo crittografare i dati (alcune informazioni su qualcosa o un documento ...). Ma raramente abbiamo bisogno di crittografare i comandi inviati a un dispositivo. Ciò che di solito è richiesto sui comandi è firmarli , per garantire che provengano dalla parte autorizzata. Ma il loro contenuto è raramente sensibile, in realtà. Quindi dovresti confermare anche questo.
dim

2

Sembra un caso classico in cui sarebbe utile la crittografia con chiave asimmetrica. Nella crittografia della chiave asimmetrica hai due chiavi, una privata e una pubblica. Vuoi proteggere completamente la chiave privata, ma la chiave pubblica può essere resa pubblica e non necessita di protezione. potresti essere in grado di mantenere la chiave privata sul sistema sicuro e la chiave pubblica sul dispositivo incorporato.


La decrittografia dei dati viene effettuata con la chiave privata (e la crittografia con la chiave pubblica). Altrimenti, significa che tutti possono decifrare (poiché tutti hanno accesso alla chiave pubblica), il che sarebbe un problema. Pertanto, è necessaria la chiave privata per essere nel dispositivo. Quindi, ora, come inserire la chiave privata nel dispositivo? Bene, torniamo al problema iniziale ...
dim

essere in grado di decrittografare i comandi non consente di crearne di nuovi da zero, quindi avere la chiave pubblica accessibile in qualche modo non è un
grosso

Questo è generalmente lo stesso della firma crittografica; il che ha lo svantaggio che se qualcuno ha la chiave pubblica (non deve essere pubblica, potrebbe essere archiviata in modo sicuro come la chiave simmetrica) può decifrare tutto; ma, come dice masterX244, generalmente non è possibile creare / firmare nuovi comandi. Penso che questa sia una buona soluzione.
Coder Tao

0

Non spieghi perché vuoi crittografare i comandi (in altre parole, qual è il tuo modello di minaccia). Il tuo scopo è impedire a un avversario in possesso del dispositivo basato su PIC di determinare quali sono i comandi inviati ad esso? Oppure stai cercando di impedire al dispositivo basato su PIC di eseguire una serie di comandi sostituiti da un avversario e permettergli solo di eseguire comandi provenienti dal tuo server?

Se il primo, devi affrontare un compito quasi impossibile: il tuo dispositivo deve decrittografare i comandi per eseguirli - il possesso del dispositivo PIC significa il possesso della chiave di decrittazione. Un avversario può estrarre la chiave (memorizzata nel dispositivo PIC che possiede) o semplicemente attendere fino a quando il firmware decodifica i comandi e quindi acquisirli dalla memoria.

Se, d'altra parte, stai solo cercando di assicurarti che il tuo dispositivo eseguirà solo comandi provenienti dal tuo server, sei fortunato. In questo caso è possibile utilizzare la crittografia a chiave pubblica (ad es. RSA) o uno schema di firma digitale a chiave pubblica (ad es. DSS). In questi, il dispositivo memorizza solo la chiave pubblica: questo è sufficiente per decrittografare i comandi (o verificare la firma digitale), ma non può essere utilizzato per crittografare i comandi (o generare una firma digitale) che il dispositivo accetterà. Ciò richiede la chiave privata, che viene utilizzata per crittografare (o firmare) i comandi prima di inviarli. La chiave privata non deve mai lasciare il server. Ancora meglio, crittografare firmare i comandi su una macchina che non comunica esternamente e copiarli solo sul server in modo che la chiave privata non venga mai trovata su un server accessibile dall'esterno.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.