いやー、かなりの期間(約9年半)さぼってました。
何となく仕事の関係で、調べた事を残しておきたくて書いてます。

さて何の件かというと、パスワードのクラックにかかる時間です。
仕事の関係でパスワードクラックってどれくらい時間がかかるものなのか調べていたら
IPAさんが掲載していた2008年のレポート(https://www.ipa.go.jp/security/txt/2008/10outline.html)が見つかりました。
でも、このレポートは10年前のもので、H/Wの性能は高くなっているはずだと他を当たってみたのですが、
出てくるのは、かなり高性能なマシンでのレポートだったことから現実的じゃなかったので、
最終的に自分でプログラムを作成する事にしました。
取り敢えず手元の環境で作ろうと調べていて、NTLMハッシュだと、HDDからツールでPWファイルを引っ張ってきて
そのデータと比較してブルートフォースアタックでクラックできそうなので、その方法を再現するように
C#を使ってプログラミングしました。

時間計測の方法としては、NTLMハッシュ(MD4のハッシュ)のクラックを想定し、IPAさんの結果と比べられるように、
同種の文字種と桁数から発生する可能性のあるハッシュ値ブルートフォースで全件チェックするロジックです。

実際にしたことは、例えば4桁の英小文字であれば、"aaaa"から"aaab"、"aaac"から"zzzz"まで
の456,976種のハッシュ値を生成し、ランダムに発生させた5桁MD4のハッシュ値(基本的には一致
しないはずのハッシュ値)と比較するのにかかった時間を計測しました。

環境は、
 CPU:Intel® Core™ i7-3770 @ 3.4GHz (4Core, 8Thread) / Mem: 12GByte
 使用OS:Windows 7 Professional SP1 64bit
と言った感じです。

結果は、

文字種4桁6桁8桁10桁
英小文字:26種1秒未満約40秒約8時間約227日
英小文字+数字:36種1秒未満約5分約4.5日約16年
英大小文字+数字:62種約2秒約2時間約315日約3,317年
英大小文字+数字+記号:93種約10秒約22時間約22年約18.6万年
(文字色がオレンジの時間は、2日間実行した時間と進んだチェック回数から想定した時間)
と言った感じです。

なんだかぱっとしなかったので、再度ネットを検索して回ることに、
そこで見つかったのが、"GPUを使ったハックツールだと速い"というのがあったので、早速試してみる事に・・・。
今回は、hashcatの64bit版(http://hashcat.net/からダウンロード)を使いました。
(さすがにGPUのプログラミングまでは手が出なかった。)
とは言っても、はじめの環境には使えるGPUを積んだカードがなかったため、
 GPU: NVIDIA® GeForce® GTX750 (CUDA Core 512)
を中古(\8,000-)で購入し、前述の環境へセッティング

結果は、

文字種6桁8桁9桁10桁
英小文字:26種数秒約50秒約20分約9時間
英小文字+数字:36種数秒約11分約6.5時間約10日
英大小文字+数字:62種約18秒約14時間約11日約6年
英大小文字+数字+記号:95種約3分約18日約5年約430年
(文字色がオレンジの時間は、2日間実行した時間と進んだチェック回数から想定した時間)
と言った感じです。

GTX750は最新のグラボではないけど、一般的に言われている8桁の英文字(大小)と数字のパスワードだと、
約14時間で解析できてしまうというのはいかがなものかと・・・。

今回のクラックではNTLMのMD4ハッシュだったので、ノートPCなどパスワードが入っているドライブを
盗まれなければ大丈夫かもしれないけど、今後はもう少し長めのパスワードにしないと危ないって事が分かった。