
/dev/random es un archivo especial que sirve como un generador de números aleatorios, o un generador de números seudo-aleatorios. Permite el acceso a ruido ambiental recogido de dispositivos y otras fuentes [...] /dev/urandom que reutiliza la fuente interna para producir más bits seudoaleatorios. Esto implica que llamadas de lectura nunca se bloquearán, pero la salida puede contener menos entropía que una lectura de /dev/random. La intención es servir como un generador de números seudoaleatorios criptográficamente seguro. ??ste puede ser utilizado en aplicaciones que no necesiten de tanta seguridad. (Wikipedia)
Para generar password aleatorias usaremos una combinación de los comandos tr y head, para poder hacer legible para humanos los bits aleatorios que nos entregará urandom.
Si hacemos un cat directamente a /dev/urandom solamente vamos a ver caracteres raros
Para "traducir" estos bits aleatorios a caracteres legibles por nosotros usaremos translate.
De esta forma, le decimos a tr que nos interprete los bits en caracteres de la A a la Z (mayúscula). Podemos jugar con el juego de caracteres que queremos obtener, por ejemplo decirle que me muestre letras de la a-z y A-Z
Tambien podemos decirle que nos muestre números y caracteres como guión o guión bajo. El comando final quedaria de la siguiente forma:
tr -dc A-Za-z0-9_ < /dev/urandom | head -c 8
Con head -c 8 le diremos que nos muestre solo los primeros 8 caracteres. Podemos cambiar su valor si deseamos caracteres de mayor o menor longitud. Al final de la linea podemos agregarle un && echo "" para que nos muestre un salto de linea al final.
[zerial@balcebu ~]$ tr -dc A-Za-z0-9_ < /dev/urandom | head -c 8 && echo Z2_gaCcE [zerial@balcebu ~]$ tr -dc A-Za-z0-9_ < /dev/urandom | head -c 8 && echo Tob68gN0 [zerial@balcebu ~]$ tr -dc A-Za-z0-9_ < /dev/urandom | head -c 8 && echo boEzFU3O [zerial@balcebu ~]$ tr -dc A-Za-z0-9_ < /dev/urandom | head -c 8 && echo EFfcRcuf [zerial@balcebu ~]$ tr -dc A-Za-z0-9_ < /dev/urandom | head -c 8 && echo cTY330uO [zerial@balcebu ~]$ tr -dc A-Za-z0-9_ < /dev/urandom | head -c 8 && echo l3UnaDPo [zerial@balcebu ~]$
O una forma más elegante:
$ tr -dc A-Za-z0-9_ < /dev/urandom | head -c 8 | xargs



Hecha esa acotación, los comandos utilizados muestran mucha elegancia :). Y reitero lo de arriba: para usos cotidianos es seguro.
/dev/{ur,r}andom estan pensados para usarse, no como fuentes de numeros aleatorios (esta en mi comentario de mas arriba) sino para usarse como semilla de un generador de numeros aleatorios. Esto es asi porque no garantizan mas de 256 bits de aleatoreidad.
Dicho esto, lo mas seguro es usar las funciones de numeros aleatorios OpenSSL, por ejemplo, o usar rand(), que no es tan seguro, con una semilla leida de /dev/urandom.
/dev/random no deberia usarse salvo para gnenerar valores que deben ser verdaderamente aleatorios, como para generar claves, etcetera.
Para los numeros mas aleatorios, de
saludos
¿Podrías explicarme porqué?
¡Tienes un "sitio" de fabula!, felicidades....
Como dice Ricardo en el comentario de mas arriba:
"La diferencia entre urandom y random es que el primero no bloquea porque reutiliza las mismas fuentes de entropia."
Si te fijas, al hacer "cat /dev/random" no obtienes lo mismo que "cat /dev/urandom""