
Une approche d'apprentissage profond pour la devinette de mots de passe (https://arxiv.org/abs/1709.00440)
Ce dépôt contient le code de l'article PassGAN: A Deep Learning Approach for Password Guessing.
Le modèle de PassGAN est tiré de Improved Training of Wasserstein GANs et il est supposé que les auteurs de PassGAN ont utilisé l'implémentation TensorFlow improved_wgan_training dans leurs travaux. Pour cette raison, j'ai modifié cette implémentation de référence dans ce dépôt pour faciliter l'entraînement (train.py) et l'échantillonnage (sample.py). Ce dépôt apporte :
# requires CUDA 8 to be pre-installed
pip install -r requirements.txt
Utilisez le modèle pré-entraîné pour générer 1 000 000 de mots de passe et les enregistrer dans gen_passwords.txt.
python sample.py \
--input-dir pretrained \
--checkpoint pretrained/checkpoints/195000.ckpt \
--output gen_passwords.txt \
--batch-size 1024 \
--num-samples 1000000
L'entraînement d'un modèle sur un grand ensemble de données (100 Mo+) peut prendre plusieurs heures sur une 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
Vous êtes encouragé à utiliser vos propres fuites de mots de passe et ensembles de données pour l'entraînement. Voici quelques excellents endroits pour en trouver :
Je n'ai pas encore effectué d'analyse exhaustive de ma tentative de reproduire les résultats de l'article PassGAN. Cependant, en utilisant le modèle rockyou pré-entraîné pour générer 10⁸ échantillons de mots de passe, j'ai pu faire correspondre 630 347 (23,97 %) mots de passe uniques dans les données de test, en utilisant une répartition 80 % / 20 % entre entraînement et test.
En général, je suis un peu surpris (et déçu) que les auteurs de PassGAN aient cité travaux antérieurs dans le domaine de la génération de mots de passe par apprentissage automatique, mais n'aient pas comparé leurs résultats à ces recherches. Mon expérience initiale avec PassGAN me porte à croire que ses performances seraient nettement inférieures à celles des approches RNN et basées sur les chaînes de Markov mentionnées dans cet article, et j'espère que ce n'est pas pour cette raison que les auteurs ont choisi de ne pas comparer les résultats.
Ce code est publié sous licence MIT. Vous êtes libre de l'utiliser, de le modifier, de le distribuer ou de le vendre selon ces conditions.
La majeure partie du crédit pour le code de ce dépôt revient à @igul222 pour son travail sur improved_wgan_training. J'ai simplement modularisé un peu son code, ajouté une interface en ligne de commande et spécialisé pour l'article PassGAN.
La recherche et l'article PassGAN ont été publiés par Briland Hitaj, Paolo Gasti, Giuseppe Ateniese, Fernando Perez-Cruz.