
Подход глубокого обучения для подбора паролей (https://arxiv.org/abs/1709.00440)
Этот репозиторий содержит код для статьи PassGAN: A Deep Learning Approach for Password Guessing.
Модель из PassGAN взята из статьи Improved Training of Wasserstein GANs, и предполагается, что авторы PassGAN использовали реализацию improved_wgan_training на TensorFlow в своей работе. По этой причине я модифицировал эту эталонную реализацию в данном репозитории, чтобы упростить обучение (train.py) и семплирование (sample.py). Этот репозиторий предоставляет:
# требуется предустановленная CUDA 8
pip install -r requirements.txt
Используйте предобученную модель для генерации 1 000 000 паролей, сохраняя их в gen_passwords.txt.
python sample.py \
--input-dir pretrained \
--checkpoint pretrained/checkpoints/195000.ckpt \
--output gen_passwords.txt \
--batch-size 1024 \
--num-samples 1000000
Обучение модели на большом датасете (100 МБ+) может занять несколько часов на GTX 1080.
# загрузить обучающие данные rockyou
# содержат 80% полного набора паролей rockyou (с повторениями)
# длиной 10 символов или менее
curl -L -o data/train.txt https://github.com/brannondorsey/PassGAN/releases/download/data/rockyou-train.txt
# обучение на 200000 итераций, сохранение контрольных точек каждые 5000
# используются гиперпараметры по умолчанию из статьи
python train.py --output-dir output --training-data data/train.txt
Рекомендуется обучать на собственных утечках паролей и датасетах. Вот несколько отличных источников:
Я ещё не проводил исчерпывающего анализа своей попытки воспроизвести результаты из статьи PassGAN. Однако, используя предобученную модель rockyou для генерации 10⁸ образцов паролей, мне удалось сопоставить 630 347 (23,97%) уникальных паролей в тестовых данных при разбиении 80%/20% на обучение/тест.
В целом, я несколько удивлён (и разочарован), что авторы PassGAN сослались на предыдущую работу в области машинного обучения генерации паролей, но не сравнили свои результаты с этим исследованием. Мой первоначальный опыт работы с PassGAN позволяет предположить, что он значительно уступает как RNN-, так и марковским подходам, упомянутым в той статье, и я надеюсь, что авторы не по этой причине решили не проводить сравнение результатов.
Этот код опубликован под лицензией MIT. Вы можете свободно использовать, модифицировать, распространять или продавать его на этих условиях.
Основная заслуга за код в этом репозитории принадлежит @igul222 за его работу над improved_wgan_training. Я лишь немного модуляризовал его код, добавил интерфейс командной строки и адаптировал его для статьи PassGAN.
Исследование и статья PassGAN были опубликованы Бриландом Хитаем, Паоло Гасти, Джузеппе Атенизе и Фернандо Перес-Крусом.