第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回当たりの解析時間が長くなり攻撃者の解析効率を下げることが可能です。
ストレッチングの回数は、ハッシュ化を行うマシンのリソースおよび利用ユーザーの人数によっては、サービスのレスポンスが極端に落ちる可能性もあるので注意が必要です。
