
Generador de conjeturas de contraseñas basado en Gramática Libre de Contexto Probabilística (PCFG)
PCFG = Probabilistic Context Free Grammar
PCFG = Pretty Cool Fuzzy Guesser
En resumen: Una colección de herramientas para investigar cómo los humanos generan contraseñas. Se pueden usar para descifrar hashes de contraseñas, pero también para crear contraseñas sintéticas (honeywords) o ayudar a desarrollar mejores algoritmos de fortaleza de contraseñas.
Trainer: 4.4
Guesser: 4.6
PRINCE_LING: 4.3
Password_Scorer: 4.4
Se utiliza Sphinx para crear dinámicamente una Guía para Desarrolladores basada en los docstrings del código. Para construir la Guía para Desarrolladores, consulte las instrucciones en /doc/INSTRUCTIONS.rst
También se puede encontrar una Guía para Desarrolladores preconstruida en PDF en /doc/build/latex/pcfgdevelopersguide.pdf. Nota: no voy a reconstruir esta guía entre versiones importantes para mantener el historial de git más limpio. Es decir, hacer commits de PDFs se vuelve muy desordenado muy rápido. Esto significa que la guía preconstruida puede estar ligeramente desactualizada, por lo que si la usas para ayudarte a escribir/modificar código, se recomienda construir la guía tú mismo en lugar de usar la preconstruida.
Este proyecto utiliza aprendizaje automático para identificar los hábitos de creación de contraseñas de los usuarios. Se genera un modelo PCFG entrenando con una lista de contraseñas de texto plano divulgadas/descifradas. En el contexto de este proyecto, el modelo se denomina conjunto de reglas y contiene muchas partes diferentes de las contraseñas identificadas durante el entrenamiento, junto con sus probabilidades asociadas. Esta derivación puede ser útil para otras herramientas de descifrado como PRINCE, y/o partes del conjunto de reglas pueden incorporarse directamente en ataques de diccionario más tradicionales. Este proyecto también incluye un generador de conjeturas PCFG que utiliza este conjunto de reglas para generar conjeturas de contraseñas en orden de probabilidad. Esto es mucho más potente que los ataques de diccionario estándar, y en las pruebas se ha demostrado que puede descifrar contraseñas en promedio con significativamente menos conjeturas que otros métodos disponibles públicamente. La desventaja es que generar conjeturas en orden de probabilidad es lento, lo que significa que crea en promedio entre 50 y 100 mil conjeturas por segundo, mientras que los algoritmos basados en GPU pueden crear millones y miles de millones (y más) de conjeturas por segundo contra algoritmos de hash rápidos. Por lo tanto, el adivinador PCFG es mejor usado contra grandes cantidades de hashes salados u otros algoritmos de hash lentos, donde el costo de rendimiento del algoritmo se compensa con la precisión de las conjeturas.
pip3 install chardetEl conjunto de reglas predeterminado incluido en este repositorio se creó entrenando con un subconjunto de 1 millón de contraseñas del conjunto de datos RockYou. Se puede lograr un mejor rendimiento entrenando con el conjunto completo de 32 millones de contraseñas de RockYou, pero se excluyó para mantener el tamaño de descarga pequeño. Puede usar el conjunto de reglas predeterminado para comenzar a generar contraseñas sin tener que entrenar con una nueva lista, pero se recomienda entrenar con un conjunto objetivo de contraseñas que pueda estar más cerca de lo que intenta atacar. Si crea su propio conjunto de reglas, aquí tiene una guía rápida:
python3 trainer.py -t INPUT_PASSWORD_LIST -r NEW_RULESETpython3 trainer.py -t INPUT_PASSWORD_LIST -r NEW_RULESET -c 0.6
b. --save_sensitive: Si se especifica, los datos sensibles como direcciones de correo electrónico y sitios web completos que se descubran durante el entrenamiento se guardarán en el conjunto de reglas. Aunque el generador de conjeturas PCFG actualmente no utiliza estos datos, son muy valiosos durante un ataque real de descifrado de contraseñas. Esta opción está desactivada por defecto para facilitar el uso de esta herramienta en un entorno académico. Tenga en cuenta que, incluso cuando está desactivada, casi con seguridad seguirá habiendo datos de PII guardados dentro de un conjunto de reglas, así que proteja adecuadamente los conjuntos de reglas generados. Ejemplo: python3 trainer.py -t INPUT_PASSWORD_LIST -r NEW_RULESET --save_sensitive
c. --comments: Agrega un comentario al archivo de configuración de su conjunto de reglas. Esto es útil para saber por qué y cómo generó su conjunto de reglas cuando lo revise más tarde. Incluya el comentario que desee agregar entre comillas.Esto genera conjeturas en stdout usando un conjunto de reglas PCFG previamente entrenado. Estas conjeturas se pueden redirigir a cualquier programa que desee utilizarlas. Si no se especifica ningún conjunto de reglas, se usará el conjunto de reglas predeterminado DEFAULT. Para los fines de esta guía, se asumirá que el conjunto de reglas utilizado es NEW_RULESET.