web-dev-qa-db-ja.com

ソルト値を持つ可能性のあるパスワードの組み合わせの合計数を把握するにはどうすればよいですか?

私は自分の役割の準備をよりよくするために、コンピュータセキュリティに関するこの本を読んでいますが、この質問は私にクリックするだけではありません。私はそれの半分を理解しましたが、この最後の部分を理解することはできません。誰かが私にその方法を示すことができれば、それは素晴らしいことです。

質問:

システムのパスワードは、95文字の印刷可能なASCII文字の使用に制限されており、すべてのパスワードの長さは10文字であると想定します。システムはソルト値を使用していないと想定します。

a。いくつの異なるパスワードが可能ですか? 95 ^ 10の可能なパスワード

b。毎秒640万回の暗号化率を持つパスワードクラッカーを想定します。可能なすべてのパスワードをテストするのにどのくらい時間がかかりますか? 296,653年(私の計算に基づく)

質問のパート(I)で説明されているシステムに4人のユーザーしかいないとします。各ユーザーは異なるソルト値(パスワードファイルにプレーンテキストとして保存)を持っているとします。

c。上記のパスワードクラッカーを使用する場合、考えられるすべてのパスワードをテストするのにどのくらい時間がかかりますか?

私は質問Cを理解できません。4人のユーザーと異なるソルト値の追加された可能性は本当に私を失望させています。さまざまな組み合わせを理解できたとしたら、すべてのパスワードをテストするのに必要な時間は、計算するのが大変です。誰かがこれを理解する方法を私に示すことができれば、それは素晴らしいことです!

2
user125642

ソルトはハッシュと一緒にプレーンに保存されるため、正しいソルトがわかっている場合は、複数のソルトの組み合わせをテストする必要はありません。これにより、計算が簡単になります。

ソルトがない場合、1つのブルートフォースジョブですべてのパスワードを解読できます。

しかし、4人のユーザーそれぞれが異なるソルトを持っている場合、4つの個別のブルートフォースジョブが必要になります。

つまり、1つのソルトで296,653年×4つの一意のソルト= 1,186,612年で、すべてのユーザーのパスワードを解読できます。

4
Bryan Field

細心の注意を払ってください-b。たとえば、時間の単位として年を使用している場合は、必ず365ではなく365.25日/年を使用してください。うるう年を考慮する必要があります。

c。トリッキーです。最初の質問では、システムがソルト値を使用していないと想定するように求められます。パートcの序文では、各ユーザーが独自のソルトを持っていると述べています。それを放り込まないでください。この質問の前のテキストには、最初にパスワードをハッシュするために使用されたハッシュアルゴリズムが記載されていますか?定義されたソルトを含めるときに使用される時間についての言及がなく、各ソルトがパスワードハッシュごとに一意である場合、計算は簡単です。

この例では、ソフトウェアがソルトなしで1つのパスワードを解読するのに296k年かかり、ソルトに時間ペナルティがないため、各ソルトがパスワードごとに同じ時間を必要とすると想定します。また、パスワードクラッカーがマルチスレッドであるという仕様もありません。計算は次のようになります。

  • (x(パスワード)*レート(時間/パスワード))/ n(スレッド)=時間
  • (4パスワード* 296K年)/ 1スレッド= 1.185 M年

また、ソルトがパスワードごとに同じである場合、正しい答えは「1.185M年未満」になります。それ以外の場合、答えは「1.185 M年」になります。

2

ユーザー固有のソルトが行うことは、あるユーザーのパスワードを攻撃するために実行される計算が、他のユーザーを攻撃するのに役立たないようにすることです。別の言い方をすれば、ソルトがない場合、攻撃者が試行するパスワードごとに、4人のユーザーのハッシュすべてに対してそのパスワードをテストできます。固有のソルトがある場合、攻撃者はパスワードエントリごとに個別の総当たり攻撃を実行する必要があります。

これで十分でしょう。


加えて、私はあなたが使用している教材の品質について心配していることを付け加えなければなりません。あなたは小さなスニペットを引用しました、それでも私はいくつかのフラグを見ます:

  1. hashingではなく、パスワードの「暗号化」について話します。
  2. 1秒あたり640万回の「暗号化」は、実際には思ったほど高速ではありません。 GPUは1秒あたりの桁数がさらに多いハッシュを計算できます。問題の答えには影響しませんが、そのリアリズムを改善することは問題ありません。
  3. 最も重要なのは、すべてのパスワードをテストする時間ではなく、攻撃者が成功するまでのaverage時間です。
  4. 時間の見積もりは、ユーザーがランダムにランダムにパスワードを選択することを前提としています。これは、実際のユーザーが行う方法とは異なります。

3番目のポイントを拡張するには、クラッカーはlast総当たり攻撃が正しいものであると推測するために非常に不運でなければなりません。 最悪の場合です。平均して、彼らはhalfをテストするだけで成功します。

(そしてfournsalted passwordsを使用するユーザーについて話している場合、目標はブルートフォースoneパスワードであり、さらに- 四半期成功するまでの予想時間。)

ポイント4で、攻撃者が可能性の低いパスワードよりも可能性の高いパスワードを推測できる場合、成功するまでの予想時間を短縮します。実際には、パスワードクラッキングはさまざまな手法を使用してこれを試みます(たとえば、一般的なパスワードの辞書)。これらの手法は非常に成功しています。

2
Luis Casillas

私は、パスワードが(可逆的に)暗号化されたではなく(一方向、できれば遅い関数を使用して)ハッシュされることを心から願っています。ログインパスワードの暗号化が良い考えである状況はほとんどありません(これを行うと、パスワード検証機能を盗んだ攻撃者が暗号化キーも盗んだ可能性があり、検証機能を解読するのに数ミリ秒かかります。パスワードを取り戻します)。

暗号化されているのではなくハッシュされていると仮定すると、ソルトを追加しても余分な時間はかかりませんパスワードごと。それとハッシュを確認してください。ただし、各パスワードを個別にブルートフォースにする必要があることを意味します。サーチスペース全体でパスワード1を競ったとしても、ソルトが異なるため、パスワード2を使用しても時間を節約できません。私はここで答えをスプーンフィードするつもりはありませんが、ブルートフォースoneパスワードを個別に取得するのにどれくらい時間がかかるか知っています...

0
CBHacking