Generar entropía para clave PGP


12

Estoy conectado a una máquina virtual de forma remota e intento generar una clave PGP de 4096 bits, simplemente se cuelga para siempre porque no hay entropía y, dado que estoy trabajando a través del escritorio remoto, probablemente no detecte el movimiento del mouse como entropía.

¿Cómo puedo generar algunos?

Lo intenté cat /dev/urandom > /dev/nullpero eso no ayuda.

Respuestas:


13

La obtención de datos fuera de /dev/random, o /dev/urandomes, sin duda no va a ayudar, todo lo que va a hacer es agotar su fuente de entropía, por lo que el problema aún peor. La principal diferencia entre estos dos archivos es que incluso cuando el núcleo se quede sin entropía urandomseguirá generando datos aleatorios de menor calidad, mientras que randomse bloqueará hasta que pueda recopilar datos aleatorios frescos de alta calidad. PGP requiere los datos aleatorios más altos posibles para generar claves seguras, por lo que siempre se usará /dev/random.

Si usted tiene buenos datos aleatorios alrededor, o exportar parte de otro servidor de /dev/random, puede catque en la de su servidor /dev/randompara obtener más entropía. Sin embargo , nunca debes usar catel mismo archivo dos veces /dev/random.

Si a menudo te encuentras quedando sin entropía, también puedes considerar la instalación de algo como forjado , un demonio que vuelve a generar entropía en segundo plano y se vuelve a llenar /dev/randomsegún sea necesario.

También puede ser tentador para enlazar simbólicamente /dev/randoma /dev/urandom, pero esto debe ser considerado un riesgo de seguridad como cualquier clave generada usarlo pueden ser menos seguros de lo que deberían. Si bien puede ser útil para aplicaciones menos críticas, debe considerar cualquier otro uso posible /dev/random, incluidos otros usuarios que generan sus propias claves, CSR, etc.


Tenga en cuenta que en FreeBSD, /dev/randomes un PRNG de alta calidad , y normalmente no debe bloquearse.
Kevin

@Kevin /dev/randomson PRNG de alta calidad en BSD y Linux modernos, claro. Pero se bloqueará si no hay suficiente entropía disponible. Por otro lado, /dev/urandomno se bloqueará si no hay suficiente disponible, pero su calidad de aleatoriedad podría verse afectada en este caso. En los detalles hay muchas sutilezas entre las implementaciones aleatorias y urandom entre Linux y los diversos BSD, pero lo anterior debería ser cierto en todos los AFAIK.
Huygens

En Linux, puede generar más entropía simplemente haciendo ping a un host (por ejemplo ping 8.8.8.8) si posee otro host de red, intente hacer ping cada 100 ms (si su RTT es <100 ms, por supuesto). Y / o use findpara buscar archivos en su disco duro y vacíe la memoria caché de RAM entre cada búsqueda de archivos.
Huygens

@Huygens: abra la página de manual que vinculé y presione Ctrl + F "kern.random.sys.seeded"; Por defecto, /dev/randomno se bloquea en FreeBSD.
Kevin

1
@ Kevin, sí, tiene razón, la acumulación de entropía o la cosecha son quizás dos formas distintas de "sembrar" el PRNG. Y después de algunas pruebas en mi caja BSD, descubrí que el comportamiento aleatorio y el urandom se comportan de la misma manera, se bloquean cuando no pueden generar PRNG lo suficientemente bueno. Intente ejecutar dd if=/dev/random of=/tmp/rndtest bs=64M count=1después de un nuevo inicio, tomó 2 ejecuciones consecutivas para ver el tiempo para generar el aumento de archivo de 64 MB. Pensé que no vería este efecto con urandom como entrada, pero FreeBSD también parece estar bloqueando, a diferencia de Linux.
Huygens


4

Recomendaría generar sus claves gpg en su máquina local que tendrá una aleatoriedad mucho mejor que la remota. Y luego migre las claves usando SSH a su máquina remota.

Generar localmente será más rápido (más fuente de entropía), más seguro (nadie puede espiar el proceso si su máquina no está infectada, mejor aleatoriedad).

Si aún desea generarlos de forma remota: en Linux puede generar más entropía simplemente haciendo ping a un host (por ejemplo ping 8.8.8.8) si posee otro host de red, intente tener pings cada 100 ms (si su RTT es <100 ms, por supuesto). Y / o use findpara buscar archivos en su disco duro y vacíe la memoria caché de RAM entre cada búsqueda de archivos.

También puede instalar havegedpero leer las limitaciones si lo está ejecutando en un entorno virtual: https://wiki.archlinux.org/index.php/Haveged#Virtual_machines


En mi opinión, esta es la solución correcta: +1 de mi parte.
MadHatter

3

En los sistemas basados ​​en Debian, puede instalar el rng-toolspaquete usando atp-get, y luego iniciar el demonio para generar entropía:

echo HRNGDEVICE=/dev/urandom >> /etc/default/rng-tools && service rng-tools restart

En los servidores CentOS-6, el rngdemonio se instala como una de las herramientas básicas (al menos en la mayoría de los sistemas en los que he trabajado), y puede ejecutar el siguiente comando para iniciarlo, a fin de generar entropía:

sed -i \'s|EXTRAOPTIONS=\"\"|EXTRAOPTIONS=\"-r /dev/urandom\"|g\' /etc/sysconfig/rngd && service rngd restart

No creo que usar urandom como fuente de rngd sea inteligente. Ayudará a agotar la entropía disponible más rápido y una vez agotada será una fuente sesgada para la entropía. Entonces evitaría esta solución.
Huygens

1
sudo yum install haveged && sudo systemctl start haveged

definitivamente funciona en una VM CentOS 7.2. A veces, desea crear claves GPG en una máquina virtual si está creando un grupo y desea que su llavero esté intacto.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.