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 ...
Respuestas:
Linux tiene dos generadores de números aleatorios disponibles para el espacio de usuario,
/dev/random
y/dev/urandom
./dev/random
es 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 funcionesadd_input_randomness
yadd_interrupt_randomness
. Los procesos de lectura de este dispositivo se bloquearán si se agota la entropía./dev/urandom
es 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.c
en el árbol de fuentes del núcleo. Está bien comentado y la mayor parte de lo que pides se explica allí.FreeBSD
/dev/random
por 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 (cambiablessysctl kern.random
). Se cree que el algoritmo Yarrow es seguro siempre que se desconozca el estado interno, por/dev/random
lo tanto , siempre debe generar datos de alta calidad sin bloqueo. Ver al azar (4) .En NetBSD,
/dev/random
proporciona 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/random
es un generador de hardware,/dev/srandom
es 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/urandom
es similar pero vuelve a un PRNG cuando el grupo de entropía está vacío. El cuarto,/dev/arandom
tambié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/urandom
compatibilidad 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) .fuente
cat /dev/random
y siempre me pregunté por qué mi transmisión se detuvo después de tantos personajes