Seguridad

/ dev / random vs / dev / urandom y son seguros?

/ dev / random vs / dev / urandom y son seguros?

Empezando

¿Quién hubiera pensado que generar un número aleatorio sería un desastre? Se supone que es tan sencillo como adivinar un número en cualquier lugar entre un rango dado. Pero no es tan simple como parece y también hasta ahora se ha demostrado que todas las máquinas no pueden generar un número aleatorio verdadero por sí mismas.

Por qué las máquinas no pueden generar números aleatorios verdaderos por sí solas?

Sin embargo, las máquinas son solo conjuntos de mecanismos y circuitos instruidos y, por lo tanto, no se les puede instruir para que piensen en un número aleatorio sin ayuda. Y es por eso que hasta ahora y más allá, hemos estado involucrando a la naturaleza oa los humanos con máquinas para generar un verdadero número aleatorio. No discutiremos aquí cómo generar un número aleatorio verdadero, pero discutiremos sobre los generadores de números aleatorios ya implementados y su funcionamiento y debilidades.

¿Por qué es tan importante generar un número aleatorio verdadero??

Surge la pregunta de por qué es importante la generación de números aleatorios verdaderos y la respuesta a eso se debe a problemas de seguridad. La mayoría de los algoritmos criptográficos se basan en la generación de números aleatorios, ya que estos números aleatorios se utilizan para crear claves criptográficas y si los números aleatorios generados no son realmente aleatorios por naturaleza, hacen que todas esas técnicas criptográficas sean más débiles y esas claves se pueden predecir con relativa facilidad. utilizando el algoritmo que se utilizó para generar esas claves aleatorias. Esta es la razón más importante para un verdadero número aleatorio, además de aplicaciones como juegos de azar.

Generador de números aleatorios en kernels de Linux:

El tema de nuestra discusión de hoy se basa en Linux Random Number Generator, en qué factores se basa este generador y si es realmente tan aleatorio o es simplemente otro número aleatorio típicamente poco confiable.

Linux utiliza un generador de números pseudo aleatorios (PRNG) o un generador de números pseudo aleatorios criptográficamente seguro (CSPRNG), lo que significa que utiliza fórmulas matemáticas complejas y propiedades ambientales para lograr la máxima aleatoriedad. Linux fue el primer sistema operativo en incluir PRNG en su espacio de kernel. Esto fue implementado por Theodore Ts'o en 1994.

Linux tiene tres categorías de generadores de números aleatorios, / dev / random, / dev / urandom, / dev / arandom. Estos tres son los archivos en los que Linux almacena números aleatorios. Los números aleatorios en estos archivos se generan utilizando el ruido ambiental de los controladores del dispositivo y otras fuentes. Además, para garantizar la aleatoriedad en sus números aleatorios, Linux usa la entropía, que es el grado de incertidumbre o desorden entre ellos. También puede encontrar la página del manual para el Generador de números aleatorios de Linux (RNG) aquí:

http: // man7.org / linux / man-pages / man4 / random.4.html

/ dev / random versus / dev / urandom versus / dev / arandom:

Las principales diferencias entre / dev / random, / dev / urandom y / dev / arandom es que / dev / random bloquea si la entropía no indica suficiente aleatoriedad, / dev / urandom no bloquea nunca, incluso cuando el generador de números pseudoaleatorios no está completamente sembrado cuando se inicia y, por último, / dev / arandom bloquea solo cuando el generador de números pseudoaleatorios aún no está completamente sembrado. En resumen, / dev / random es el más seguro de todos, luego viene / dev / arandom y el menos seguro es / dev / urandom. Normalmente se usan / dev / random y / dev / urandom porque / dev / arandom en muchos términos es similar a / dev / urandom. La estimación de entropía para el conjunto de números aleatorios en resumen se utiliza para determinar la aleatoriedad de los números generados. Cuanto más entropía es, más aleatoriedad se logra y mejor es. La cantidad actual de entropía y el tamaño de su grupo de entropía están disponibles en / proc / sys / kernel / random / nombrados como entropy_avail y pool_size, respectivamente, que se pueden mostrar en la terminal mediante los comandos:

cat / proc / sys / kernel / random / entropy_avail

Y:

cat / proc / sys / kernel / random / pool_size

Tanto urandom como random se utilizan en diferentes escenarios. 'Urandom' se usa cuando hay una necesidad constante de números aleatorios y su aleatoriedad no es muy importante, mientras que 'random' se usa cuando existe un problema de seguridad y su aleatoriedad debe ser confiable, ya que bloquea la salida de números aleatorios si la entropía no es suficiente. la marca. Aunque la entropía para urandom (Unlimited Random) no es mucho más débil, se recomienda usar aleatoriamente cuando se requiere más seguridad debido a la posibilidad de ataques al número generado por urandom.

Debilidades en los generadores de números aleatorios de Linux

Para hardware de memoria no volátil:

Para los kernels de Linux, el generador de números aleatorios no es bueno para hardware integrado como enrutadores, en los que el estado de arranque es predecible y la fuente de suficiente entropía es limitada. Para este tipo de hardware, se recomienda guardar y utilizar el estado del generador de números aleatorios (RNG) antes del apagado, que se utilizará en el próximo arranque. En tales casos de enrutadores, los atacantes solo pueden comprometer y predecir los números aleatorios generados si tienen acceso a todos los enlaces del enrutador y están escuchando sus enlaces de comunicación o si han accedido directamente al estado RNG guardado desde el enrutador mismo.

Por esta falla de RNG en caso de hardware, los generadores de entropía de terceros vienen al rescate. Estos generadores de entropía, como 'haveged', utilizan la sincronización de la caché del procesador, dispositivos de entrada de audio y video externos para aumentar la entropía a un grado aceptable.

Estimación de la entropía:

Como se mencionó anteriormente, el kernel de Linux determina la aleatoriedad en términos de entropía, pero en realidad no calcula la entropía cada vez y, en su lugar, utiliza estimaciones de entropía. Varias investigaciones también han revelado que la estimación de entropía de números aleatorios utilizados en Linux no son estimaciones adecuadas o más cercanas, lo que hace que la aleatoriedad general de los números sea más débil.

Aunque hay algunas debilidades en Linux Random Number Generator, pero es una opción mucho mejor en comparación con otros RNG, sin olvidar los parches en curso que proporcionan los contribuyentes y desarrolladores de Linux.

Concluyendo:

Todo esto fue de mi parte sobre el generador de números aleatorios en el kernel de Linux. Pasé un buen rato difundiendo este conocimiento contigo. Espero que hayas aprendido algo nuevo a través de él y también que compartas el conocimiento con el mundo. Por último, gracias por invertir tiempo en este artículo.

Las mejores aplicaciones de mapeo de gamepad para Linux
Si te gusta jugar juegos en Linux con un gamepad en lugar de un sistema de entrada de teclado y mouse típico, hay algunas aplicaciones útiles para ti....
Herramientas útiles para jugadores de Linux
Si le gusta jugar juegos en Linux, es probable que haya utilizado aplicaciones y utilidades como Wine, Lutris y OBS Studio para mejorar la experiencia...
Juegos HD remasterizados para Linux que nunca tuvieron un lanzamiento de Linux antes
Muchos desarrolladores y editores de juegos están creando una remasterización HD de juegos antiguos para extender la vida útil de la franquicia, por f...