2016-05-16 14 views
0

シード・ランダム世代ではシードを予測できないようにする必要があります。なぜなら、可能なシードを合理的な量の異なる値に絞り込むことができれば、ブルートフォース攻撃が可能になるからです。PRNGの長さが十分に長い場合、なぜそれを強要できますか?

しかし、これは私を混乱させる。擬似乱数を生成するアルゴリズムを使用するとします。理論的にはある時点で繰り返されますが、実際にはこれは多くの人によるとほとんど見られません。 これが当てはまる場合、攻撃者が種子を50k種の種子に絞り込んだとしましょう(攻撃者は種子が50k種子の1種であることを知っています)。また、攻撃者はこのランダムジェネレータに基づいたログインクッキーも持っています(攻撃者はログインクッキーを作成するアルゴリズムを知っています)。

攻撃者がこれらの50kのシードのすべてのシード値をチェックし、その結果を自分のログインクッキーと比較して、使用されているシードを特定している場合...攻撃者によって生成されたログインクッキーがログインクッキーと同じ擬似ランダムシーケンスからの値?擬似ランダムジェネレータが、この特定のログインクッキーのサイクルの前にシーケンスの「最後の」番号を使用するとどうなりますか?これは、攻撃者がPRNGが生成する可能性のあるすべての可能な値を試す必要があるため、攻撃者が試行するたびに数十億回(またはそれ以上)試行するよう強制しませんか?

数値の擬似ランダムシーケンスは、サイクルが無限で無限に近い限り、すべてランダムです。

私は十分な質問をすることができます。

答えて

0

攻撃者用のクッキーを生成する直前に被害者がPRNGをシードしたと仮定します。攻撃者はそのプログラムをシミュレートします(それが気にするビットだけ)。攻撃者のシミュレーションで送信された犠牲者と同じ値が送信されると、攻撃者は自分のシミュレーションが犠牲者と同じ状態にあることを前提とし、次のシミュレーションで犠牲者が次に行うことが明らかになります。

シードが非常に長い時間前に設定されていて、攻撃者がrand()(または同等のもの)への呼び出しを何回行ったかわからない場合、そのシミュレーションは最終的にすべての可能な順列クッキーの生成に至る制御フロー。

違う攻撃では、PRNGは短期間(したがって小さな状態空間)の攻撃を受けますが、攻撃者はシードを無視してPRNGの状態空間全体を強制的に強制しようとします同じ出力を出す。それから、被害者がどれくらい前に種を使ったかは問題ではありません。

+0

いつも「始まり」から始まるのではなく、シーケンスがランダムに選択されるようにPRNGを設計できないのですか?それはそれをより固定できないようにしますか? – AlexioPat

+0

多くの簡単なPRNGは、予測可能な乱数の1つの大きな長いループであり、その種子はどこから始めるのかというランダムな選択肢です。そういうわけで、種を正確に推測すると、次に何が起こるかが正確に伝えられます。 – sh1