web-dev-qa-db-ja.com

Rainbowテーブルを実際に生成するのにどのくらいかかりますか?

私はレインボーテーブルについて非常に興味深い理由だと思って読んでいますが、実際には非常に単純な概念です。

とにかく、私は疑問に思っていました、実際にそれを生成することに関与した人はいますか?それはどのように行われる可能性がありますか?どのようにすべてのキャラクターのあらゆる組み合わせを生成することが実際にどのように可能であるのか、私にはわかりません。

特殊文字を除外すると、これらの文字数になります。

ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 1234567890

26 + 26 + 10 = 62文字あるように思えます

つまり、長さ8のパスワードには62 ^ 8の組み合わせがあります。

これは218340105584896に等しい

それだけでは、生成に時間がかかるように思えます。文字数を12に増やして特殊文字を追加するとどうなりますか(Shift-数字を押して取得した文字を見るだけで、さらに10文字あるとします)。

72 ^ 12 = 19408409961765342806016になります

これは、取得するのに何年もかかるのに十分な大きさの数値です。

27
stickman

レインボーテーブルは、事前計算されたハッシュ値のテーブルの "単なる"コンパクトな表現です。レインボーテーブルの作成中に、多くの可能な入力が試行され、ハッシュされます。テーブル構築中に遭遇した各入力は、そのテーブルで攻撃され、それ以外は攻撃されません。ハッシュ評価は、テーブル構築コストのほとんどに集中します。

したがって、基本的に、[〜#〜] n [〜#〜]パスワードを反転できるRainbowテーブルを構築するコストは、コストとほぼ同じですハッシュ関数を介して[〜#〜] n [〜#〜]パスワードを試す方法-Rainbowテーブルのポイントは、それを作成することですonceその後、それを使用していくつかのパスワードを破ることができます。 (正確には、テーブル構築中のチェーンの衝突により、コストは実際には1.7 * Nに近くなりますが、ここでは無視します。 )

私はかつてSHA-1でいくつかの経験をしました。 SHA-1を使用した単純なパスワードハッシュには、単一の「ブロック」(MD5のようなSHA-1、64バイトブロックでデータを処理)のコストがかかり、約900の32ビットの論理演算または算術演算が必要です。 Intel Core2 x86プロセッサーでの最適化された実装は、約500クロックサイクルでそれを実行できます。ただし、パスワード攻撃(直接またはRainbowテーブルの構築のどちらでも、それは問題ではありません)は高度な並列処理であるため、128ビットレジスタを提供し、単一のオペコードが実行できるSSE2命令を使用できますfour32ビット演算を同時に実行します。 SSE2では使用できる操作の種類が少ないため(特に、回転は提供されず、シフトのみが提供されます)、操作数は約1200に増えます。ただし、特定の条件下では、SSE2ユニットは複数のオペコードを同時に実行します。したがって、4つのSHA-1インスタンスを並行して実行すると、最終的に800クロックサイクルになります。結論:私のPCはIntel Core2 Q6600で、4つのコアが2.4 GHzで動作しています。各コアはSSE2実装を実行できるため、1秒あたり約4800万のハッシュされたパスワードになります。

私も小さすぎるNvidiaグラフィックカードを使用しており、GPUは [〜#〜] cuda [〜#〜] を介して任意のコードを実行できます。これは9800 GTX +で、128コアが1.84 GHzで動作します。各コアは、サイクルごとに1つの32ビット操作を実行する可能性があります(レイテンシは長くなりますが、高度な並列化のおかげで、1サイクルあたり1命令のスループットを維持できます)。コアはローテーションを認識しないため、各コードはハッシュされたパスワードごとに1200クロックサイクルを使用します。合計のパフォーマンスは、1秒あたり1億600万のハッシュされたパスワードです。

私のPCとグラフィックスカードは2009年初頭のものであり、最上位製品ではありません。今日では、数百ドルで、私の9800 GTX +の約3倍の速さでパスワードをハッシュするGPUを見つけることができます。したがって、一般的なPC(1000ドル未満のコスト)を持つ攻撃者が1秒あたり5億のパスワードをハッシュできると仮定しましょう。

その速度で、8文字の英数字(大文字と小文字、および数字)を含むすべてのパスワードは、約5日で通過します。 1000ドルのPCで。 MD5を使用する場合、処理は約30%高速になります(MD5はSHA-1よりも少し少ない操作を使用します)。ただし、優れたパスワードハッシュスキームは単純なハッシュ呼び出しを使用しません。たとえば、2000のネストされたハッシュ呼び出しで反復ハッシュを使用します。これにより、攻撃者のコストが同じ2000倍になります(したがって、「5日」が約28になります)年、あなたがそれを置くように文字通り「年齢」)。

30
Thomas Pornin

単一の反復だけを使用して、非常に単純なハッシュのRainbowテーブルを生成するのにどのくらい時間がかかりますか? 1時間かかります!必要に応じて、それ以下にしてください。

上記の答えは完全に正しいですが、言及されていない重要な進展が1つあります。 Amazon EC2およびその他の「クラウドコンピューティング」サーバープロバイダー

今日、クレジットカードを持っている人はすべてaws.Amazon.comにアクセスして、 一握りのEC2スポットインスタンス を100ドル未満でスプールできます。または、適切なCUDAコードを利用できる場合は、2つのNVIDIA Tesla M2050グラフィックプロセッサを使用して、Amazonのより高価な「クラスターGPU」インスタンスを50個レンタルします。

(航空会社のように、Amazonは価格を差別化しています。可用性が保証された特定のEC2サーバーが必要な場合、価格は高くなります。たとえば、1時間あたり0.68 USDで8つの仮想CPUコアを持つ「Hi-CPU Large」インスタンスを取得できます。 。営業時間外に超過供給が許可されているのと同じインスタンスを購入したい場合は、それを取得できます 40%-50%のリベートで 。)

Rainbowテーブルの作成は並列で実行でき、線形のパフォーマンスが向上します。つまり、100台のコンピューターが動作している場合、1台のコンピューターよりも100倍高速です。

Amazonはインスタンスごとに課金しません。インスタンス時間ごとに課金します。したがって、1,000台のサーバーを1時間実行すると、1台のサーバーと同じのコストが1,000時間かかります。

レインボーテーブルの作成とAmazon EC2のようなサービスを併用するという並行した性質により、「どのくらい時間がかかるか」という疑問がなくなりました。 「あなたがそれを手に入れるためにいくら払って喜んで速く対して、より少なく支払って数日でそれを手に入れるか?」があります。コストと時間の違いは主に、Amazonの「通常の」EC2インスタンスと安価な「スポットインスタンス」との間の価格の違いに起因します。

18
Jesper M

単純な26 ^ 5テストランを使用して、ascii 16進テーブルをRubyで生成し、1秒あたり228488 MD5出力を生成しました。すべての11881376エントリに52秒かかりました。 1.5年前のCore i7を使用しています。プログラムを改善しなかった場合は、26週間実行して62 ^ 8リストが生成されると思います。

おそらく、ハイパースレッドごとに1つずつ、8つの別個のプログラムを実行して問題の領域を分割することにより、プログラムを改善することができます。各プログラムが独自のドライブに出力を保存した場合、それらはIO帯域幅について競合しません。4-6の私の愚かなシングルスレッドプログラムと比較して、4倍から6倍のスピードアップを期待します。実行時間が数週間です。Cで書き直すと、さらに1.5倍のスピードアップ要素が期待できます(多分それ以上ですか?一方でそれは単純なプログラムですが、一方で、13バイト長のC配列は実行時に変更されます)。 Ruby文字列オブジェクトを作成および破棄する場合と比較して、おそらくはるかに少ないメモリで実行され、ガベージコレクションはありません。)

私は午後の仕事を期待します、そして、数百ドルの新しいギアは私が商品ハードウェアで2週間で62 ^ 8テーブルを完成させることを可能にしました。

そして確かに、パスワードでシングルランMD5を使用する人はいません。 MD5よりも一方向ハッシュの方がはるかに高価であるにも関わらず、最終結果をスケーリングするだけです。 :)

6
sarnold

より近代的なGPUカードを持っている人が生のハッシュに関して達成できると判断したことについては、ビットコインマイニングネットワークのハッシュレート計算 パスワードを安全にハッシュする方法?-ITセキュリティ を参照してください。コミュニティは2011年7月上旬に11 Thash/s(11 * 10 ^ 12 hash/s)で実行されています...

1
nealmcb