GPG no tiene suficiente entropía

86

Tengo un montón de procesos ejecutándose en segundo plano para tratar de obtener suficiente entropía, pero todavía estoy fallando.

**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)**

Necesito un método para generar la clave que funcione, porque aparentemente lo que intento hacer es fallar.

Joey BagODonuts
fuente

Respuestas:

112

¿Has echado un vistazo a RNG?

Tipos de Fedora / Rh / Centos: sudo yum install rng-tools

En tipos de deb: sudo apt-get install rng-toolspara configurarlo.

Luego, ejecute sudo rngd -r /dev/urandomantes de generar las claves.

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

Danny Staple
fuente
44
Además, en una nota más seria, puede usar sudo apt-get install rng-toolssi está en Ubuntu en lugar de lo sudo yum install rng-utilsque tienen para Fedora, ya que no rng-utilsexiste un paquete para Ubuntu.
Jason Swett
44
El paquete se nombra rng-toolstanto en Fedora como en EL6, por lo que sospecho que hay un error tipográfico en el artículo vinculado. Por cierto, es una buena idea proporcionar las partes esenciales de la respuesta aquí, y el enlace de referencia, en caso de que el enlace se cierre en el futuro.
Michael Hampton
11
No hay "entropía de baja calidad" o "entropía falsa" en urandom. urandom llama al mismo código que / dev / random. No es necesario alimentar la aleatoriedad adicional en el CSPRNG (excepto en el momento de arranque, y allí su distribución debe ocuparse de ello). Este es un mito y no debe propagarse. Ver por ejemplo sockpuppet.org/blog/2014/02/25/safely-generate-random-numbers o este video: media.ccc.de/v/32c3-7441-the_plain_simple_reality_of_entropy
Sebastian Wiesinger
2
El comentario más votado es una tontería; desafortunadamente veo esto mucho en SO. Las advertencias (incluso cuando están completamente equivocadas) obtendrán muchos votos y no hay forma de corregirlas (sin opción de voto negativo) significa que no podemos deshacernos de los mitos.
Stijn de Witt
28

Pude generar la clave

apt-get install rng-tools

En otra ventana SSH abierta

 gpg --gen-key

Regrese a su primera sesión SSH y ejecute

sudo rngd -r /dev/urandom

¡Deje que esto se ejecute hasta que gpg genere sus claves!

Joey BagODonuts
fuente
99
Definitivamente recomendaría no usarlo /dev/urandompara generar claves de importancia.
Andrew Barber
12
@AndrewBarber Tonterías. Es el método recomendado.
David Schwartz
3
@AndrewBarber Está explícitamente diseñado para ese propósito. Básicamente, /dev/randomes un error de diseño. Solo debería bloquearse en la primera invocación (en el primer arranque) cuando aún no se ha recogido ninguna entropía. Al igual que en otros sistemas operativos. En cambio, tenemos dos piscinas ahora. Simplemente nunca lo use /dev/randomno tiene ventajas.
Stijn de Witt
@AndrewBarber, ¿qué recomendarías en su lugar?
qodeninja
13

Para verificar la cantidad de bytes de entropía actualmente disponibles, use

cat /proc/sys/kernel/random/entropy_avail

El depósito de entropía tiene un tamaño de 4096 bytes, que puede agotarse muy rápidamente.

Con esta pequeña herramienta de 'velocidad de lectura' ( http://1wt.eu/tools/readspeed/ ), puede medir la rapidez con la que se llena el depósito de entropía con diferentes métodos.

Por ejemplo, inicie:

$ ./readspeed < /dev/random

y mueve tu mouse. Verá que la 'velocidad de lectura' vacía el cubo de entropía tan pronto como se llena, y cuando mueve el mouse, se llena un poco.

Al probar diferentes métodos, parece que la entrada del teclado y los movimientos del mouse son los más eficientes para reponer ese cubo. Las transferencias de red y las copias del disco duro no tienen mucha influencia.

Finalmente, hay dispositivos de generación de entropía disponibles, como este: http://www.entropykey.co.uk/ .

Julien Vehent
fuente
44
No hay "entropía de baja calidad" en urandom. urandom llama al mismo código que / dev / random. Este es un mito y no debe propagarse. Ver por ejemplo sockpuppet.org/blog/2014/02/25/safely-generate-random-numbers o este video: media.ccc.de/v/32c3-7441-the_plain_simple_reality_of_entropy
Sebastian Wiesinger el
Esta respuesta tiene 5 años. Pensamos que urandom no era tan seguro como aleatorio entonces, pero las cosas han cambiado desde entonces y urandom se considera seguro.
Julien Vehent
1
El hecho es que estuvo a salvo desde el principio. Las advertencias estaban equivocadas hace 7 años también.
Stijn de Witt
8

+1 para herramientas rng

En caso de que esté atrapado en una situación como yo, no tener permisos para instalar un nuevo software (rng-tools) en un servidor sin cabeza con prácticamente ningún hardware de entrada (tarjeta de sonido, teclado, mouse) conectado. Puede ejecutar este código simple desde otra terminal, conectarse al mismo servidor, para agregar a la entropía. No importa si comienza a ejecutar esto antes o después de comenzargpg --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 primera línea es comenzar un nuevo shell bash, con menor prioridad (necesitaba ser amable en un servidor compartido por muchos usuarios). El bucle hasta es infinito, así que recuerde romperlo una vez que se genera la clave. Todo lo que está haciendo es causar que el tráfico de la red aumente la entropía. También monitorea el contador entropy_avail para mostrar cómo se llena y vacía gpg en el otro lado. En mi caso, el contador se llenó rápidamente hasta 64 y se vació de nuevo a 0 (supongo que el GPG aumenta en un trozo de 64). Estaba esperando la generación de claves de 4096 bits durante más de 3 horas en el servidor. Después de comenzar a ejecutar este script, terminó en menos de 5 minutos.

Raj
fuente
Yo tampoco tenía acceso de root en el servidor remoto y esto funcionó para crear algo de entropía. Creo que la condición debería cambiarse a [ $COUNT -lt 0 ]. Porque para un sistema con realmente menos entropía, a veces llega a 0 y se detiene. GPG tiene mucha hambre de entropía.
Ajay Brahmakshatriya
Gracias, esto debería ser suficiente para mí para hacer una generación de entrofia en una caja con aire. Excepto que no
usaré la
7

Estaba obligado y decidido a generar entropía en mi servidor Ubuntu 14.04 sin cabeza para generar una clave 4096 con gpg --gen-key

Hay un paquete para generar entropía llamado haveged. Ejemplo de instalación:

sudo apt-get install haveged

Tuve que hacerlo sudo apt-get install rng-toolsya que es una dependencia en la siguiente prueba.

Ejemplo de una prueba para ver si la entropía es generada por forjado:

cat /dev/random | rngtest -c 1000

Una cantidad muy pequeña de fallas es aceptable en cualquier generador de números aleatorios, pero puede esperar ver 998-1000 éxitos muy a menudo cuando se utiliza el vuelo estacionario.

Lo descubrí en un tutorial aquí:

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

Ahora tengo llaves después de correr gpg --gen-key

DMfll
fuente
0

Me encontré con este problema cuando se ejecuta pacman-key --initen el arco. Las otras soluciones aquí no funcionaron bien para mí, pero descubrí que el simple enrutamiento de mi enrutador funcionó bien:ping -f ip.of.my.router

Yona Appletree
fuente
0

havegedes la mejor manera, pero si no puede instalar nada, puede generar manualmente la entropía. Este método permitió gpg --gen-kencompletar en 1-2 minutos en mi máquina (en comparación con 10 segundos haveged). Entonces es aproximadamente 10 veces más lento.

Ejecute esto en otra terminal mientras se gpg --gen-keyestá ejecutando:

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

Un trazador de líneas:

while true; do cat /proc/sys/kernel/random/entropy_avail; dd bs=1M count=1 if=/dev/zero of=/tmp/foo conv=fdatasync; done
wisbucky
fuente