
Un approccio di Deep Learning per la stima delle password (https://arxiv.org/abs/1709.00440)
Questo repository contiene il codice per l'articolo PassGAN: A Deep Learning Approach for Password Guessing.
Il modello di PassGAN è tratto dall'articolo Improved Training of Wasserstein GANs e si presume che gli autori di PassGAN abbiano utilizzato l'implementazione TensorFlow di improved_wgan_training nel loro lavoro. Per questo motivo, ho modificato quell'implementazione di riferimento in questo repository per renderla facile da addestrare (train.py) e da campionare (sample.py). Questo repository contribuisce con:
# requires CUDA 8 to be pre-installed
pip install -r requirements.txt
Usa il modello pre-addestrato per generare 1.000.000 di password, salvandole in gen_passwords.txt.
python sample.py \
--input-dir pretrained \
--checkpoint pretrained/checkpoints/195000.ckpt \
--output gen_passwords.txt \
--batch-size 1024 \
--num-samples 1000000
Addestrare un modello su un dataset di grandi dimensioni (100MB+) può richiedere diverse ore su 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
Sei incoraggiato ad addestrare utilizzando le tue fughe di password e dataset. Alcuni ottimi posti per trovarli includono:
Non ho ancora effettuato un'analisi esaustiva del mio tentativo di riprodurre i risultati dell'articolo PassGAN. Tuttavia, utilizzando il modello RockYou pre-addestrato per generare 10⁸ campioni di password, sono riuscito a corrispondere 630,347 (23.97%) password uniche nei dati di test, utilizzando una suddivisione 80%/20% training/test.
In generale, sono un po' sorpreso (e deluso) che gli autori di PassGAN abbiano citato lavori precedenti nel dominio della generazione di password tramite ML ma non abbiano confrontato i loro risultati con quella ricerca. La mia esperienza iniziale con PassGAN mi porta a credere che potrebbe essere significativamente inferiore sia agli approcci basati su RNN che a quelli basati su Markov menzionati in quell'articolo, e spero che non sia per questo motivo che gli autori abbiano scelto di non confrontare i risultati.
Questo codice è rilasciato sotto una Licenza MIT. Sei libero di utilizzarlo, modificarlo, distribuirlo o venderlo secondo i termini di tale licenza.
La maggior parte del merito per il codice in questo repository va a @igul222 per il suo lavoro su improved_wgan_training. Ho semplicemente modularizzato un po' il suo codice, aggiunto un'interfaccia a riga di comando e specializzato per l'articolo PassGAN.
La ricerca e l'articolo di PassGAN sono stati pubblicati da Briland Hitaj, Paolo Gasti, Giuseppe Ateniese, Fernando Perez-Cruz.