Sementi casuali non si propagano ai pozzi entropici in modo tempestivo

9

Il driver di casualità del kernel Linux raccoglie entropia dall'ambiente. Poiché durante l'avvio ci sarà poca entropia, un seme casuale viene spesso mantenuto a /var/lib/misc/random-seed o ad una posizione simile. Quando il sistema si arresta, un nuovo seme casuale da 512 byte viene scritto in questo file. All'avvio del sistema, questo file viene scritto su /dev/urandom , che lo aggiunge al pool di entropia. Il punto è quello di consentire lo stato del pool di entropia di persistere attraverso i riavvii. Ci sono problemi:

  1. I dati scritti nel pool non bloccante vengono messi per la prima volta nel pool di input e saranno utilizzabili solo dopo aver raccolto abbastanza entropia per un "reseeding catastrofico". Ciò significa che potrebbero essere necessari alcuni minuti prima che entropia nel seme casuale abbia effettivamente effetto sul CSPRNG.

  2. Per lo stesso motivo, se il sistema si avvia e poi si spegne entro pochi minuti, il nuovo seme che viene scritto non avrà entropia dal seme precedente, rendendo molto più facile da prevedere. Questo è probabilmente un problema per i sistemi che possono avere un uptime molto basso, poiché significa che resetteranno in modo efficace i loro semi entropici persistenti abbastanza spesso.

La mia analisi è corretta? Quali sono le implicazioni del mondo reale di questi problemi? Per esempio, ci sono sistemi di uso comune (specialmente sistemi embedded) che richiedono casualità imprevedibile entro pochi minuti dal riavvio o che possono avere tempi di operatività molto brevi?

Nel driver randomness del kernel, scrivi a entrambi i pool di blocco o non bloccanti attivano l'operazione random_write() e al suo interno, write_pool() con il pool di input specificato come l'argomento. Il pool di input viene periodicamente utilizzato per eseguire il reseeding del pool di blocchi tramite push_to_pool() funzione workqueue. Il pool di nonblocco verrà resettato dal pool di input ogni 5 minuti quando _extract_crng() viene chiamato per estrarre i dati dal pool non bloccante (supponendo che siano stati aggiunti almeno 128 bit di entropia al pool di input dall'ultimo seeding). Questo flusso di informazioni implica che il seme casuale memorizzato attraverso i riavvii influirà solo sul contenuto del pool di blocco dopo un resement catastrofico (64 bit) e il CRNG non bloccante ogni 5 minuti.

    
posta forest 12.04.2018 - 02:09
fonte

1 risposta

1

Ci sono alcune ipotesi che devo porre domande:

A. "Perché ci sarà poca entropia durante l'avvio".

B. "Il punto è di consentire allo stato del pool di entropia di persistere attraverso i riavvii"

Indirizzamento A: Anche se è possibile che la configurazione specifica del sistema che utilizzi abbia problemi di bassa entropia, questo non è un caso tipico. Tuttavia, " Estrazione di Ps e Q: Rilevamento di chiavi deboli diffuse nei dispositivi di rete " di N. Heninger descrive tale condizione nei sistemi senza testa. Affinché questa condizione si verifichi, più fonti di entropia devono essere assenti o funzionare a prestazioni degradate. Innanzitutto, deve essere un sistema senza testa, quindi non vi è entropia da add_input_randomness (). In secondo luogo, l'attività del controller deve essere molto limitata, e questo include la scheda di rete, quindi ci sono poche interruzioni alla guida di add_interrupt_randomness (). Terzo, non ci deve essere alcun dispositivo a blocchi (ad es. Hard disk), quindi add_disk_randomness () non genera entropia. Ad esempio, il moderno SSD SATA3 genererà circa 200 bit di entropia da solo durante l'avvio tramite add_disk_randomness ().

Indirizzamento B: il salvataggio dello stato del pool di entropia è una soluzione incompleta a un problema serio. Se hai una bassa entropia di avvio, questo è il problema chiave su cui concentrarti. Se si riavvia spesso anche questo problema diventa catastrofico. Migliorare il design dell'entropia salvata non risolverà il problema di fondo della mancanza di entropia.

    
risposta data 05.06.2018 - 21:42
fonte

Leggi altre domande sui tag