Explicar en inglés sencillo sobre la entropía disponible

28

Si ejecuto este comando en Ubuntu

sudo cat /proc/sys/kernel/random/entropy_avail

devuelve un número que indica cuánta "entropía" está disponible para el núcleo, pero eso es todo lo que sé. ¿En qué unidad se mide esta entropía? ¿Para qué se usa esto? Me han dicho que es "malo" si ese número es "bajo". ¿Qué tan bajo es "bajo" y qué cosas "malas" sucederán si lo es? ¿Cuál es un buen rango para que esté? ¿Cómo se determina?

Josh Lindsey
fuente

Respuestas:

22

Su sistema recopila algunos números aleatorios "reales" al observar diferentes eventos: actividad de red, generador de números aleatorios de hardware (si está disponible; por ejemplo, los procesadores VIA generalmente tienen un generador de números aleatorios "reales"), y así sucesivamente. If alimenta esos al grupo de entropía del núcleo, que es utilizado por / dev / random. Las aplicaciones que necesitan seguridad extrema tienden a usar / dev / random como su fuente de entropía, o en otras palabras, la fuente de aleatoriedad.

Si / dev / random se queda sin entropía disponible, no puede entregar más aleatoriedad y la aplicación espera que la aleatoriedad se detenga hasta que haya más cosas aleatorias disponibles. El ejemplo que he visto durante mi carrera es que el demonio IMAP de Cyrus quería usar / dev / random para la aleatoriedad y sus sesiones POP querían generar cadenas aleatorias en conexiones APOP desde / dev / random. En un entorno ocupado, hubo más intentos de inicio de sesión que tráfico para alimentar / dev / random -> todo se detuvo. En ese caso, instalé rng-tools y activé el rngd que tenía, que mezclaba números semi aleatorios de / dev / urandom a / dev / random en caso de que / dev / random se quedara sin entropía "real".

Janne Pikkarainen
fuente
19

Si desea una descripción más simple del problema subyacente: algunas aplicaciones (como el cifrado) necesitan números aleatorios. Puede generar números aleatorios usando un algoritmo, pero aunque estos parecen aleatorios en un sentido, son totalmente predecibles en otro. Por ejemplo, si te doy los dígitos 58209749445923078164062862089986280348253421170679, se ven bastante al azar. Pero si te das cuenta de que en realidad son dígitos de PI, entonces sabrías que el próximo será 8.

Para algunas aplicaciones esto está bien, pero para otras aplicaciones (especialmente las relacionadas con la seguridad) la gente quiere una aleatoriedad genuina e impredecible, que no puede ser generada por un algoritmo (es decir, un programa) ya que eso es predecible por definición. Este es un problema porque su computadora es esencialmente un programa, entonces, ¿cómo puede obtener números aleatorios genuinos? La respuesta es midiendo eventos genuinamente aleatorios del mundo exterior, por ejemplo, brechas entre las pulsaciones de teclas y usándolas para inyectar una aleatoriedad genuina en el generador de números aleatorios predecible. El 'grupo de entropía' podría considerarse como el almacén de esta aleatoriedad que se acumula mediante las pulsaciones de teclas (o lo que se está utilizando) y se agota por la generación de números aleatorios.

JustinP
fuente
2
Buena explicación ...
pradipta
Pero PI es irracional e incluiría todas las secuencias, incluida la secuencia anterior, seguida de 9 (en lugar de 8).
Ajay Brahmakshatriya
9

Entropía es un término técnico para "Aleatoriedad". Las computadoras realmente no generan entropía, pero la recopilan observando cosas como las variaciones de las velocidades de rotación del disco duro (un fenómeno físico que es muy difícil de predecir debido a la fricción, etc.) Cuando una computadora quiere generar datos pseudoaleatorios, lo hará siembra una fórmula matemática con entropía verdadera que encontró midiendo clics del mouse, variaciones de giro del disco duro, etc. En términos generales, entropy_availes la medida de bits actualmente disponibles para leer/dev/random

A la computadora le toma tiempo leer la entropía de su entorno a menos que tenga un hardware genial como un diodo ruidoso o algo así.

Si tiene 4096 bits de entropía disponibles y /dev/randompuede esperar, puede esperar poder leer 512 bytes de entropía (4096 bits) antes de que el archivo se bloquee mientras espera más entropía.

Por ejemplo, si " cat /dev/random" su entropía se reducirá a cero. Al principio, obtendrá 512 bytes de basura aleatoria, pero se detendrá y, poco a poco, verá más datos aleatorios.

Sin /dev/randomembargo, no es así como las personas deberían operar . Normalmente, los desarrolladores leerán una pequeña cantidad de datos, como 128 bits, y los usarán para generar algún tipo de algoritmo PRNG. Es cortés no leer más entropía de la /dev/randomque necesita, ya que lleva mucho tiempo construirla y se considera valiosa. Por lo tanto, si lo drena catdándole descuidadamente el archivo como se indica arriba, provocará que otras aplicaciones que necesitan leer se /dev/randombloqueen. En un sistema en el trabajo notamos que muchas funciones criptográficas se estancaban. Descubrimos que un trabajo cron estaba llamando a un script de Python que seguía inicializándoseramdom.random()en cada carrera que se ejecutaba cada pocos segundos. Para solucionar esto, reescribimos el script de Python para que se ejecute como un demonio que se inicializó solo una vez y el trabajo cron leería los datos a través de XMLRPC para que no siguiera leyendo desde /dev/randomel inicio.

Carlos D. Garza
fuente
1
"Para solucionar esto, reescribimos el script de Python para que se ejecute como un demonio que se inicializó solo una vez y el trabajo cron leería los datos a través de XMLRPC para que no siguiera leyendo desde / dev / random en el inicio". --- Excepto por la parte que cité, que es difícil de evaluar porque no está claro si su script realmente necesitaba aleatoriedad o no, su respuesta es muy clara y explícita.
Craig Hicks
8

El archivo de solo lectura entropy_avail proporciona la entropía disponible. Normalmente, será 4096 (bits), un grupo completo de entropía.

Puede leer más en: http://linux.die.net/man/4/random

Premio
fuente