Contraseñas pronunciables

Hace un tiempo leí en el blog El Ornitorrinco Enmascarado el artículo contraseñas pronunciables y como no, me piqué para implementar este sistema en PHP pues como todo buen ciudadano y cumplidor de la LOPD si tengo un sistema de usuarios deben tener contraseñas seguras y encriptadas. Pues muy bien, manos a la obra.

Anoche en casa me estaba rompiendo la cabeza y me acosté un poco tarde para implementar todo esto y recabar todos los datos posibles de los cuales daré una breve sinopsis aquí pues el algoritmo fuente, los archivos de texto, el diccionario así como el Excel de estadísticas lo subiré luego a mi carpeta de dropbox para que lo podáis tener y mejorar.

Los resultados fueron bastante prometedores, utilicé para la generación de las claves un fichero con 257 palabras, tal vez podían ser más pero me pareció bastante completo. Luego para la medición de las estadísticas utilicé un archivo de palabras del castellano con 86017 palabras. ¿Por qué no utilicé este para generar las claves? Sencillamente por rendimiento, si para procesar y almacenar los datos de las probabilidades en el de 257 palabras tardó el servidor menos de 1 segundo mientras que sólo leer y sacar las palabras del diccionario tardo 50 segundos de media, os podéis imaginar si utilizo este para generar las claves. ¡Me muero de viejo! Además el diccionario tiene muchas palabras que realmente no se utilizan en la actualidad y que no me interesaba incluir, prefiero un archivo pequeño pero con un lenguaje coloquial.

El fin realicé varias pruebas para generar 1000, 5000, 10000, 20000 y 50000 claves de un golpe de 8 y 10 caracteres de longitud y comprobar cuantas se creaban repetidas y cuantas eran palabras reales, por eso de la fuerza bruta, por si acaso, y los resultados fueron muy buenos.

Para claves de 8 caracteres 1 de cada 298 generadas era una palabra real (0.3438 % del total en cada muestra) y la probabilidad de que se repitiera una clave, real o no, era de 1 cada 8 generadas. Entre las palabras reales que más se repetían estaban colación (24 veces), coladera (15) y llantera (13).

Para claves de 10 caracteres los resultados mejoraron muchísimo pues solo 1 de cada 8311 generadas era una palabra real (0.011 % del total en cada muestra) y la probabilidad de que se repitiera una clave, real o no, era de 1 cada 185 generadas. Entre las palabras reales que más se repetían estaban prelaticio (3 veces), insolación (3) y convención (3).

Nota: Estas repeticiones están basadas en todas las pruebas o sea que colación se ha repetido 24 veces en 86 000 repeticiones del código.

El algoritmo lo explicaré en el siguiente post Algoritmo para crear contraseñas pronunciables.

Comentarios