Come faccio a garantire che entropia sufficiente su un sistema embedded al primo avvio?

26

Sto lavorando su un sistema incorporato che genererà una chiave SSL la prima volta che si avvia il sistema. Vorrei evitare i problemi scoperti da Heninger et al. e da Lenstra et al. dove i sistemi embedded con bassa entropia hanno la tendenza a generare le stesse chiavi. La mia comprensione è che Linux ottiene la sua entropia dalle seguenti fonti (diapositiva 19) :

  • RNG hardware
  • Tastiera
  • Mouse
  • Rotazione disco

L'hardware incorporato con cui sto lavorando non avrà nessuna delle fonti di entropia sopra.

Quali sono le migliori pratiche per ottenere una buona entropia in questo caso? Sono interessato a soluzioni di cui ci si possa fidare nella produzione (non sto cercando esperimenti scientifici).

    
posta user28685 24.07.2013 - 23:01
fonte

2 risposte

11

Una domanda simile è stata posta e ha risposto su Stackoverflow . Alcuni modi per generare entropia:

  • trovare il tempo tra i pacchetti di rete;
  • usa Fortuna ;
  • controlla le variabili del kernel che sono per lo più imprevedibili (snmp, w, last, uptime, iostats, vmstats, ecc.);
  • leggi i sensori di temperatura o altri sensori che hai sul dispositivo.

IBM ha anche una guida alle migliori pratiche qui . Suggerisce:

  • Valuta la quantità di entropia del kernel disponibile prima di generare le chiavi . Valutare la quantità di entropia del kernel disponibile immediatamente prima della generazione delle chiavi, aiuta a garantire casualità.

  • Assicurarsi che le procedure di produzione non clonino le chiavi o sorgenti di entropia .

  • Impedisci o limita l'accesso alla rete . Migliora la sicurezza di impedendo l'accesso a Internet o limitando l'accesso alla rete, se possibile.

  • Setta, o inizializza, il pool entropy del kernel con dati specifici del nodo per migliorare la forza della chiave .

  • Aumenta il pool entropy del kernel aggiungendo dispositivo incertezza della tempistica degli eventi . Se costruisci i tuoi dispositivi del kernel, tu può aumentare il pool di entropia del kernel e quindi aumentare l'entropia, aggiungendo l'incertezza della temporizzazione degli eventi del dispositivo.

  • Genera chiavi poco prima che siano richieste (invece di durante il primo avvio).

risposta data 24.07.2013 - 23:27
fonte
7

RNG hardware

Dovresti sicuramente usarlo se ce l'hai, e spingerlo se hai qualche scelta su quale hardware sarà usato. Un RNG hardware non deve essere costoso - il Raspberry Pi ne ha uno, come ogni smartcard.

Fai attenzione che la maggior parte degli RNG hardware sono basati su oscillatori che impiegano un po 'di tempo a diventare casuali dopo che è stata applicata l'alimentazione. Potrebbe essere necessario attendere, o disegnare una certa quantità di byte prima che entropia sia sufficiente.

Iniezione di entropia durante la produzione

Se non hai un RNG sulla tua piattaforma, ma hai almeno un po 'di memoria persistente diversa dalla ROM, allora puoi iniettare qualche entropia durante la produzione.

Se la memoria del dispositivo è interna, significa che è necessario accenderla una volta durante il processo di produzione e comunicarne alcune centinaia di byte. Preparare l'immagine del codice sul dispositivo in modo che sia pronto ad accettare l'iniezione di entropia al primo avvio. Qualsiasi PC sulla catena di produzione sarebbe in grado di produrre.

Se la memoria del dispositivo viene prodotta separatamente, è possibile iniettare l'entropia nel codice o nell'immagine dei dati con cui viene inizializzata la memorizzazione.

Se si dispone di una capacità minima, a causa della larghezza di banda della comunicazione o a causa di vincoli di archiviazione, la fonte di entropia può raddoppiare come chiave privata o segreta. Tutto ciò che è unico per il dispositivo e che è segreto lo farà.

Iniezione dell'entropia tramite la rete

Se non c'è modo di iniettare entropia durante la fase di produzione, ma il dispositivo ha accesso alla rete quando viene messo in produzione, è possibile iniettare entropia al primo avvio - rendere l'entropia richiesta dispositivo da un server affidabile. Tuttavia questo processo è vulnerabile a un attacco man-in-the-middle attivo o passivo. Il dispositivo può autenticare il server entropy (hard-code una chiave pubblica), ma non c'è modo di proteggere la comunicazione dalle intercettazioni poiché l'intercettatore può riprodurre tutto il calcolo sul dispositivo.

Pertanto, se non si ha modo di iniettare entropia nella fase di produzione, è necessario coinvolgere gli utenti del dispositivo nell'iniezione di entropia, quando distribuiscono il dispositivo. Ad esempio, potrebbe essere necessario collegare il dispositivo a un PC affidabile in cui l'utente eseguirà il software fornito per l'iniezione di entropia (generato dal PC o ottenuto dal server, non importa molto). Dopo quel punto il dispositivo sarebbe affidabile solo quanto il PC in cui è stata generata l'entropia.

    
risposta data 24.07.2013 - 23:46
fonte

Leggi altre domande sui tag