Aggiunta di "entropia di numeri casuali" per le chiavi GPG?


10

Nel seguente video: Linux HOWTO: Proteggi i tuoi dati con PGP, parte 2 , ti viene mostrato come creare una coppia di chiavi con gpg. A proposito 1:50, l'istruttore dice quanto segue:

Mentre viene generata la chiave, è una buona idea spostare un po ' il mouse per dargli un'entropia di numeri un po' più casuale per la creazione della coppia di chiavi.

Questo mi sembra un mito, soprattutto perché gli strumenti da riga di comando di solito non dovrebbero essere influenzati dal cursore. D'altra parte, non ho idea di come funzioni il generatore di numeri casuali di Linux, che sia condiviso dalla GUI o indipendente da esso. C'è qualche riserva in ciò che afferma, o questo è un esempio di programmazione di culto del carico ?


Come domanda secondaria, è questo l'uso corretto del "mito urbano" o esiste una frase simile per "mito nell'informatica"?
IQAndreas,

1
Penso che la frase sia leggenda urbana ; Non ho mai sentito parlare del mito urbano . Vedi en.wikipedia.org/wiki/Urban_legend Nell'informatica, la frase "culto delle merci" potrebbe essere appropriata.
derobert,

Risposte:


8

C'è un granello di verità in questo, in realtà più verità che mito, ma tuttavia l'affermazione riflette un fondamentale fraintendimento di ciò che sta accadendo. Sì, spostare il mouse durante la generazione di una chiave con GPG può essere una buona idea. Sì, spostare il mouse contribuisce all'entropia che rende casuali i numeri casuali. No, spostare il mouse non rende la chiave più sicura.

Tutti i buoni generatori casuali adatti alla crittografia, e quelli di Linux in quella categoria, hanno due componenti:

  • Una fonte entropica , che non è deterministica. Lo scopo dell'entropia è di avviare il generatore di numeri casuali con dati imprevedibili. La fonte dell'entropia deve essere non deterministica: in caso contrario, un avversario potrebbe riprodurre lo stesso calcolo.
  • Un generatore di numeri pseudocasuali , che produce numeri casuali imprevedibili in modo deterministico da uno stato interno in evoluzione.

L'entropia deve provenire da una fonte esterna al computer. L'utente è una fonte di entropia. Quello che l'utente fa per lo più non è casuale, ma i tempi precisi dei tasti e dei movimenti del mouse sono così imprevedibili da essere leggermente casuali - non molto casuali, ma a poco a poco, si accumulano. Altre potenziali fonti di entropia includono la tempistica dei pacchetti di rete e il rumore bianco della telecamera o del microfono. Diverse versioni e configurazioni del kernel possono utilizzare un diverso set di sorgenti. Alcuni computer hanno circuiti RNG hardware dedicati basati sul decadimento radioattivo o, in modo meno impressionante, circuiti elettronici instabili. Queste fonti dedicate sono particolarmente utili in dispositivi e server integrati che possono avere un comportamento abbastanza prevedibile al primo avvio, senza che un utente faccia cose strane.

Linux fornisce numeri casuali ai programmi tramite due dispositivi: /dev/randome/dev/urandom . La lettura da entrambi i dispositivi restituisce qualità crittografica. Entrambi i dispositivi utilizzano lo stesso stato RNG interno e lo stesso algoritmo per trasformare lo stato e produrre byte casuali. Hanno limiti particolari che non rendono nessuno dei due la cosa giusta:

  • /dev/urandom può restituire dati prevedibili se il sistema non ha ancora accumulato entropia sufficiente.
  • /dev/randomcalcola la quantità di entropia disponibile e blocca se non c'è abbastanza. Questo suona bene, tranne per il fatto che il calcolo si basa su considerazioni teoriche che fanno diminuire linearmente la quantità di entropia disponibile ad ogni bit di uscita. Quindi /dev/randomtende a bloccarsi molto rapidamente.

I sistemi Linux salvano lo stato RNG interno su disco e lo ripristinano all'avvio. Pertanto l'entropia si ripete da uno stivale all'altro. L'unica volta in cui un sistema Linux può non avere entropia è quando è appena installato. Una volta che c'è abbastanza entropia nel sistema, l'entropia non diminuisce; diminuisce solo il calcolo errato di Linux. Per ulteriori spiegazioni di questa considerazione, leggi /dev/urandomè adatto per generare una chiave crittografica , da un crittografo professionista. Vedi anche Puoi spiegare la stima entropica usata in random.c .

Lo spostamento del mouse aggiunge più entropia al sistema. Ma gpg può solo leggere /dev/random, non/dev/urandom (un modo per risolvere questo problema è creare /dev/randomlo stesso dispositivo 1: 9 /dev/urandom), quindi non è mai a rischio di ricevere numeri casuali non abbastanza casuali. Se non sposti il ​​mouse, la chiave è il più casuale possibile; ma ciò che può accadere è che gpg può essere bloccato da una lettura /dev/random, in attesa che il contatore entropia del kernel aumenti.


Tranne le versioni attuali di Linux, almeno dai miei test, non usano dispositivi di input come fonte di entropia (o almeno di entropia stimata). Sono abbastanza sicuro che lo abbiano cambiato perché in teoria potrebbero essere sotto il controllo di un attaccante.
derobert,

@derobert Come di 3.12 c'è una chiamata a add_input_randomnessin drivers/input/input.c, ma non so in quali circostanze sarà entropia in realtà iniettare.
Gilles 'SO- smetti di essere malvagio' il

Immagino che aggiunga entropia, ma con una stima di 0 ... Ho provato sia un mouse USB che una tastiera PS / 2, né mi è sembrato di aumentare la stima di entropia. Non so perché, però, come vedo la chiamata a credit_entropy_bits nel codice.
derobert,

3

GPG sta usando il generatore di numeri casuali Linux (kernel). Il generatore di kernel ottiene entropia (casualità) da tutti i tipi di luoghi, tra cui il tempo di interruzione, per determinati interrupt. Lo spostamento del mouse (e la digitazione, l'attività del disco, ecc.) Genereranno tutti interruzioni.

Quindi, spostando il mouse si può effettivamente alimentare il generatore di numeri casuali. Ma se lo fa dipende dalla versione esatta del kernel in uso; le versioni più recenti (almeno nei miei test) non usano interrupt di tastiera o mouse per entropia. L'attività del disco, tuttavia, lo fa (quindi, ad esempio, l'esecuzione syncaggiungerà una quantità potenzialmente elevata di entropia, a seconda di quanto viene scaricato).

In breve: questo non è vero nelle attuali versioni di Linux. Era su quelli più grandi.

Tuttavia, se il generatore esaurisce l'entropia, dovrebbe fermarsi, quindi la generazione della chiave si bloccherà fino a quando non viene generata dell'entropia. Quindi sarebbe un problema da prendere per sempre, non un problema di sicurezza.

Puoi vedere quanta entropia è disponibile per cat /proc/sys/kernel/random/entropy_avail.


Si noti inoltre che è possibile utilizzare strumenti come rngdalimentare artificialmente il pool di entropia.
Patrick,

@Patrick davvero, e se hai un nuovo chip e ti fidi della NSA (oh, aspetta, intendo, Intel) potresti usare RDRAND.
derobert,

havegedè un altro buon strumento per alimentare artificialmente il pool di entropia.
Mavillan,

Questa non è la storia completa: l'RNG non esaurisce l'entropia, esaurisce la sua misura interna dell'entropia. Inoltre, un pezzo importante del puzzle è che a gpg non interessa il mouse, è il kernel che lo fa.
Gilles 'SO- smetti di essere malvagio' il

@Gilles Ho chiarito che gpg sta usando Linux RNG. E i bug nello stimatore entropico sembrano al di là dell'ambito.
derobert,

0

Tails ha una generazione di chiavi estremamente veloce perché ha havegedinstallato:

sudo apt-get install haveged
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.