メインコンテンツまでスキップ

ファイルに設定されたパスワードが安全であるかを検証してみる

goe

今回私は解析用のPCをつくり、暗号化されたファイルがどの程度安全であるのかを検証した。

注意

この記事はパスワードの安全性と長さの関連を調査しています。 不正にパスワードを入手することは不正アクセス禁止法により禁止されています。

ハッシュ値とは

「ハッシュ関数」と呼ばれるものにデータをわたすとそのデータに応じた値を返します。その値がハッシュ値です。
データからハッシュ値を求めることは容易ですが、
ハッシュ値からデータを求めることは非常に困難です。 (不可逆的) このハッシュ値を利用することによってパスワードを安全に保管できます。

hashcatでハッシュ値解析をする

今回ハッシュ値解析にはhashcatを用いた。 hashcatはハッシュ値の解析にGPUを使用することができるため、高速にハッシュ値を解析できる。 検証に用いたPCの性能は以下である。

CPUGPUOS
intel Core i5-12400F Processor 18M Cache, up to 4.40GHzGeForce GTX 1650Ubuntu 20.04

また以下のハッシュ値解析を検証した。

ファイルの種類パスワードの長さmaskの有無
PDF(wordファイルをpdfにエクスポート)6桁数字4桁+小文字2文字
PDF(Texのオプションにパスワードを付けた)6桁無し
PDF(Texのオプションにパスワードを付けた)7桁無し
Word6桁無し

解析してみる

環境構築

まずhashcatを入れる。

sudo apt install hashcat

次にhashcatを動かすために対応するGPUのドライバを入れる。 https://www.nvidia.co.jp/Download/index.aspx?lang=jp

入れ終わったらちゃんと動くか確認...

hashcat -I

ちゃんとGPUが読み込まれていることが確認できた!

パスワード付きのファイルを用意

texで作ったファイルにパスワードを付ける

ターミナルで

$ dvipdfmx -S 暗号化するファイル.dvi

今回は読み込みパスワードだけをつけたいのでowner passwordは無しにした。

wordファイルにパスワードを付ける

「名前を付けて保存する」から「ツール」を選択し「全般オプション」にてパスワードを設定し、保存する。

パスワード付きのwordファイルをpdfに変換

ファイルからエクスポートを選択し「PDF/XPSドキュメントの作成」を選ぶ。

ハッシュ値を抽出する

今回はJohn the ripper を使った。
https://github.com/openwell/john
基本的にはdocの中にあるINSTALL-UBUNTUの指示通りにインストールしていく。
一応aptコマンドでインストール出来るがハッシュ値を抽出したい場合はgithubからのインストールを推奨。

pdfからハッシュ値を抽出

john/run/pdf2john.pl を実行する。

$ john/run/pdf2john.pl ハッシュ値を抽出したいpdfファイル > hash.txt

officeからハッシュ値を抽出

john/run/office2john.py を実行する。

$ john/run/office2john.py ハッシュ値を抽出したいofficeファイル > hash.txt

hashcatで解析する

詳しい使い方は

$ hashcat --help

を参照。

hash-typeを調べる

hashcatでハッシュ値解析をする場合事前にhash-typeを指定する必要がある。hash-typeがどれか分からないときは以下を実行するとhash-typeがわかる

$ hashcat hash.txt

今回はtexのハッシュタイプを調べた。
10400または10410であることが分かった。

解析開始

基本的にはブルートフォースアタックで解析していく。

$ hashcat -m 10400 -a 3 hash.txt ?d?d?d?d?l?l

今回はパスワードが数字4桁+小文字2文字であることが分かっていると想定してmask指定をして解析した。 2秒で終わっちゃった笑 パスワードが9732gfであることが分かった。

今度は同じパスワードをmask無しで解析してみた。 記録は...7秒!

John the ripper でハッシュ値解析

先ほどはGPUを並列処理にまわしたためすぐに解析出来ました。では今度はVirtual Boxを用いて意図的にスペックの低い環境でハッシュ値解析をしてみましょう。 性能はこんな感じ メモリは4GB,プロセッサーは2つ
環境構築は省略
さっそく解析してみた。 マスクありだと解析時間が短すぎて比較にならなかったのでマスクなしで解析した。 記録は...5分29秒!
まぁ現実的な数値ですね。 いかにこのパスワードが脆弱であるかが分かりましたね。

性能比較

1秒にチェックできるハッシュ値の数を比較してみましょう。 仮想環境では メイン環境では 大雑把に見積もっても約100倍のスピードでハッシュ値解析をしていることが分かった。
hashcat...恐るべし

まとめ

以下に各ファイル形式におけるパスワードの解析時間をまとめる。 なお以下で想定するパスワードは印字可能なアスキーコードであるとする。

ファイル形式hash-type桁数解析にかかる時間
PDF(tex)104005桁30秒
PDF(tex)104006桁2852秒
PDF(tex)104007桁75時間
PDF(tex)104008桁297日
PDF(office)105005桁1112秒
PDF(office)105006桁29時間
PDF(office)105007桁116日
PDF(office)105008桁30年
word96005桁18日
word96006桁4.8年

皆さんもこれを参考に安全なパスワードを設定しましょう。