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 ?
Respuestas:
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:
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/random
y/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/random
calcula 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/random
tiende 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/urandom
es 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/random
el 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.fuente
add_input_randomness
endrivers/input/input.c
, pero no sé en qué circunstancias será entropía realidad inyección.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
sync
agregará 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
.fuente
rngd
alimentar artificialmente el grupo de entropía.haveged
Es otra buena herramienta para alimentar artificialmente el grupo de entropía.Tails tiene una generación de claves extremadamente rápida porque ha
haveged
instalado:fuente