Generador Cuántico de Contraseñas


A quién le gustan los números aleatorios?

A mí me gustan los números aleatorios! Quizás sea por esa faceta mía de económetra o simplemente por frikismo pero siempre me han interesado los números aleatorios y las formas de calcularlos.

En este sentido, soy un gran fan de Theodore Ts'o, mantenedor del random.c de Linux, un módulo que permite producir números aleatorios a partir de la entropía que generan los periféricos del ordenador, principalmente del HDD, ratón y teclado. Por otra parte, el random.c de Minix 3 se encuentra entre mis códigos favoritos, tanto por su funcionalidad como por la manera en la que está diseñado y documentado, siguiendo todas las últimas tendencias en este área y reflejando a la perfección el estado del arte de los RNGs.

Además de la evidente finalidad lúdica de los números aleatorios, su utilidad en la informática es vital y sobre ellos se asientan las bases de la criptografía. La generación de números aleatorios es fundamental para la computación de claves para SSH, openSSL, etc. y sin embargo no se pueden generar números verdaderamente aleatorios mediante algoritmos. Por eso, es de vital importancia la forma en la que se producen. 

Pero el motivo de este post va más allá de comentar por encima estas anécdotas informáticas. El verdadero propósito es hablar de QEY, un script ultraminimalista que he programado en un rato libre. La función de QEY es generar contraseñas alfanuméricas aleatorias y para ello no utiliza un algoritmo pseudoaleatorio ni /dev/random, ese pool de entropía generado por random.c. He querido ir más allá y he decidido recurrir a la fuente de aleatoriedad más pura que he encontrado. El RNG cuántico de la Australian National University que utiliza como fuente de entropía las diferencias energéticas, que surgen al bifurcar un rayo láser.

No hay ninguna necesidad de este despliegue de medios, pero siempre he sido bastante exagerado en este tema y ha sido muy fácil de programar. Mucha gente recurre habitualmente a random.org porque también utiliza la indeterminación cuántica como fuente de entropía pero su API es un coñazo y su ancho de banda es menor que el de la ANU.

La instalación es tan sencilla como ejecutar en un terminal los comandos
git clone https://github.com/edkalrio/qey.git
cp ~/qey/qey.sh /usr/bin/qey
sudo chmod +x /usr/bin/qey
Esto último lleva el ejecutable a una carpeta vinculada a $PATH para que no haya que dirigirse a la dirección cada vez que queramos ejecutarlo. Sólo hay que teclear
qey
La longitud predeterminada es de 12 caracteres, porque es la recomendada por los expertos en criptografía pero en el caso de querer una contraseña de otra extensión, es tan sencillo como especificarlo como un argumento al comando. Por ejemplo, Para una WPA2 de 64 caracteres habría que ejecutar
qey 64
El límite máximo (aunque no suele alcanzar ese valor) es 1024 caracteres! Lo mejor de este script es que se puede pipear para enlazarlo con otros programas. Las posibilidades son ilimitadas.