パスワードが辞書単語の場合と辞書単語でない場合のブルートフォースのタイミングを知りたいです。
辞書パスワード
概算図: 約 1,000,000 の英単語があり、ハッカーが 1 秒あたり約 10,000 SHA-512 ハッシュを計算できる場合 (更新: CodesInChaos のコメントを参照してください。この見積もりは非常に低いです)、1,000,000 / 10,000 = 100 秒. そのため、1 人のユーザーの単語辞書のパスワードをクラックするには、1 分強かかります。ユーザーが辞書にある2 つの単語を連結した場合、数日で終わりますが、攻撃者が十分に注意を払っていれば、その可能性は十分にあります。それ以上になると、タフになり始めます。
ランダムパスワード
パスワードが大文字と小文字の英数字の真にランダムなシーケンスである場合、長さ N の可能なパスワードの数は 60^N です(60 の可能な文字があります)。今回は反対方向の計算を行います。質問します:特定の期間が与えられた場合、クラックできるパスワードの長さはどれくらいですか? 次の式を使用してください。
N = Log60(t * 10,000)
ここで、t は秒単位のハッシュの計算に費やされた時間です (ここでも 1 秒あたり 10,000 ハッシュを想定しています)。
1 minute: 3.2
5 minute: 3.6
30 minutes: 4.1
2 hours: 4.4
3 days: 5.2
したがって、3 日あれば、パスワードが 5 文字であれば解読できます。
これはすべて非常に大ざっぱですが、アイデアはわかります。更新: 以下のコメントを参照してください。これよりもはるかに長いパスワードをクラックすることは実際には可能です。
何が起きてる?
いくつかの誤解を解いてみましょう。
ソルトによって hash の計算が遅くなることはありません。各ユーザーのパスワードを個別にクラックする必要があるだけであり、事前に計算されたハッシュ テーブル (バズワード: rainbow tables ) は完全に役に立たなくなります。事前に計算されたハッシュ テーブルがなく、パスワード ハッシュを 1 つだけクラックしている場合、ソルティングは何の違いもありません。
SHA-512 は総当たり攻撃が困難になるようには設計されていません。BCrypt、PBKDF2、SCryptなどのより優れたハッシュ アルゴリズムは、計算に時間がかかるように構成でき、平均的なコンピューターは 1 秒間に 10 ~ 20 個のハッシュしか計算できない場合があります。まだ読んでいない場合は、パスワードハッシュに関するこの優れた回答を読んでください。
更新: CodesInChaos のコメントに書かれているように、適切なハードウェアを使用して SHA-512 ハッシュを計算すると、エントロピーの高いパスワード (約 10 文字) でさえブルートフォースされる可能性があります。
受け入れられた回答に関するメモ:
2014 年 9 月の時点で受け入れられている回答は正しくなく、危険なほど間違っています。
あなたの場合、ハッシュアルゴリズムを壊すことは、ハッシュアルゴリズムで衝突を見つけることと同じです。つまり、パスワード自体を見つける必要はありません (プリイメージ攻撃になります)...誕生日攻撃を使用して衝突を見つけるには、O(2^n/2) の時間がかかります。ここで、n はハッシュの出力長です。ビット単位で機能します。
誕生日攻撃は、特定のハッシュのクラックとはまったく関係ありません。実際、これはプリイメージ攻撃の完璧な例です。この式と次の数段落では、危険なほど高く、まったく意味のないアタック タイムの値が得られます。上で示したように、ソルトされた辞書のパスワードを数分でクラックすることは完全に可能です。
典型的なパスワードのエントロピーが低いため、ユーザーの 1 人が、一般的なパスワードの比較的小さなデータベースのパスワードを使用する可能性が比較的高い可能性があります...
そのため、通常、ハッシュとソルティングだけでは十分ではなく、他の安全メカニズムもインストールする必要があります。PKCS#5 で説明されている PBKDF2 などの人為的に速度を落としたエントロピー誘導方法を使用する必要があります...
はい、計算が遅いアルゴリズムを使用してください。しかし、「エントロピー誘導」とは何ですか? 低エントロピーのパスワードをハッシュに渡しても、エントロピーは増加しません。エントロピーを保持する必要がありますが、ゴミのパスワードをハッシュで改善することはできません。そのようには機能しません。PBKDF2 を介して入力された脆弱なパスワードは、依然として脆弱なパスワードです。