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.