¿Es / dev / random data un cifrado AES psuedo-random, y de dónde viene la entropía?

8

Mi comprensión actual de un grupo de entropía es que reúne bits de datos verdaderamente aleatorios a una velocidad lenta. Me gustaría saber cómo Unix y Linux recopilan entropía, y cómo / dev / random utiliza esa entropía.

He escuchado (genéricamente) de métodos de recolección de entropía, como el estado de la CPU de la tarjeta de video cuando llega un paquete de red seleccionado "al azar", que coincide con el factor siseo en el convertidor digital-analógico, y otros métodos aún más obtusos.

Creo que el "grupo" de entropía se aprovecha según sea necesario, y se usa para sembrar un generador aleatorio de psuedo ...

No busco una respuesta en profundidad, pero me interesa saber si este es el enfoque general utilizado por Unix / Linux? ... y tal vez algunas pistas sobre lo que realmente está sucediendo en la cara de carbón de la colección de entropía. ... y luego, ¿en qué se alimenta la entropía? ¿Es una cifra AES Rijndael?

La información de fondo para mis comentarios anteriores, provino de Steve Gibson Security Now! podcast: Episodio # 301 Going Random, Parte 2 de 2 ... Él solo habló genéricamente (pero como es su estilo, con suficiente detalle y claridad para que incluso yo pudiera entenderlo. Haber escuchado los 300 episodios anteriores ayuda :) ... y me gustaría saber si así es como lo hace Unix / Linux ...

Peter.O
fuente

Respuestas:

14

Linux tiene dos generadores de números aleatorios disponibles para el espacio de usuario, /dev/randomy /dev/urandom.

/dev/randomes una fuente de aleatoriedad "verdadera", es decir, no es generada por un generador de números pseudoaleatorios. El controlador de entrada y el controlador de interrupciones alimentan la entropía a través de las funciones add_input_randomnessy add_interrupt_randomness. Los procesos de lectura de este dispositivo se bloquearán si se agota la entropía.

/dev/urandomes un generador de números pseudoaleatorios. Es alimentado por el mismo grupo de entropía que /dev/random, pero cuando se agota, cambia a un generador criptográficamente fuerte.

Las aplicaciones de espacio de usuario pueden ingresar al grupo de entropía escribiendo a /dev/{,u}random.

Lea la página de manual al azar (4) y el archivo drivers/char/random.cen el árbol de fuentes del núcleo. Está bien comentado y la mayor parte de lo que pides se explica allí.


FreeBSD /dev/randompor defecto es un generador de números pseudoaleatorio que utiliza el algoritmo Yarrow (pero puede apuntar a un RNG de hardware si hay uno conectado). El generador de software toma entropía de Ethernet y conexiones seriales e interrupciones de hardware (cambiables sysctl kern.random). Se cree que el algoritmo Yarrow es seguro siempre que se desconozca el estado interno, por /dev/randomlo tanto , siempre debe generar datos de alta calidad sin bloqueo. Ver al azar (4) .

En NetBSD, /dev/randomproporciona datos aleatorios basados solo en la entropía recopilada (de discos, red, dispositivos de entrada y / o unidades de cinta; ajustable mediante rndctl ), mientras que recurre/dev/urandom a un PRNG cuando el grupo de entropía está vacío, similar a Linux. Ver random (4) , rndctl (8) , rnd (9) .

OpenBSD tiene cuatro generadores: /dev/randomes un generador de hardware, /dev/srandomes un generador de datos aleatorios seguro (que usa MD5 en el grupo de entropía: "el disco y el dispositivo de red se interrumpe y tal"), /dev/urandomes similar pero vuelve a un PRNG cuando el grupo de entropía está vacío. El cuarto, /dev/arandomtambién es un PRNG pero usa RC4 . Ver random (4) , arc4random (3) .

Mac OS X también usa el algoritmo Yarrow para /dev/random, pero tiene una /dev/urandomcompatibilidad idéntica . "El demonio SecurityServer alimenta regularmente entropía adicional al generador a partir de mediciones aleatorias de jitter del núcleo". Ver al azar (4) .

camh
fuente
Gracias. Una buena descripción general, y desde la fuente, veo que estamos seguros en manos de un Registro de desplazamiento de retroalimentación generalizado retorcido (cosas de miedo :) ... Junto con entradas obtusas "aleatorias" al grupo, parece que un hash SHA es generó "a través del grupo, 16 palabras (512 bits) a la vez" y se mezcló de nuevo en el grupo, y luego se realizaron algunos giros más en el grupo ... Steve Gibson comenta en su podcast que: SHA-256 usa / es el hash más avanzado que tenemos. ... No descubrí qué genera / dev / salida urandom, pero el proceso de preparación es ciertamente significativo
Peter.O
+1, buena respuesta; Una vez intenté generar datos de caracteres aleatorios cat /dev/randomy siempre me pregunté por qué mi transmisión se detuvo después de tantos personajes
Mike Pennington,