John the ripperによるZIPパスワード解析

セキュリティ

 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で暗号化しておけば解析されることはなさそうです。