GPG non ha abbastanza entropia


86

Ho un sacco di processi in esecuzione in background per provare a ottenere abbastanza entropia, ma sto ancora fallendo.

**We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
Not enough random bytes available.  Please do some other work to give
the OS a chance to collect more entropy! (Need 210 more bytes)**

Ho bisogno di un metodo per generare la chiave che funziona, perché a quanto pare sto fallendo.

Risposte:


112

Hai dato un'occhiata a RNG?

Tipi Fedora / Rh / Centos: sudo yum install rng-tools

Sui tipi deb: sudo apt-get install rng-toolsper impostarlo.

Quindi eseguire sudo rngd -r /dev/urandomprima di generare le chiavi.

Riferimento: http://it.toolbox.com/blogs/lim/how-to-generate-enough-entropy-for-gpg-key-generation-process-on-fedora-linux-38022


4
Inoltre, su una nota più seria, puoi usare sudo apt-get install rng-toolsse sei su Ubuntu invece che sudo yum install rng-utilscome hanno fatto per Fedora, poiché non rng-utilsesiste alcun pacchetto per Ubuntu.
Jason Swett,

4
Il pacchetto è chiamato rng-toolssia su Fedora che su EL6, quindi sospetto un errore di battitura nell'articolo collegato. A proposito, è una buona idea fornire qui le parti essenziali della risposta e il link per riferimento, nel caso in cui il link si interrompa in futuro.
Michael Hampton

11
Non c'è "entropia di bassa qualità" o "entropia falsa" in urandom. urandom chiama lo stesso codice di / dev / random. Non è necessario inserire una casualità aggiuntiva nel CSPRNG (tranne all'inizio, e lì la tua distribuzione dovrebbe occuparsene). Questo è un mito e non dovrebbe essere propagato. Vedi ad esempio sockpuppet.org/blog/2014/02/25/safely-generate-random-numbers o questo video: media.ccc.de/v/32c3-7441-the_plain_simple_reality_of_entropy
Sebastian Wiesinger,


2
Il commento più votato è senza senso; sfortunatamente lo vedo molto su SO. Gli avvertimenti (anche se completamente sbagliati) otterranno molti voti e nessun modo per correggerli (nessuna opzione di voto negativo) significa che non possiamo liberarci dei miti.
Stijn de Witt,

28

Sono stato in grado di generare la chiave da

apt-get install rng-tools

In un'altra finestra SSH aperta

 gpg --gen-key

Torna alla tua prima sessione SSH ed esegui

sudo rngd -r /dev/urandom

Lascia correre finché gpg non genera le tue chiavi!


9
Consiglio vivamente di non usarlo mai /dev/urandomper generare chiavi di qualsiasi importanza.
Andrew Barber,

12
@AndrewBarber Nonsense. È il metodo raccomandato.
David Schwartz,

3
@AndrewBarber È esplicitamente progettato per questo scopo. Fondamentalmente, /dev/randomè un errore di progettazione. Dovrebbe sempre e solo bloccare alla prima (sempre) invocazione (al primo avvio) quando non è stata ancora raccolta alcuna entropia. Come fa su altri sistemi operativi. Invece ora abbiamo due piscine. Non usarlo mai /dev/randomnon ha vantaggi.
Stijn de Witt,

@AndrewBarber cosa consiglieresti invece?
qodeninja,

13

Per verificare la quantità di byte di entropia attualmente disponibili, utilizzare

cat /proc/sys/kernel/random/entropy_avail

Il bucket di entropia è grande 4096 byte, che può essere esaurito molto rapidamente.

Usando questo piccolo strumento "readspeed" ( http://1wt.eu/tools/readspeed/ ), puoi misurare la velocità con cui il secchio di entropia viene riempito con metodi diversi.

Ad esempio, avvia:

$ ./readspeed < /dev/random

e sposta il mouse. Vedrai che "readspeed" svuota il contenitore dell'entropia non appena viene riempito, e quando sposti il ​​mouse, si riempie un po '.

Provando diversi metodi, sembra che l'input da tastiera e i movimenti del mouse siano i più efficienti per riempire quel secchio. I trasferimenti di rete e le copie del disco rigido non hanno molta influenza.

Infine, sono disponibili dispositivi per la generazione di entropia, come questo: http://www.entropykey.co.uk/ .


4
Non c'è "entropia di bassa qualità" in urandom. urandom chiama lo stesso codice di / dev / random. Questo è un mito e non dovrebbe essere propagato. Vedi ad esempio sockpuppet.org/blog/2014/02/25/safely-generate-random-numbers o questo video: media.ccc.de/v/32c3-7441-the_plain_simple_reality_of_entropy
Sebastian Wiesinger

Questa risposta ha 5 anni. Pensavamo che l'urandom non fosse sicuro come quello casuale, ma le cose sono cambiate da allora e l'urandom è considerato sicuro.
Julien Vehent,

1
Il fatto è che era sicuro dall'inizio. Gli avvertimenti erano sbagliati anche 7 anni fa.
Stijn de Witt,

8

+1 per rng-tools

Nel caso in cui tu sia bloccato in una situazione come me - non ho i permessi per installare nuovo software (rng-tools) su un server senza testa praticamente senza hardware di input (scheda audio, tastiera, mouse) collegato. È possibile eseguire questo semplice codice da un altro terminale connettersi allo stesso server, da aggiungere all'entropia. Non importa se si avvia l'esecuzione prima o dopo l'avviogpg --gen-key

$ nice -n 19 bash
$ until [ $COUNT -lt 1 ]; do
  let COUNT=`cat /proc/sys/kernel/random/entropy_avail`
  echo "`date` COUNTER $COUNT"
done

La prima riga è avviare una nuova shell bash, con priorità più bassa (dovevo essere gentile su un server condiviso da molti utenti). Il ciclo until è infinito, quindi ricordati di romperlo una volta generata la chiave. Tutto ciò che sta facendo è indurre il traffico di rete ad aumentare l'entropia. Monitora anche il contatore entropy_avail per mostrare come viene riempito e svuotato dall'altra parte da gpg. Nel mio caso, il contatore si è riempito rapidamente fino a 64 e si è svuotato di nuovo a 0 (suppongo che gpg raccolga in blocco di 64). Stavo aspettando la generazione di chiavi a 4096 bit per oltre 3 ore sul server. Dopo aver iniziato a eseguire questo script, è stato completato in meno di 5 minuti.


Anch'io non avevo accesso root sul server remoto e questo ha funzionato nel creare un po 'di entropia. Penso che la condizione dovrebbe essere cambiata in [ $COUNT -lt 0 ]. Perché per un sistema con davvero meno entropia, a volte raggiunge 0 e si ferma. GPG ha davvero fame di entropia.
Ajay Brahmakshatriya,

Grazie, questo dovrebbe essere abbastanza per me per fare una generazione di entrophy su una scatola airgapped. Tranne che non userò la data poiché è prevedibile
grepsedawk

7

Ero obbligato e determinato a generare entropia sul mio server Ubuntu 14.04 senza testa per generare una chiave 4096 con gpg --gen-key

Esiste un pacchetto per generare entropia chiamato hasged. Esempio di installazione:

sudo apt-get install haveged

Ho dovuto sudo apt-get install rng-toolsdal momento che è una dipendenza nel seguente test.

Esempio di test per vedere se l'entropia è generata da hasged:

cat /dev/random | rngtest -c 1000

Una piccola quantità di guasti è accettabile in qualsiasi generatore di numeri casuali, ma ci si può aspettare di vedere 998-1000 successi molto spesso quando si utilizza il passaggio del mouse.

L'ho scoperto in un tutorial qui:

https://www.digitalocean.com/community/tutorials/how-to-setup-additional-entropy-for-cloud-servers-using-haveged

Ora ho le chiavi dopo l'esecuzione gpg --gen-key


0

Ho riscontrato questo problema durante l'esecuzione pacman-key --initin arch. Le altre soluzioni qui non hanno funzionato bene per me, ma ho scoperto che il ping del mio router funzionava semplicemente bene:ping -f ip.of.my.router



0

havegedè il modo migliore, ma se non riesci a installare nulla, puoi generare manualmente entropia. Questo metodo ha permesso gpg --gen-kendi completare in 1-2 minuti sulla mia macchina (rispetto ai 10 con haveged). Quindi è circa 10 volte più lento.

Esegui questo in un altro terminale mentre gpg --gen-keyè in esecuzione:

while true; do
    # print entropy available
    cat /proc/sys/kernel/random/entropy_avail
    # write a 1 MB stream of zeros to /tmp/foo
    # "conv=fdatasync" flushes the disk cache
    dd bs=1M count=1 if=/dev/zero of=/tmp/foo conv=fdatasync
done

Una fodera:

while true; do cat /proc/sys/kernel/random/entropy_avail; dd bs=1M count=1 if=/dev/zero of=/tmp/foo conv=fdatasync; done
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.