Zipファイルのクラック

メールでZipファイルを送って次のメールでパスワードを送るという無意味より悪いセキュリティ対策が問題になっている。なぜ無意味より悪いかというと,Zip暗号化は強度が十分でない上に,次のメールで送るパスワードは無意味で,さらにゲートウェイでのウイルス対策ができなくなるのでウイルス送付に利用されやすいためである。

PythonでZipファイルを展開する方法は文字コードのところに書いたが,同様にしてパスワードをブルートフォースで破ることも原理的には可能である。4桁数字のパスワードで暗号化した test.zip をクラックするには次のようにすればよいであろう:

原理を説明するためのコードなのでわざと4桁数字に限定している。

from zipfile import ZipFile

with ZipFile('test.zip') as z:
    for i in range(10000):
        pw = f'{i:04d}'
        try:
            z.setpassword(pw.encode('utf-8'))
            if z.testzip() == None:
                print(pw)
                break
        except:
            pass

試しに「ほげほげふがふが」とだけ書いたテキストファイルを 9999 というパスワードで Zip 化し,iPython の %%timeit で実行時間を測ったところ,Mac mini (2018) 3.6 GHz Core i3 では 534 ms,M1 MacBook Air で Rosetta 環境では 319 ms,ネイティブでは 191 ms でクラック成功した。

本当にパスワードをクラックしたいなら,より高速かつ便利な専用のツールがいろいろ出回っているので,ネットで検索されたい。

一般的な暗号の解読時間については例えば dit の セキュリティ調査レポートVol.3(2012年)に実測値が載っている。例えば英大小数字(62通り)×8文字では通常のZip暗号化は13.5時間で解読できるとのことである。同じZipでも拡張仕様の256ビットAESならずっと時間がかかるが,Windowsの機能だけでは復号できないのであまり使われていない。Microsoft Officeファイル(*.docx,*.xlsx など)の暗号化は,さらに強い。

GPUでZIPパスワードを解析するも参考になる。


Last modified: