
비밀번호 추측을 위한 딥러닝 접근법 (https://arxiv.org/abs/1709.00440)
이 저장소는 PassGAN: A Deep Learning Approach for Password Guessing 논문의 코드를 포함하고 있습니다.
PassGAN의 모델은 Improved Training of Wasserstein GANs에서 가져왔으며, PassGAN 저자들이 그들의 작업에서 improved_wgan_training 텐서플로우 구현을 사용했다고 가정합니다. 이러한 이유로, 저는 이 저장소에서 해당 참조 구현을 수정하여 train.py 와 sample.py 를 통해 쉽게 훈련하고 샘플링할 수 있도록 만들었습니다. 이 저장소는 다음을 제공합니다:
# requires CUDA 8 to be pre-installed
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
큰 데이터셋(100MB 이상)에서 모델을 훈련하는 것은 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
자신의 비밀번호 유출 데이터나 데이터셋을 사용하여 훈련하는 것을 권장합니다. 이를 찾을 수 있는 좋은 장소는 다음과 같습니다:
아직 PassGAN 논문의 결과를 재현하려는 시도에 대한 철저한 분석을 수행하지 않았습니다. 그러나 사전 훈련된 rockyou 모델을 사용하여 10⁸개의 비밀번호 샘플을 생성한 결과, 80%/20% 훈련/테스트 분할을 사용하여 테스트 데이터에서 630,347개(23.97%)의 고유 비밀번호를 일치시킬 수 있었습니다.
일반적으로, 저는 PassGAN의 저자들이 ML 비밀번호 생성 분야의 이전 연구를 참조했지만 그 결과를 해당 연구와 비교하지 않은 것에 대해 다소 놀랍고(그리고 실망스럽습니다). PassGAN에 대한 초기 경험으로 볼 때, 이 모델은 해당 논문에서 언급된 RNN 및 Markov 기반 접근 방식보다 상당히 성능이 낮을 것이라고 믿게 되며, 저자들이 결과를 비교하지 않기로 선택한 이유가 이것 때문이 아니기를 바랍니다.
이 코드는 MIT 라이선스 하에 배포됩니다. 해당 조건에 따라 자유롭게 사용, 수정, 배포 또는 판매할 수 있습니다.
이 저장소의 코드에 대한 대부분의 공로는 improved_wgan_training 작업을 한 @igul222에게 있습니다. 저는 그의 코드를 약간 모듈화하고 명령줄 인터페이스를 추가했으며 PassGAN 논문에 맞게 특화시켰을 뿐입니다.
PassGAN의 연구 및 논문은 Briland Hitaj, Paolo Gasti, Giuseppe Ateniese, Fernando Perez-Cruz에 의해 발표되었습니다.