今回私は解析用のPCをつくり、暗号化されたファイルがどの程度安全であるのかを検証した。
この記事はパスワードの安全性と長さの関連を調査しています。
不正にパスワードを入手することは不正アクセス禁止法により禁止されています。
「ハッシュ関数」と呼ばれるものにデータをわたすとそのデータに応じた値を返します。その値がハッシュ値です。
データからハッシュ値を求めることは容易ですが、
ハッシュ値からデータを求めることは非常に困難です。 (不可逆的)
このハッシュ値を利用することによってパスワードを安全に保管できます。
今回ハッシュ値解析にはhashcatを用いた。 hashcatはハッシュ値の解析にGPUを使用することができるため、高速にハッシュ値を解析できる。
検証に用いたPCの性能は以下である。
CPU | GPU | OS |
---|---|---|
intel Core i5-12400F Processor 18M Cache, up to 4.40GHz | GeForce GTX 1650 | Ubuntu 20.04 |
また以下のハッシュ値解析を検証した。
ファイルの種類 | パスワードの長さ | maskの有無 |
---|---|---|
PDF(wordファイルをpdfにエクスポート) | 6桁 | 数字4桁+小文字2文字 |
PDF(Texのオプションにパスワードを付けた) | 6桁 | 無し |
PDF(Texのオプションにパスワードを付けた) | 7桁 | 無し |
Word | 6桁 | 無し |
まずhashcatを入れる。
sudo apt install hashcat
次にhashcatを動かすために対応するGPUのドライバを入れる。
https://www.nvidia.co.jp/Download/index.aspx?lang=jp
入れ終わったらちゃんと動くか確認...
hashcat -I
ちゃんとGPUが読み込まれていることが確認できた!
ターミナルで
$ dvipdfmx -S 暗号化するファイル.dvi
今回は読み込みパスワードだけをつけたいのでowner passwordは無しにした。
「名前を付けて保存する」から「ツール」を選択し「全般オプション」にてパスワードを設定し、保存する。
ファイルからエクスポートを選択し「PDF/XPSドキュメントの作成」を選ぶ。
今回はJohn the ripper を使った。
https://github.com/openwell/john
基本的にはdocの中にあるINSTALL-UBUNTUの指示通りにインストールしていく。
一応aptコマンドでインストール出来るがハッシュ値を抽出したい場合はgithubからのインストールを推奨。
john/run/pdf2john.pl を実行する。
$ john/run/pdf2john.pl ハッシュ値を抽出したいpdfファイル > hash.txt
john/run/office2john.py を実行する。
$ john/run/office2john.py ハッシュ値を抽出したいofficeファイル > hash.txt
詳しい使い方は
$ hashcat --help
を参照。
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秒!
先ほどはGPUを並列処理にまわしたためすぐに解析出来ました。では今度はVirtual Boxを用いて意図的にスペックの低い環境でハッシュ値解析をしてみましょう。
性能はこんな感じ
メモリは4GB,プロセッサーは2つ
環境構築は省略
さっそく解析してみた。
マスクありだと解析時間が短すぎて比較にならなかったのでマスクなしで解析した。 記録は...5分29秒!
まぁ現実的な数値ですね。
いかにこのパスワードが脆弱であるかが分かりましたね。
1秒にチェックできるハッシュ値の数を比較してみましょう。
仮想環境では
メイン環境では
大雑把に見積もっても約100倍のスピードでハッシュ値解析をしていることが分かった。
hashcat...恐るべし
以下に各ファイル形式におけるパスワードの解析時間をまとめる。
なお以下で想定するパスワードは印字可能なアスキーコードであるとする。
ファイル形式 | hash-type | 桁数 | 解析にかかる時間 |
---|---|---|---|
PDF(tex) | 10400 | 5桁 | 30秒 |
PDF(tex) | 10400 | 6桁 | 2852秒 |
PDF(tex) | 10400 | 7桁 | 75時間 |
PDF(tex) | 10400 | 8桁 | 297日 |
PDF(office) | 10500 | 5桁 | 1112秒 |
PDF(office) | 10500 | 6桁 | 29時間 |
PDF(office) | 10500 | 7桁 | 116日 |
PDF(office) | 10500 | 8桁 | 30年 |
word | 9600 | 5桁 | 18日 |
word | 9600 | 6桁 | 4.8年 |
皆さんもこれを参考に安全なパスワードを設定しましょう。