Vamos a hacer uso de tres comandos: dd, bzip2 y base64, usando el generador de números aleatorios. Si sólo queremos generar una contraseña, podemos usar como generador
/dev/random. Pero éste se agota si se automatiza la generación, dado que emplea diversas fuentes de entropía (para alimentar esas fuentes basta con mover el ratón). En cambio, /dev/urandom usa un generador independiente de las fuentes, mediante algoritmos. Aunque nunca se bloquea, es que es menos aleatorio.Lo anterior lo pasamos por
dd. A dd le especificamos como archivo de entrada (if=) /dev/random (o /dev/urandom), y no le especificamos salida, para que lo ponga listo para redirigir. Finalmente, le decimos que pase un tamaño (bs=) de 8 bytes, y que cuente este tamaño (count=) una vez. El comando resultante:dd if=/dev/random bs=8 count=1Por comodidad, redirigiremos la información de depuración (que sale por
stderr) añadiremos 2>/dev/null, para redirigirla al agujero negro:dd if=/dev/random bs=8 count=1 2>/dev/nullDespués, usamos el algoritmo de compresión bzip2. Se podría usar gzip, pero los últimos bytes siempre son iguales tras pasarle base64. Los algoritmos de compresión se usan para reducir datos, pero en este caso vamos a ampliarlos, para pasarles otro filtro de entropía, más que nada, o si queremos un código más grande sin tener que forzar el generador. Sólo le pasaremos la opción
-c, para que vuelva a pasar el archivo resultante a la salida estándar. Detectará automáticamente que el archivo de entrada viene de la redirección anterior.dd if=/dev/random bs=8 count=1 2>/dev/null|bzip2 -cDespués, nos queda hacerlo imprimible (si hacéis tantos experimentos como yo sabréis lo que pasa al intentar pasar caracteres no imprimibles). Para ello usaremos
base64, que nos devolverá un código formado por números, letras mayúsculas y minúsculas y caracteres no alfanuméricos (+ y /). Ya tenemos el comando generador:dd if=/dev/random bs=8 count=1 2>/dev/null|bzip2 -c|base64Opcionalmente, añadimos
|tail -c 11 para sacar 10 caracteres (el salto de línea cuenta). Un par de resultados que esta orden ha dado en mi ordenador:hIUteJHYA=
CQ6OUgkQ==
Mezclando
tail -c numero y head -c numero podemos conseguir código más centrado, que es más aleatorio.


0 comentarios:
Publicar un comentario en la entrada
Nota: solo los miembros de este blog pueden publicar comentarios.