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
abc123
は password.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パスワード毎秒だった。