Qué son random y urandom en Linux con ejemplos
Qué son random y urandom en Linux con ejemplos

¿Qué son /dev/random y /dev/urandom en Linux?

La respuesta corta a esta pregunta es “herramientas de generación de números aleatorios“.

Y estoy seguro de que eres consciente de ello.

Quién iba a pensar que generar un número aleatorio iba a ser un lío, se supone que es tan sencillo como adivinar un número en cualquier lugar dentro de un rango dado.

Pero no es tan sencillo como parece y, además, hasta ahora se ha demostrado que todas las máquinas son incapaces de generar un verdadero número aleatorio por sí solas.

Pero para entender el uso de /dev/random y /dev/urandom, primero necesitas saber por qué la generación de números aleatorios es tan importante.

¿Por Qué es Crucial la Generación de Números Aleatorios?

Concepto de números 0 y 1
Concepto de números 0 y 1

Los ordenadores son máquinas que funcionan con un conjunto de instrucciones (por eso creamos programas para que funcionen).

¿Por qué es tan importante la generación de números aleatorios? La respuesta es sencilla.

Consideraciones 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 se utilizarán posteriormente para crear claves criptográficas.

Y si los números generados no son completamente aleatorios por naturaleza, esto hace que toda la técnica criptográfica sea débil.

Ya que estas claves pueden predecirse fácilmente.

Y ésta es la razón más importante para generar números aleatorios.

Entonces, ¿cómo resuelve Linux esta situación? Muy simple, este es el tema de discusión de hoy.

Nota

/dev/urandom es un generador de números pseudoaleatorios, un PRNG, mientras que /dev/random es un generador de números aleatorios “verdadero”.

Usando /dev/random y /dev/random

Adivinaste bien.

Ambos se utilizan para generar números aleatorios.

Concepto de números aleatorios
Concepto de números aleatorios

Ambos se utilizan para proporcionar una interfaz al generador de números aleatorios a través del kernel.

El generador de números aleatorios recopilará datos aleatorios de fuentes externas, incluidos los controladores de dispositivos, en la reserva de entropía.

Pero hay una gran diferencia entre /dev/random y /dev/urandom ya que utilizan diferentes enfoques para generar números aleatorios.

Cómo /dev/random Generará Números Aleatorios

/dev/random sólo devolverá números aleatorios del grupo de entropía, y si la reserva de entropía está vacía o no indica suficiente aleatoriedad, la lectura a /dev/random se bloqueará.

Esto lo hace ideal para generar números aleatorios de alta calidad.

Cómo /dev/urandom Generará Números Aleatorios

urandom (unlimited random) también usará el grupo de entropía para devolver números aleatorios, pero si la reserva de entropía está vacía, generará datos usando SHA, MD5 o cualquier otro algoritmo.

Esto significa que a diferencia de /dev/random, no bloqueará las lecturas y continuará recibiendo números aleatorios incluso si la aleatoriedad es insuficiente.

Hecho

/dev/urandom es la fuente preferida de aleatoriedad criptográfica en sistemas tipo UNIX.

/dev/random vs /dev/urandom ¿Cuál Elegir?

Random‘ y ‘Urandom‘ están diseñados para casos específicos.

Urandom se utiliza cuando hay una necesidad constante de números aleatorios y su aleatoriedad no es importante.

Mientras que ‘Random’ es adecuado para tareas en las que la seguridad es primordial, ya que bloquea la lectura si la aleatoriedad no es la adecuada.

Nota

Si no estás seguro de si deberías usar /dev/random o /dev/urandom, probablemente quieras usar este último. Como regla general, /dev/urandom debería usarse para todo excepto para claves GPG/SSL/SSH de larga duración. Fuente: Linux man page

Aunque la aleatoriedad de Urandom es ligeramente más débil que la de Random, se sigue utilizando en muchas operaciones, pero yo recomendaría utilizar Random (si insistes en la alta seguridad).

Generar Contraseñas y Números Aleatorios

Para generar una contraseña aleatoria usando Urandom, simplemente ejecuta el siguiente comando:

sudo < /dev/urandom tr -dc A-Za-z0-9 | head -c14; echo
Generar contraseña aleatoria con Urandom
Generar contraseña aleatoria con Urandom

En este ejemplo el comando tr te permitirá filtrar la salida de /dev/urandom, por ejemplo contraseña A a Z, a a z y 0 a 9.

El comando head generará una cadena de 14 caracteres (usando -c14).

También puedes utilizar /dev/urandom para generar números pseudoaleatorios en la línea de comandos de la siguiente manera.

$ od -vAn -N4 -tu < /dev/urandom
696948885
Generación de números con od y urandom
Generación de números con od y urandom

Comandos como este que extraen datos de /dev/urandom y usan od para procesarlos pueden generar números casi aleatorios. Ejecuta el mismo comando numerosas veces y verás que obtienes un rango de números.

$ od -vAn -N4 -tu < /dev/urandom
  971369873
$ od -vAn -N4 -tu < /dev/urandom
 3081534763

Dos de las opciones utilizadas con estos comandos son especialmente interesantes. La -N controla el tamaño de la salida como el número en bytes.

Así, -N4 significa que el número resultante debe tener una longitud de cuatro bytes. Esto no significa que el número resultante proporcionado no pueda ser un número pequeño como 12, sino que utilizará cuatro bytes. Los números más grandes que verá tendrán diez dígitos.

Cambia a -N5 y obtendrás dos números-uno usando 4 bytes y otro usando 1. Omite la opción -N y obtendrás un flujo continuo de números, al menos hasta que te canses de mirarlos y pulses ^C.

$ od -vAn -N5 -tu < /dev/urandom
1370663744 201
$ od -vAn -tu < /dev/urandom
 1222525346 3506392510 3472603188 1731361957
 2202786447 3697119376 4141031630 1771636374
 2835108453 1141912700 3513537515 2700080425
 2291283664  830745707 1850407474 2052151198
 1838501000 3254638902 3844147685  737056947
  413418805 4229695370  260761233 4174428697
 1929587650 2498578944 3860492202 2975877960
 4007230548 4282909881  190249485  240375398
 3184078712 4061367705 3447111623 2020721032
Generación continua de números aleatorios con urandom
Generación continua de números aleatorios con urandom

Haz lo mismo con /dev/random y es probable que te quedes sin energía bastante rápido.

$ od -vAn -tu < /dev/random
 1960047444 2394769128 2626630458 3266170581                                 
   81939044 3682833285 2506051389 3667483199                                 
  580011604 3171815130  973673575 1510995728                                 
  176467351 2427510176  952841361  426189676                                 
 3901860671  212220544 1487021468 2792287659                                 
 3256213045 4265044055  254517127 2761472422                                 
 3353827543  115407916 2122330268 3396355859                                 
 4123045776 3502427665 2506112394 1771015554                                  
^Z
[1]+  Stopped    od -vAn -tu < /dev/random   

Ten en cuenta que la ^Z se utilizó para suspender el proceso cuando se colgó en la línea de comandos. También ten en cuenta que la reserva de entropía se agota y se regenera.

Resumiendo

En este artículo hemos mostrado los fundamentos de /dev/random y /dev/urandom, incluyendo la necesidad de aleatoriedad.

Espero que encuentres esta guía útil, y si tienes alguna pregunta, déjala saber en los comentarios.

Mi Carro Close (×)

Tu carrito está vacío
Ver tienda