
Un Enfoque de Aprendizaje Profundo para la Adivinación de Contraseñas (https://arxiv.org/abs/1709.00440)
Este repositorio contiene el código del artículo PassGAN: A Deep Learning Approach for Password Guessing.
El modelo de PassGAN proviene de Improved Training of Wasserstein GANs y se asume que los autores de PassGAN utilizaron la implementación en tensorflow improved_wgan_training en su trabajo. Por esta razón, he modificado esa implementación de referencia en este repositorio para facilitar el entrenamiento (train.py) y el muestreo (sample.py). Este repositorio contribuye:
# requires CUDA 8 to be pre-installed
pip install -r requirements.txt
Usa el modelo preentrenado para generar 1 000 000 de contraseñas, guardándolas en gen_passwords.txt.
python sample.py \
--input-dir pretrained \
--checkpoint pretrained/checkpoints/195000.ckpt \
--output gen_passwords.txt \
--batch-size 1024 \
--num-samples 1000000
Entrenar un modelo en un conjunto de datos grande (100MB+) puede llevar varias horas en una GTX 1080.
# download the rockyou training data
# contains 80% of the full rockyou passwords (with repeats)
# that are 10 characters or less
curl -L -o data/train.txt https://github.com/brannondorsey/PassGAN/releases/download/data/rockyou-train.txt
# train for 200000 iterations, saving checkpoints every 5000
# uses the default hyperparameters from the paper
python train.py --output-dir output --training-data data/train.txt
Te animamos a entrenar usando tus propias filtraciones de contraseñas y conjuntos de datos. Algunos excelentes lugares para encontrarlos incluyen:
Todavía no he realizado un análisis exhaustivo de mi intento de reproducir los resultados del artículo de PassGAN. Sin embargo, usando el modelo preentrenado de rockyou para generar 10⁸ muestras de contraseñas, pude coincidir con 630 347 (23,97%) contraseñas únicas en los datos de prueba, utilizando una división 80%/20% entrenamiento/prueba.
En general, estoy algo sorprendido (y decepcionado) de que los autores de PassGAN hayan referenciado trabajos previos en el dominio de la generación de contraseñas con ML pero no hayan comparado sus resultados con esa investigación. Mi experiencia inicial con PassGAN me lleva a creer que su rendimiento sería significativamente inferior tanto a los enfoques basados en RNN como en Markov mencionados en ese artículo, y espero que no sea por esta razón que los autores hayan optado por no comparar resultados.
Este código se publica bajo una Licencia MIT. Eres libre de usarlo, modificarlo, distribuirlo o venderlo bajo esos términos.
La mayor parte del crédito por el código en este repositorio es para @igul222 por su trabajo en improved_wgan_training. Simplemente he modularizado un poco su código, añadido una interfaz de línea de comandos y lo he especializado para el artículo de PassGAN.
La investigación y artículo de PassGAN fue publicada por Briland Hitaj, Paolo Gasti, Giuseppe Ateniese, Fernando Perez-Cruz.