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


10

En el siguiente video: Linux COMO: Asegure sus datos con PGP, Parte 2 , se le muestra cómo crear un par de claves gpg. Aproximadamente 1:50, el instructor dice lo siguiente:

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

Esto me parece un mito, especialmente porque las herramientas de línea de comandos 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, si es compartido por la GUI o independiente de él. ¿Hay algún stock en lo que dice, o este es un ejemplo de programación de culto de carga ?


Como pregunta secundaria, ¿es este el uso correcto del "mito urbano" o existe una frase similar para "mito dentro de la informática"?
IQAndreas

1
Creo que la frase es leyenda urbana ; Nunca he oído hablar del mito urbano . Ver en.wikipedia.org/wiki/Urban_legend En informática, la frase "culto a la carga" podría ser apropiada.
derobert

Respuestas:


8

Hay un grano de verdad en esto, de hecho más verdad que mito, pero no obstante, la declaración refleja un malentendido fundamental de lo que está sucediendo. Sí, mover el mouse mientras se genera una clave con GPG puede ser una buena idea. Sí, mover el mouse contribuye con una 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 la criptografía, y Linux está en esa categoría, tienen dos componentes:

  • Una fuente de entropía , que no es determinista. El propósito de la entropía es arrancar 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.
  • Un generador de números pseudoaleatorios , que produce números aleatorios impredecibles de manera determinista a partir de un estado interno cambiante.

La entropía debe provenir de una fuente externa a la computadora. El usuario es una fuente de entropía. Lo que el usuario hace en su mayoría no es aleatorio, pero la sincronización precisa de las pulsaciones de teclas y los movimientos del mouse es tan impredecible que puede ser ligeramente aleatoria, no muy aleatoria, pero poco a poco se acumula. Otras fuentes potenciales de entropía incluyen la sincronización de los paquetes de red y el ruido blanco de la cámara o el micrófono. Las diferentes versiones y configuraciones de kernel pueden usar un conjunto diferente de fuentes. Algunas computadoras tienen circuitos RNG de hardware dedicados basados ​​en la desintegración radiactiva o, menos impresionantemente, en 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 cualquier dispositivo devuelve calidad criptográfica. Ambos dispositivos usan el mismo estado RNG interno y el mismo algoritmo para transformar el estado y producir bytes aleatorios. Tienen limitaciones peculiares que no hacen que ninguno de ellos sea lo correcto:

  • /dev/urandom puede devolver datos predecibles si el sistema aún no ha acumulado suficiente entropía.
  • /dev/randomcalcula la cantidad de entropía disponible y bloques 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 lo tanto, /dev/randomtiende a bloquearse muy rápidamente.

Los sistemas Linux guardan el estado interno RNG en el disco y lo restauran en el momento del arranque. Por lo tanto, la entropía se transfiere de una bota a la siguiente. El único momento en 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; solo el cálculo defectuoso de Linux disminuye. Para obtener más explicaciones de esta consideración, leer /dev/urandomes adecuado para generar una clave criptográfica , por un criptógrafo profesional. Vea aso ¿Puede explicar la estimación de entropía utilizada en random.c .

Mover el mouse agrega más entropía al sistema. Pero gpg solo puede leer /dev/random, no/dev/urandom (una forma de resolver este problema es hacer /dev/randomel mismo dispositivo 1: 9 que /dev/urandom), por lo que nunca corre el riesgo de recibir números aleatorios no aleatorios. Si no mueve el mouse, la tecla es tan aleatoria como puede ser; pero lo que puede suceder es que gpg puede bloquearse en una lectura /dev/random, esperando que el contador de entropía del núcleo aumente.


Excepto que las versiones actuales de Linux no usan, al menos desde mi prueba, dispositivos de entrada como fuente de entropía (o al menos de entropía estimada). Estoy bastante seguro de que cambiaron eso porque en teoría podrían estar bajo el control de un atacante.
derobert

Como @derobert de 3,12 hay una llamada a add_input_randomnessen drivers/input/input.c, pero no sé en qué circunstancias será entropía realidad inyección.
Gilles 'SO- deja de ser malvado'

Supongo que agrega entropía, pero con una estimación de 0 ... Probé con un mouse USB y un teclado PS / 2, ninguno de los dos parecía aumentar la estimación de entropía. Sin embargo, no estoy seguro de por qué, ya que veo la llamada a credit_entropy_bits en el código.
derobert

3

GPG está utilizando el generador de números aleatorios de Linux (kernel). El generador de 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 realmente alimenta el generador de números aleatorios. Pero si lo hace depende de la versión exacta del kernel en uso; las versiones más nuevas no usan (al menos en mis pruebas) interrupciones de teclado o mouse para entropía. Sin embargo, la actividad del disco sí lo hace (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. Estaba en los más viejos.

Sin embargo, si el generador se queda sin entropía, se supone que simplemente se detiene, por lo que su generación de claves se bloqueará hasta que se genere algo de entropía. Por lo tanto, sería un problema para siempre, no un problema de seguridad.

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


También tenga en cuenta que puede usar herramientas como rngdalimentar artificialmente el grupo de entropía.
Patrick

@Patrick de hecho, y si tienes un nuevo chip y confías en la NSA (oh, espera, quiero decir, Intel) podrías usar RDRAND.
derobert

havegedEs otra buena herramienta para alimentar artificialmente el grupo de entropía.
mavillan

Esa no es la historia completa: el RNG no se queda sin entropía, se queda sin su medida interna de entropía. Además, una pieza importante del rompecabezas es que a gpg no le importa el mouse, es el núcleo el que sí.
Gilles 'SO- deja de ser malvado'

@Gilles He aclarado que gpg está utilizando Linux RNG. Y los errores en el estimador de entropía parecen estar más allá del alcance.
derobert

0

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

sudo apt-get install haveged
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.