
このリポジトリには、論文『PassGAN: 深層学習によるパスワード推測手法』のコードが含まれています。
PassGANのモデルは『Improved Training of Wasserstein GANs』から引用されており、PassGANの著者らはその研究でimproved_wgan_trainingのTensorFlow実装を使用したものと推測されます。このため、このリポジトリではその参照実装を修正し、トレーニング(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⁸個のパスワードサンプルを生成したところ、テストデータ内の一意のパスワードのうち630,347件(23.97%)を一致させることができました(80%/20%のトレーニング/テスト分割を使用)。
全般的に、PassGANの著者らがMLパスワード生成分野の先行研究を参照しながらも、その研究結果との比較を行わなかったことには、やや驚き(そして失望)しています。PassGANの初期の経験から、このモデルはその論文で言及されているRNNおよびマルコフベースのアプローチの両方に大きく劣るだろうと考えており、著者らが比較結果を提示しないことを選んだのはそのためではないことを願っています。
このコードはMITライセンスの下で公開されています。これらの条項に基づき、自由に使用、修正、配布、販売することができます。
このリポジトリのコードの功績の大部分は、improved_wgan_trainingに取り組んだ@igul222にあります。私は彼のコードを少しモジュール化し、コマンドラインインターフェースを追加し、PassGAN論文用に特化させたにすぎません。
PassGANの研究および論文は、Briland Hitaj、Paolo Gasti、Giuseppe Ateniese、Fernando Perez-Cruzによって発表されました。