
Uma Abordagem de Aprendizado Profundo para Adivinhação de Senhas (https://arxiv.org/abs/1709.00440)
Este repositório contém código para o artigo PassGAN: Uma Abordagem de Deep Learning para Adivinhação de Senhas.
O modelo do PassGAN é retirado do Improved Training of Wasserstein GANs e assume-se que os autores do PassGAN usaram a implementação TensorFlow improved_wgan_training em seu trabalho. Por esse motivo, modifiquei essa implementação de referência neste repositório para facilitar o treinamento (train.py) e a amostragem (sample.py). Este repositório contribui com:
# requires CUDA 8 to be pre-installed
pip install -r requirements.txt
Use o modelo pré-treinado para gerar 1.000.000 de senhas, salvando-as em gen_passwords.txt.
python sample.py \
--input-dir pretrained \
--checkpoint pretrained/checkpoints/195000.ckpt \
--output gen_passwords.txt \
--batch-size 1024 \
--num-samples 1000000
Treinar um modelo em um conjunto de dados grande (100MB+) pode levar várias horas em uma 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
Você é encorajado a treinar usando seus próprios vazamentos de senhas e conjuntos de dados. Alguns ótimos lugares para encontrá-los incluem:
Ainda não fiz uma análise exaustiva da minha tentativa de reproduzir os resultados do artigo PassGAN. No entanto, usando o modelo rockyou pré-treinado para gerar 10⁸ amostras de senhas, consegui corresponder a 630.347 (23,97%) senhas únicas nos dados de teste, usando uma divisão 80%/20% treino/teste.
Em geral, estou um tanto surpreso (e decepcionado) que os autores do PassGAN tenham referenciado trabalhos anteriores no domínio de geração de senhas com ML, mas não tenham comparado seus resultados com essa pesquisa. Minha experiência inicial com o PassGAN me leva a acreditar que ele teria um desempenho significativamente inferior às abordagens baseadas em RNN e Markov mencionadas nesse artigo, e espero que não seja por esse motivo que os autores optaram por não comparar os resultados.
Este código é lançado sob uma Licença MIT. Você é livre para usar, modificar, distribuir ou vendê-lo sob esses termos.
A maior parte do crédito pelo código neste repositório vai para @igul222 por seu trabalho no improved_wgan_training. Simplesmente modularizei seu código um pouco, adicionei uma interface de linha de comando e especializei para o artigo PassGAN.
A pesquisa e artigo do PassGAN foi publicada por Briland Hitaj, Paolo Gasti, Giuseppe Ateniese, Fernando Perez-Cruz.