web-dev-qa-db-ja.com

未知のPBKDF2反復回数はどのくらいセキュリティを向上させますか?

私たちは暗号化されたファイルを手に入れるクラッカーです。ファイル全体が元の平文ファイルのAES-256暗号化であることはわかっています。

キーとIVを作成するために、PBKDF2が元のプレーンパスワードで1000回実行されたこともわかっています。

この場合、これを総当たりする方法を知っています:

  1. 平文のパスワードを生成する
  2. PBKFD2を1000回実行する
  3. ファイルを復号化してみてください
  4. 成功するまで1〜3を繰り返します

しかし、もし私たちがPBKFD2反復回数がわからないだったらどうでしょうか? 500、1050、5400、または任意の数にすることができます。

これはどれくらい難しいですか?

私にとって、総当たり攻撃を行うことはほとんど不可能のようです。反復回数がわからないため、どこから始めればよいかわかりません。私は正しいですか?

質問は言い換えることができます:通常のパスワードだけでなく反復回数によっても保護されている場合、ファイルに実際にどの程度のセキュリティが追加されますか?解読時に、パスワードと反復回数の両方を指定する必要があります。

6
lwood

それは問題に十分なセキュリティを追加しません。これは、攻撃者が(既知の)カウントの後ではなく、PBKFD2関数の各反復の後に、格納されているハッシュと比較する必要があることを意味します。比較は反復よりもはるかに速いため(合理的な基礎となるハッシュ関数の場合)、攻撃者が大幅に遅くなることはありません。

少し微妙な問題は、攻撃者が自分のサイクルをどこに投資するかを優先して推測ゲームをプレイする必要があることです。基本的なパスワードディクショナリを1,000回繰り返し実行してもヒットしない場合は、より大きなディクショナリに移動するか、2,000回の反復に拡張する必要がありますか。実際には、彼はヒットするまでおそらく検索拡張を代替するでしょう。彼の検索プログラムがこれをサポートするように作成されている場合は(サポートされているかどうかはわかりませんが、可能であり、ソースコードが利用可能です)、中間結果のすべてを保存できます。 1,000回の反復なので、2,000回の反復に拡張すると、さらに1,000回の反復の計算のみを実行します。

攻撃者は1つの一致(データベースで最も弱いパスワード)を見つけるとすぐに、他のすべてのパスワードが同じ数であるとすぐに推測し、標準の攻撃に戻ります。 (アカウント間でカウントを変える場合、ハッシュと一緒にカウントを保存する必要があることに注意してください。これは、彼がハッシュデータベースを盗むときにカウントも持つことになり、これはすべての意味がないことを意味します。)

ちなみに、このような一般的な用語(ハッシュアルゴリズムの秘密の要素であり、すべてのユーザーで同じであるため、ハッシュと一緒に保存する必要はありません)は「ペッパー」です。これは便利な概念ですが(ハッシュと一緒に盗まれるだけではないペッパーの値を保存する方法がある場合)、これはペッパーをハッシュアルゴリズムに挿入するための良い方法ではありません。

6
Gordon Davisson

非表示の反復回数は、次の2つの理由により、セキュリティをあまり向上させません。

  • 通常PBKDF2を使用するシステム。ファイルを復号化するには、反復回数を知っている必要があります。漏れる可能性があります。そのシステムが着信ファイルを処理するのにかかる時間を測定する。だからそれほど秘密ではないかもしれません。さらに、その反復回数はconfigurationの一部としてではなく、パスワードの一部と見なされることはほとんどありません。構成ファイルに書き込まれます。多分仕様書で定義されるか、または電子メールで交換されます...逆に、反復回数がすべての関係者によってパスワードの一部と見なされ、そのように保護されている場合、少なくとも同等の(そしておそらくより良い)セキュリティが達成されます。そのカウントをパスワードに(文字列として)追加するだけです。

  • PBKDF2 を見ると、反復回数の出力の計算cは反復回数の出力の計算も意味していることがわかりますc-1c-2...これらすべてを取得します「無料」これは単なるXOR多くの疑似乱数値の間であり、それらのどれも意図された反復回数(そうでない可能性はありますが、PBKDF2はそのように定義されています)PBKDF2出力を試すことは、平均して次の反復を計算するよりも安価です:256ビット出力のPBKDF2/SHA-1の1回の反復には、 2つのHMAC/SHA-1呼び出し、したがって4つのSHA-1呼び出し。一方、キーを「試す」とは、AES-256で最初のブロックを復号化し、結果が意味をなすかどうかを確認することです。AES-256キーを試すことは、計算よりもコストがかかりません。 four基本SHA-1はもちろんのこと、1つの基本SHA-1。反復カウントを「非表示」にすると、ブルートフォース攻撃が遅くなります。ほとんどの25%、私は驚くべきことは何もありません。

3
Tom Leek