ZIPファイルのパスワードを忘れてしまったので、Johnさんにお願いしてパスワードを教えてもらいました。このついでに実験を行いました。
あくまでもペネトレーションテストや自己分析を目的として使用し、悪用してはいけません。
大事なことなのでもう一度書きますが、悪用してはいけません。
環境
OS windows 11 HOME
CPU Intel Corei7 6700T(速度の参考に)
Memory 16GB
準備と実行方法
ZIPファイルのパスワード解析には様々なソフトがありますが、人気があるのはOpenwellが公開している「John the ripper」です。
対象となるZIPファイルのハッシュ値を作成し、このハッシュ値を探索する方法を使っているので、低スペックパソコンでも動作が軽いのが特徴です。
①ダウンロード(John the ripper)https://www.openwall.com/john/
R5.12.4時点の最新バージョンはは 1.9.0-jumbo-1 となっていました
Linux,MacOS,windows用のディストリビュージョンがオープンソースで公開されています
②実行ファイルの解凍と配置
ダウンロードしたファイルは解凍し、適当なフォルダに配置してください。
ダウンロードファイルを展開した様子
③コマンドプロンプトを開く
「run」フォルダを開き、アドレスバーに、「cmd」と入力してエンターキーを押すとコマンドプロンプトが開きます。
「run」フォルダを開いてアドレスバーを選択した様子
④対象となるZIPファイルのハッシュ値を算出し、テキストファイルとして保存
コマンドプロンプト上で、対象となるZIPファイルのハッシュ値をテキスト出力します。
$ > zip2john ZIPファイル名.zip > hash.txt
hash値をテキスト出力する様子
⑤ハッシュファイルに対するパスワード解析
次のコマンドでハッシュファイル値からパスワードを解析します。
$ > john hash.txt
解析されたパスワードが表示された様子
ちなみに4桁で数字だけのパスワードだと、一瞬でパスワードが表示され、1~2秒といった体感です。
実験1 パスワードの桁数による解析時間
ZIPファイル作成ソフト 7zip を使用し、約300kbのJPGファイルを圧縮しました。
圧縮方法 Deflate 暗号化方式 ZipCrypt
を使用しています。
①数字5桁 パスワード「11111」の解析
一瞬でした
②数字6桁 パスワード「111111」の解析
一瞬でした
③数字7桁 パスワード「1111111」の解析
20秒
④英数字4桁 パスワード「ax7f」の解析
35秒
④英数字5桁 パスワード「ax7ff」の解析
47秒
⑤英数字6桁 パスワード「ax7ffc」の解析
1分45秒
⑥英数字6桁 パスワード「f56b0q」の解析
56分 ※他の作業と並行して解析を行っていたので、必要以上に時間を要しているかもしれません。
ハイスペックではないパソコンで処理をしても、6桁程度のパスワードなら解析が可能でした。
最近のPCを使えば、さらに高速に処理できると思いますので、最低でも8桁以上のパスワードを指定するのが重要だと感じました。
実験2 対応している暗号化の種類
John the ripper がどのような暗号化に対応しているのか検証しました。
圧縮方法を変えて、パスワードの解析が可能か実験します。
先ほどと同じ300kb程度の画像を、パスワード 「1234」で圧縮し、John the ripper によるパスワード解析を行います。
①圧縮方法 BZIP2 暗号化方式 ZipCrypt
×暗号化されていないか対応していない
⑤圧縮方法 BZIP2 暗号化方式 AES-256
×暗号化されていないか対応していない
②圧縮方法 LZMA 暗号化方法 ZipCrypt
〇パスワード解析可能
②圧縮方法 LZMA 暗号化方法 AES-256
×暗号化されていないか対応していない
③圧縮方法 PPMd 暗号化方法 ZipCrypt
〇パスワード解析可能
③圧縮方法 PPMd 暗号化方法 AES-256
×暗号化されていないか対応していない
④圧縮方法 Deflate 暗号化方法 ZipCrypt
×暗号化されていないか対応していない
④圧縮方法 Deflate 暗号化方法 AES-256
×暗号化されていないか対応していない
対応していない圧縮方法、暗号化方法の方が多いことがわかり少し安心できました。
最後に
ZIPファイルのパスワード解析を行った結果
パスワードは8桁以上を強く推奨
AES256による暗号化をしておけば複合されない(されにくい)
とわかりました。
PPAP(パスワード付きファイルを送信、パスワードを送信、暗号化、プロトコル)を使うことがあるので、ZIPファイルの暗号化方式まで気にしないといけないと感じました。
今回実験したプログラムは、圧縮方法がBZIP2、Deflateに対応していなかったのですが、単にプログラムが対応していないというだけで、アルゴリズム自体は仕様書さえあれば突破されると思います。
暗号化方法のAES 256については、現在もアメリカ政府やNISTが公認する暗号方式の一つであり、現実的に復号することが不可能な暗号ですので、今のところはAES256で暗号化しておけば解析されることはなさそうです。