5

class Randomパスワードの生成に.NET が使用されているのをよく見かけます。

一方で、私が以前に尋ねたこの質問はclass Random、かなり予測可能なデータを使用して一連の「秘密」データを生成することを示しています。一方、私は現在、その正確な予測を実行しようとしています。私のコードは、単一のコアで 1 日あたり約 600 万のシード推測の速度で動作します。非常に高速ではありません。考えられるすべてのシード値を列挙するには、ほぼ 1 年かかります。そのレートで。

class Random()からのデータを使用して生成されたパスワードが通常予想されるよりもはるかに弱いことを示す、より明確で迅速な方法はありますか?

4

3 に答える 3

1

このように言えば、生成したいパスワードの数に適した乱数ジェネレーターを選択してください。アルファベットのサイズが 36 (数字と大文字のみまたは小文字のみ) の場合、RNG の内部状態のごく一部のみを抽出します。そのようにして 40000 文字を生成したとしても、それでも約 21 ビットの情報しかありません。他の質問のアルゴリズムは、プレフィックスに加えて 4 つのランダムな文字のみを生成します。攻撃者は、次に生成されるパスワードを見つけるために、RNG 状態をブルート フォースするのではなく、考えられるすべてのパスワードをブルート フォースする方が簡単です。

実際、単純な RNG を使用してパスワードを生成するときに起こりうる最悪の間違いは、多数のパスワードを生成することです。オンデマンドでのみ生成し、常に新しくシードされた RNG を使用する場合、攻撃者はシードとパスワードを理解するのに苦労します。System.Random の既定の実装では、システムが開始してから経過した時間がミリ秒単位でシードとして使用されます。それを理解する幸運。

于 2012-05-18T19:27:09.507 に答える
0

私の理解では、このRandomクラスは「疑似ランダムアルゴリズム」に基づいてランダムな値を生成するため、実際にはランダムではありません。それらは数学アルゴリズムの具体的な実装に基づいているため、結果は予測可能です。

したがって、このアルゴリズムを破ろうとした場合、セキュリティ違反のために、特定の情報を知る必要があります。アルゴリズムが何であるか、.Net Frameworkを介して公開されていること、入力値(シード)?

繰り返しますが、これらの入力値を魔法のようにすることはできません。それらは何かに基づいている必要があります。

あなたの例では、私が理解しているように、すべての可能なシード値を生成しようとしています。あなたが言ったように、これには長い時間がかかります!

しかし、なぜ私はこれをするのでしょうか?最もインテリジェントなアプローチは、入力値を生成するために何を使用しているかを推測することです。つまり、時間を使っていますか?パスワードはいつリセットされますか?このパスワードはいつ生成されましたか?これはどのような値のサブセットを私に与えますか?どれくらいの数を使っていますか?

1日に600万のシードをテストできる場合、ロジックを適用すると、可能な値のセットがいくつの値に絞り込まれますか?600万未満の場合、24時間以内にパスワードを破ることができます。

とはいえ、シードのサブセットを十分に大きくし、予測不可能にすることができれば、これは困難です。それで、セキュリティの多くのことが起こるように、これはどれほど安全である必要があるのか​​という質問があります。100%はありません!

于 2012-05-03T09:08:44.973 に答える
0

あなたの元の質問では、ランダムはランダムなパスワードを生成するのに適していないという人は誰もいません(実際、「パスワード」という単語は質問、回答、またはコメントのどこにも表示されません)。これを行うには、システムが一度に多数のランダムなパスワードを生成する必要があるため、これを証明するのは困難です。また、攻撃者は、かなりの数のパスワードを入手できたとしても、何らかの方法でユーザー名とパスワードを一致させる必要があります。

于 2012-05-03T09:11:02.267 に答える