パスワードをクラックする

PythonによるZipファイルのクラックについてはすでに書いた。ここではZip暗号化よりずっと強いGnuPGの対称鍵暗号AES256で暗号化したファイルをクラックしてみる(GnuPGを使おう参照)。

パスワードのクラックといえば John the Ripper であろう。MacならHomebrewでもインストールできるが、ここではCentOSサーバで動かすため、上記サイトの Download the latest John the Ripper jumbo release と書いてあるところにある sources in tar.xz をいただいてくる。

tar xvJf john-1.9.0-jumbo-1.tar.xz
cd john-1.9.0-jumbo-1/src
./configure
make -s clean && make -sj4
make install

これでバイナリが john-1.9.0-jumbo-1/run に入る。まずはLinuxのパスワードをクラックしてみる:

cd ../run
sudo ./unshadow /etc/passwd /etc/shadow > passwdfile
./john --single passwdfile                # まずは単純な方法
./john --wordlist=password.lst passwdfile # 3546個のリストから探す
./john --incremental passwdfile           # しらみつぶし(途中で諦める)

もし見つかったら ./john --show passwdfile で結果が表示される。passwdfile は後で消しておくのを忘れないように。

いよいよGnuPGで暗号化したファイルをクラックしてみる。CentOSのGnuPGではなくMacに入れた最新のGnuPGを使う:

echo hogehoge > hoge.txt
gpg -c hoge.txt  # パスフレーズとして abc123 を使う

できた hoge.txt.gpg をCentOSサーバに送る。以下はCentOSでの実行:

./gpg2john hoge.txt.gpg > hash
./john --wordlist=password.lst hash

abc123password.lst の最初のほうにあるのですぐに見つかるが、それ以外の候補を探すために最後まで実行する。5分くらいかかった。1秒あたり10パスワードを試すくらいのスピードか。結局 abc123 しか見つからなかった。

./john --show hash

[2022-07-30追記] 再度同じ hoge.txt を、今度は password.lst の最後に近い notused というパスワードで暗号化し、time コマンドで実行時間を測定してみた。結果は

real	5m53.130s
user	20m8.057s
sys	0m0.313s

で、実時間5分53秒かかった(4スレッド)。毎秒10パスワードほどである。

同じことをWindows 11マシン(16G, SSD 256G, i7-7700HQ, GeForce GTX 1060)でやってみたら、8スレッド、35パスワード毎秒だった。