株式会社ディアイティはサイバーセキュリティとネットワークの企業
セキュリティレポート

第3回:そのパスワードで大丈夫? ~ GPGPUによる高速パスワード解析
ハッシュ化されたパスワードの解析速度2014.10.29

最終回は、ハッシュ化されたパスワード解析の検証結果を紹介したいと思います。前々回記載した通り、使用したツール名等は公表しませんが市販されているツールを利用しています。検証はブルートフォース攻撃を想定したものであり、他の攻撃手法に関する検証は行っていません。

検証結果の表について

  • ブルートフォースで全パターンを解析するのにかかる時間を記載しています。
  • 解析時間が1ヶ月未満のものを赤色にしています。
  • 解析時間が1ヶ月以上1年未満のものを黄色にしています。

ハッシュとは?

ハッシュまたはハッシュ値とは、あるデータを一方向性関数を利用して計算した値のことです。一方向性というのは、計算後の値を元に戻すのが一般的に困難であることです。

ハッシュには、様々なアルゴリズムが存在しています。代表的なものとしては、アメリカ国立標準技術研究所(NIST)によって標準化されているSHA-2、SHA-1やマサチューセッツ工科大学教授ロナルド・リベスト氏によって開発されたMD5、MD4等が挙げられます。

ハッシュは、改ざん検知、データ検索、認証、電子証明書等様々な場面で利用されています。特に、認証、証明書等セキュリティに関わる部分では、選択すべきアルゴリズムを間違えると不正アクセスやなりすまし等の被害を受ける一因となる可能性もあります。CRIPTOREC(Cryptography Research and Evaluation Committees)では、電子政府推奨暗号リストとしてSHA-2のSHA-256、SHA-384、SHA-512を挙げています。その他全世界的に、SHA-1からSHA-2へ移行が推奨されています。

ハッシュを利用した認証

認証では、下記の図のようなイメージでハッシュが利用されています。まず、登録時にパスワードをハッシュ化しデータベースに登録します。利用者が認証を受ける際には、管理者が受け取ったパスワードをハッシュ化し、データベースに登録されたIDの情報と比較します。比較して合致すれば認証します。

この認証のメリットは、管理者がパスワードを持っている必要がないことが挙げられます。万が一データベースから不正にIDとハッシュ化されたパスワードを盗まれたとしても、そのままでは認証に利用できません。しかし、盗んだハッシュをブルートフォース攻撃や辞書攻撃を用いて平文に戻し悪用される可能性があります。本稿では、解析マシンを用いて代表的なアルゴリズムに対するブルートフォース攻撃の検証結果をまとめていきます。


Windowsパスワード(NTLMハッシュ)検証結果

まずは、Windowsで利用されているNTLMハッシュの解析結果です。  解析速度は、約500億ハッシュ/秒という結果でした。Windowsのパスワードハッシュを盗まれて解析されるというのはかなり特異なケースになりますが、強度の高いパスワードを利用することを推奨します。

Windowsパスワード(NTLMハッシュ)検証結果

利用文字種\桁数 7桁 8桁 9桁 10桁
英子文字のみ(26文字種) 0.1秒 4秒 1.8分 47分
英大小文字+数字(62文字種) 1.2分 1.2時間 3.1日 194日
英大小文字+数字+記号(96文字種) 25分 1.7日 160日 42年

ハッシュ検証結果

ハッシュの解析は、MD4、MD5、SHA-1、SHA-2からSHA-256、SHA-512の検証を行いました。今回の検証では、後述のソルトの付加およびストレッチングは利用していません。解析結果、解析速度は以下の表のとおりです。

表.ハッシュ解析速度

ハッシュアルゴリズム 解析速度(ハッシュ/秒)
MD4 約600億ハッシュ/秒
MD5 約300億ハッシュ/秒
SHA-1 約100億ハッシュ/秒
SHA-2(SHA-256) 約40億ハッシュ/秒
SHA-2(SHA-512) 約7億ハッシュ/秒

今回の検証では、ZIP(WinZIP2.0互換形式)、ZIP(AES-256bit)、RAR(AES-128bit)、Microsoft Office2010(AES-128bit)を対象としてファイルパスワード解析を行いました。検証結果は、以下のようになりました。

表.MD4検証結果

利用文字種\桁数 7桁 8桁 9桁 10桁
英子文字のみ(26文字種) 0.1秒 3.5秒 1.5分 39分
英大小文字+数字(62文字種) 58秒 1時間 2.6日 161日
英大小文字+数字+記号(96文字種) 21分 1.4日 134日 35年

表.MD5検証結果

利用文字種\桁数 7桁 8桁 9桁 10桁
英子文字のみ(26文字種) 0.2秒 7秒 3分 1.3時間
英大小文字+数字(62文字種) 2分 2時間 5.2日 323日
英大小文字+数字+記号(96文字種) 41分 2.7日 267日 70年

表.SHA-1検証結果

利用文字種\桁数 7桁 8桁 9桁 10桁
英子文字のみ(26文字種) 0.8秒 21秒 9分 4時間
英大小文字+数字(62文字種) 6分 6時間 16日 2.7年
英大小文字+数字+記号(96文字種) 2時間 8.4日 2.1年 210年

表.SHA-2(SHA-256)検証結果

利用文字種\桁数 7桁 8桁 9桁 10桁
英子文字のみ(26文字種) 2秒 52秒 23分 9.8時間
英大小文字+数字(62文字種) 15分 15時間 39日 6.7年
英大小文字+数字+記号(96文字種) 5時間 21日 5.5年 527年

表.SHA-2(SHA-512)検証結果

利用文字種\桁数 7桁 8桁 9桁 10桁
英子文字のみ(26文字種) 11秒 5分 23時間 2.3日
英大小文字+数字(62文字種) 1.4時間 3.6日 223日 38年
英大小文字+数字+記号(96文字種) 1.2日 119日 31年 3012年

ハッシュの解析対策

ハッシュ検証結果から何の対策もしていないハッシュ化は、GPGPUのブルートフォース攻撃に対し脆弱であるといえます。

管理者は、ハッシュの解析対策を行うことが推奨されます。特に、パスワード桁数が8桁までしか設定できないサービスや使用可能な記号、文字に制限があるサービスに関しては、ハッシュが漏洩した際に悪用される可能性が非常に高くなるため、対策の重要度は高いと思われます。

ハッシュの解析対策として一般的に効果的なのは、ソルトおよびストレッチングと呼ばれる対策です。両方の対策を施すことでサービスの機密性を高めることが可能になります。


ソルト(salt)

ソルトというのは、ハッシュ化する前のパスワードに任意の文字列を付加し、それをハッシュ化するという対策です。 十分な長さのソルトを付与することにより既存のレインボーテーブルによる攻撃を防ぐことが可能になります。また、ソルトを登録ユーザーごとに異なるものにすることで同じパスワードを利用しているユーザーが存在しても別のハッシュ値が算出されるので攻撃者の解析効率を下げることが可能になります。

ソルトは、ハッシュの保存先と別のデータベースに保存することで安全性を更に高めることが出来ますが、ソルトが盗まれてもソルト自身の目的は達成されるため一般的には、パスワードと同じデータベースに登録します。


ストレッチング

ストレッチングとは、ハッシュ化を繰り返し行うことでハッシュ解析を困難にする方法です。ストレッチングの回数が多ければ多いほど1回当たりの解析時間が長くなり攻撃者の解析効率を下げることが可能です。

ストレッチングの回数は、ハッシュ化を行うマシンのリソースおよび利用ユーザーの人数によっては、サービスのレスポンスが極端に落ちる可能性もあるので注意が必要です。