¿Agregar "entropía de números aleatorios" para las claves GPG?

¿Agregar "entropía de números aleatorios" para las claves GPG?

En el siguiente vídeo:CÓMO de Linux: Proteja sus datos con PGP, Parte 2, se le muestra cómo crear un par de claves con gpg. Aproximadamente a las 1:50, el instructor dice lo siguiente:

Mientras se genera la clave, es una buena ideamueve el mouse alrededorun poco para darle un poco más de entropía de números aleatorios para la creación del par de claves.

Esto me parece un mito, especialmente porque las herramientas de línea de comandos normalmente no deberían verse afectadas por el cursor. Por otro lado, no tengo idea de cómo funciona el generador de números aleatorios de Linux, ya sea compartido por la GUI o independiente de ella. ¿Hay alguna base en lo que él afirma, o este es un ejemplo deprogramación de culto de carga?

Respuesta1

Hay una pizca de verdad en esto, de hecho más verdad que mito, pero aun así la declaración refleja un malentendido fundamental de lo que está sucediendo. Sí, mover el ratón mientras se genera una clave con GPG puede ser una buena idea. Sí, mover el mouse aporta algo de entropía que hace que los números aleatorios sean aleatorios. No, mover el mouse no hace que la clave sea más segura.

Todos los buenos generadores aleatorios adecuados para criptografía, y el de Linux está en esa categoría, tienen dos componentes:

  • Unentropíafuente, que no es determinista. El propósito de la entropía es iniciar el generador de números aleatorios con datos impredecibles. La fuente de entropía debe ser no determinista: de lo contrario, un adversario podría reproducir el mismo cálculo.
  • Agenerador de números pseudoaleatorios, que produce números aleatorios impredecibles de forma determinista a partir de un estado interno cambiante.

La entropía tiene que provenir de una fuente externa a la computadora. El usuario es una fuente de entropía. Lo que hace el usuario en su mayoría no es aleatorio, pero la precisión de las pulsaciones de teclas y los movimientos del mouse es tan impredecible que resulta ligeramente aleatorio; no muy aleatorio, pero poco a poco se acumula. Otras posibles fuentes de entropía incluyen la sincronización de los paquetes de red y el ruido blanco de la cámara o el micrófono. Diferentes versiones y configuraciones del kernel pueden utilizar un conjunto diferente de fuentes. Algunas computadoras tienen circuitos RNG de hardware dedicados basados ​​en desintegración radiactiva o, lo que es menos impresionante, circuitos electrónicos inestables. Estas fuentes dedicadas son especialmente útiles en dispositivos y servidores integrados que pueden tener un comportamiento bastante predecible en su primer arranque, sin que un usuario haga cosas raras.

Linux proporciona números aleatorios a los programas a través de dos dispositivos:/dev/randomy/dev/urandom. La lectura desde cualquiera de los dispositivos devuelve calidad criptográfica. Ambos dispositivos utilizan el mismo estado RNG interno y el mismo algoritmo para transformar el estado y producir bytes aleatorios. Tienen limitaciones peculiares que hacen que ninguno de ellos sea lo correcto:

  • /dev/urandompuede devolver datos predecibles si el sistema aún no ha acumulado suficiente entropía.
  • /dev/randomcalcula la cantidad de entropía disponible y la bloquea si no hay suficiente. Esto suena bien, excepto que el cálculo se basa en consideraciones teóricas que hacen que la cantidad de entropía disponible disminuya linealmente con cada bit de salida. Por ello /dev/randomtiende a bloquearse muy rápidamente.

Los sistemas Linux guardan el estado interno del RNG en el disco y lo restauran en el momento del arranque. Por lo tanto, la entropía se transfiere de un arranque al siguiente. El único momento en el que un sistema Linux puede carecer de entropía es cuando está recién instalado. Una vez que hay suficiente entropía en el sistema, la entropía no disminuye; sólo disminuye el cálculo defectuoso de Linux. Para más explicaciones sobre esta consideración, lea/dev/urandomes adecuado para generar una clave criptográfica, por un criptógrafo profesional. Ver también¿Puedes explicar la estimación de entropía utilizada en random.c?.

Mover el mouse agrega más entropía al sistema. Perogpg sólo puede leer desde /dev/random, no/dev/urandom(una forma de resolver este problema es crear /dev/randomel mismo dispositivo 1:9 que /dev/urandom), por lo que nunca corre el riesgo de recibir números aleatorios que no sean lo suficientemente aleatorios.Si no mueve el mouse, la clave es lo más aleatoria posible; pero lo que puede pasar es que gpg se bloqueeen una lectura de /dev/random, esperando a que aumente el contador de entropía del núcleo.

Respuesta2

GPG utiliza el generador de números aleatorios (kernel) de Linux. El generador del kernel obtiene entropía (aleatoriedad) de todo tipo de lugares, entre ellos está el tiempo de interrupción, para ciertas interrupciones. Mover el mouse (y escribir, actividad del disco, etc.) generará interrupciones.

Por lo tanto, mover el mouse potencialmente alimenta el generador de números aleatorios. Pero si es así depende de la versión exacta del kernel que se utilice; Las versiones más nuevas no utilizan (al menos en mis pruebas) interrupciones del teclado o del mouse para la entropía. La actividad del disco, sin embargo, sí lo hace (por lo que, por ejemplo, la ejecución syncagregará una cantidad potencialmente grande de entropía, dependiendo de cuánto se vacíe).

En resumen: esto no es cierto en las versiones actuales de Linux. Fue en los mayores.

Sin embargo, si el generador se queda sin entropía, se supone que simplemente se detendrá, por lo que la generación de claves se suspenderá hasta que se genere algo de entropía. Por lo tanto, sería un problema eterno, no un problema de seguridad.

Puedes ver cuánta entropía hay disponible mediante cat /proc/sys/kernel/random/entropy_avail.

Respuesta3

Tails tiene una generación de claves extremadamente rápida porque tiene havegedinstalado:

sudo apt-get install haveged

información relacionada