Wie generieren Computer Zufallszahlen?

1223
SemperAmbroscus

Dies ist möglicherweise die einzige Frage, die ich auf dieser Stackexchange-Site stelle. In der Programmierung gibt es viele verschiedene Möglichkeiten, Zufallszahlen abhängig von den verschiedenen Sprachen zu generieren. Was stört mich jetzt schon eine Weile, aber wie kann alles, was vom Computer erzeugt wird, zufällig sein? Ich fand diesen Beitrag jedoch nicht sehr gut angenommen und sagte zu breiten oder zu vielen möglichen Antworten. Aber so wie ich es sehe, gibt es nur eine mögliche Antwort, wie es funktioniert! Ich meine damit zu sagen, dass jemand mit einem Computer-Hintergrund in der Lage sein sollte, dies zu beantworten, es ist also nicht so, als würde ich nach Ihrer Meinung fragen. Zum Schluss möchte ich mich entschuldigen, wenn ich im falschen Forum bin.

3
Die Antworten hier sind in Ordnung, aber ich wette, wenn Sie dies auf der Sicherheitsseite gefragt hätten, hätten Sie viele Antworten erhalten. Die sichere Erzeugung von Zufallszahlen ist für die Verschlüsselung äußerst wichtig. Es ist äußerst komplex und es gibt eine Vielzahl von Techniken mit unterschiedlicher Komplexität und Leistung. http://security.stackexchange.com/questions/tagged/prng http://security.stackexchange.com/questions/tagged/random Zoredache vor 9 Jahren 0

3 Antworten auf die Frage

3
RedGrittyBrick

Sie tun es nicht

Sie verwenden Algorithmen, die als Pseudo-Random Number Generators (PRNGs) bezeichnet werden. Diese erzeugen immer dieselbe Zahlenfolge, es sei denn, Sie geben eine eindeutige "Seed" -Nummer an, um sie zu starten.

Eine Seed-Nummer kann aus einer Kombination relativ zufälliger Quellen erstellt werden - zum Beispiel aus den letzten Ziffern der Millisekunden der aktuellen Zeit, den letzten Bewegungen des Mauszeigers.

Das Ergebnis ist eine Folge von Zahlen, die für viele Zwecke ausreichend einer zufälligen Folge entspricht, um unvorhersehbar zu sein.

wow, ich hatte nie etwas so winziges wie die aktuelle Zeit in Millisekunden verwendet. Ich war einfach davon ausgegangen, dass jede Methode zur Erzeugung einer Zufallszahl nicht zufällig sein kann. SemperAmbroscus vor 9 Jahren 0
3
Alex

Sie können und können sich nicht auf den Computer verlassen. Normalerweise handelt es sich dabei um einen Pseudozufallsalgorithmus. Einer der ersten Algorithmen bestand im Wesentlichen darin, eine Reihe grundlegender Arithmetik (multiplizieren, dividieren, addieren, subtrahieren, modulo) für eine Zahl, die Samen genannt wird, auszuführen und die mittleren Zahlen oder ähnliches zu verwenden. Die Zahlen erscheinen zufällig, aber nach einer bestimmten Anzahl von Versuchen wiederholt sich derselbe Zyklus.

Dies bedeutet, dass sie kein PRNG verwenden können, um Ihr Kennwort zu verschlüsseln. PRNGs verwenden normalerweise die Systemzeit als Startzeitpunkt. Wenn also der Angreifer die ungefähre Zeit kennt, zu der Ihr Kennwort verschlüsselt wurde (Kontoerstellungszeit, Kennwortänderungszeit), können Sie mit diesem Zeitraum nur einen kleinen Bereich von Kennwörtern generieren und alles ausprobieren generierte Passwörter, anstatt alle zulässigen Kombinationen generieren zu müssen.

Wenn Sie jemals auf www.random.org gegangen sind, werden Sie wahrscheinlich feststellen, dass sie wirklich zufällige Zahlen erzeugen. Das liegt daran, dass sie Geräte verwenden, um atmosphärisches Rauschen oder eine Art lauter atmosphärischer Daten zu sammeln, und diese verwenden.

Ich bin kein Experte in diesem Bereich, aber ich denke, dass einige Betriebssysteme auch Daten aus der Mausbewegung und Tastatur gedrückt mit einem PRNG sammeln können, um Zahlen zu erzeugen, die sicher genug sind, um Passwörter zu verschlüsseln

Ein guter PRNG wird nicht von Zeit zu Zeit ausgesät, kann aber immer noch aus einer relativ geringen Menge an Informationen gewonnen werden (dies ist für Brute-Force unpraktisch, wird aber gelegentlich vermutet, wenn es aus einer schlechten Quelle kommt). user20574 vor 9 Jahren 2
-2
Callum Ansell

Hier ist ein Code-Ausschnitt aus einer meiner Aufgaben. Es generiert Zufallszahlen und prüft, ob die Zufallszahl bereits in das Array eingefügt wurde. Wenn dies nicht der Fall ist, darf sie hineingehen und wird nicht verwendet.

public static int[] RandomArray(int RandArrayNValue) {  int[] array = new int[RandArrayNValue];  Random rand = new Random();  for (int i = 0; i < RandArrayNValue; i++) { array[i] = i + 1; }  Console.WriteLine();  for (int i = array.Length - 1; i >= 0; i--) { int Store = rand.Next(i);  int TempStore = array[Store];   array[Store] = array[i];  array[i] = TempStore; Console.WriteLine(" " + array[i]); } return array; } 
Dem OP ist bekannt, wie Zufallszahlen auf dieser Ebene funktionieren: "Beim Programmieren gibt es viele verschiedene Möglichkeiten, Zufallszahlen abhängig von den verschiedenen Sprachen zu generieren." Die Frage ist, wie alles, was von einem Computer kommt, wirklich zufällig sein kann, wenn ein Computer vollständig deterministisch ist (dh bei Eingabe A erhalten wir immer Ausgabe B). tsleyson vor 9 Jahren 0
`Random ()` ist keine Zauberei - es geht um die Frage, wie es funktioniert. NReilingh vor 9 Jahren 0