Was ist Pseudo-Zufall?

Pseudo-Zufallszahlen werden von Computern generiert. Sie sind nicht wirklich zufällig, denn wenn ein Computer ordnungsgemäß funktioniert, ist nichts zufällig. Computer sind deterministische Geräte - das Verhalten eines Computers ist vom Design her völlig vorhersehbar. Um etwas Unvorhersehbares zu erstellen, verwenden Computer mathematische Algorithmen, um Zahlen zu erzeugen, die "zufällig genug" sind.

Pseudozufallszahlen sind für viele Computeranwendungen wie Spiele und Sicherheit von wesentlicher Bedeutung. In Spielen bieten Zufallszahlen unvorhersehbare Elemente, auf die der Spieler reagieren kann, z. B. ein zufälliges Geschoss ausweichen oder eine Karte aus einem Stapel ziehen.

In der Computersicherheit ist Pseudo-Zufälligkeit bei Verschlüsselungsalgorithmen wichtig, die Codes erstellen, die nicht vorhergesagt oder erraten werden dürfen.

Was ist ein PRNG?

Ein Pseudo-Zufallszahlengenerator oder PRNG ist ein Programm oder eine Funktion, die mathematische Daten verwendet, um die Zufälligkeit zu simulieren. Es kann auch als DRNG (digitaler Zufallszahlengenerator) oder DRBG (deterministischer Zufallsbitgenerator) bezeichnet werden.

Die Mathematik kann manchmal komplex sein, aber im Allgemeinen erfordert die Verwendung eines PRNG nur zwei Schritte:

  1. Versehen Sie den PRNG mit einem beliebigen Samen.
  2. Fragen Sie nach der nächsten Zufallszahl.

Der Startwert ist ein "Startpunkt" zum Erstellen von Zufallszahlen. Der Wert wird bei der Berechnung der Zahlen verwendet. Wenn sich der Startwert ändert, ändern sich auch die generierten Zahlen, und ein einzelner Startwert erzeugt immer dieselben Zahlen. Aus diesem Grund sind die Zahlen nicht wirklich zufällig, da echte Zufälligkeit niemals neu erstellt werden konnte.

Die aktuelle Uhrzeit wird häufig als eindeutiger Startwert verwendet. Wenn es beispielsweise 5. März 2018 um 5:03 PM und 7, 01324 Sekunden UTC ist, kann dies als ganze Zahl ausgedrückt werden. Diese genaue Zeit wird nie wieder vorkommen, daher sollte ein PRNG mit diesem Samen einen eindeutigen Satz von Zufallszahlen erzeugen.

Hinweis: Das Reproduzieren einer zufällig generierten Sequenz kann nützlich sein. In akademischen Anwendungen kann eine riesige Folge von Zufallswerten für eine Simulation generiert und anschließend für eine detailliertere Analyse genau reproduziert werden. Als ein anderes Beispiel: Wenn ein Spieler in Computerspielen ein gespeichertes Spiel lädt, können beliebige "zufällige" Ereignisse die gleichen sein, als wenn das Spiel nie aufgehört hätte. Auf diese Weise kann der Spieler dasselbe Spiel nicht wiederholt laden, um mehr Glück zu erreichen.

So generieren Sie eine Pseudo-Zufallszahl

Im Folgenden finden Sie einige Möglichkeiten, wie Sie eine Pseudo-Zufallszahl in gängigen Programmen und Programmiersprachen erstellen können.

Windows-Eingabeaufforderung

An der Windows-Eingabeaufforderung oder in einer Batchdatei erzeugt die spezielle Umgebungsvariable % RANDOM% eine Pseudozufallszahl zwischen 0 und 32767, die mit der Startzeit der Eingabeaufforderung beginnt.

 echo "So% RANDOM%!" 
 "Also 27525!" 

So erstellen Sie eine Batchdatei, die eine Zufallszahl zwischen 1 und 100 generiert:

 copy con sorandom.bat echo off set / a myrand =% RANDOM% * 100/32768 + 1 echo Die Zahl, an die ich dachte, war% myrand%. Hast du es richtig verstanden? 

Drücken Sie Strg + Z und Eingabe, um die Batchdatei zu speichern. Führen Sie dann die Datei aus:

 so zufällig 
 Ich dachte an die Nummer 91. Haben Sie es richtig verstanden? 

Windows PowerShell

Das Cmdlet Get-Random generiert eine Zufallszahl zwischen 0 und 2.147.483.647 (dem Maximalwert einer 32-Bit-Ganzzahl ohne Vorzeichen).

 Get-Random 
 1333190525 

Das Cmdlet umfasst eine Reihe von Optionen, beispielsweise einen Mindest- und einen Höchstwert. Die Werte werden abgerundet. Um eine Zahl zwischen 1 und 100 zu generieren, setzen Sie das Maximum auf 101:

 Get-Random -Minimum 1 -Maximum 101 
 99 

Microsoft Excel

In einer Excel-Kalkulationstabelle generiert die Formel = RAND () eine Zufallszahl zwischen 0 und 1. Wenn Sie beispielsweise eine Zelle markieren und = RAND () eingeben, enthält die Zelle eine Nummer, die sich bei jeder neuen Tabelle ändert -berechnet.

Diese Methode funktioniert auch in anderen Tabellenkalkulationsanwendungen, einschließlich LibreOffice Calc und Google Sheets.

In Programmiersprachen

Die meisten Programmiersprachen verfügen über eigene PRNG-Funktionen. Hier einige häufige Beispiele:

C

In der Programmiersprache C sind die PRNG-Funktionen in der Standardbibliothek stdlib definiert . Der übliche Weg, den Zufallsgenerator zu samen, ist mit der Funktion time (), die in time.h deklariert ist . Die generierte Anzahl liegt zwischen 0 und der Konstanten RAND_MAX, einer systemspezifischen Ganzzahl, die mindestens 32767 garantiert.

 #include #include #include void main () {srand (time (NULL)); / * den Generator säen * / int rand1 = rand (); / * eine pseudozufällige Ganzzahl zwischen 0 und RAND_MAX * / printf ("Zufallszahl zwischen 0 und% d:% d \ n", RAND_MAX, (int) rand1); / * Oder innerhalb eines bestimmten Bereichs: * / int min = 0; int max = 100; float rand2 = (float) rand () * max / RAND_MAX + 1; int round = (int) rand2; printf ("Zufallszahl zwischen% d und% d:% d (% f) \ n", min, max, rund, rand2); Rückkehr; } 

Ausgabe:

 Zufallszahl zwischen 0 und 2147483647: 1789080047 Zufallszahl zwischen 0 und 100: 74 (74.369179) 

C ++

In C ++:

 #include #include #include int main () {srand (time (NULL)); std :: cout << "Zufallszahl zwischen 0 und" << RAND_MAX << ":" << rand () << "\ n" << "Zufallszahl zwischen 1 und 100:" << (rand ()% 100) + 1 << std :: endl; 0 zurückgeben; } 

Ausgabe:

 Zufallszahl zwischen 0 und 2147483647: 126569208 Zufallszahl zwischen 1 und 100: 9 

Python 3

Das Zufallsmodul in Python bietet eine Vielzahl von Funktionen zum Erzeugen von Zufallszahlen. In diesem Beispiel verwenden wir drei verschiedene Methoden, um eine zufällige ganze Zahl in einem Bereich zu finden.

 zufällig von datetime importieren import datetime random.seed (datetime.now ()) print ("Zufallszahl im Bereich [0, 1):", random.random ()) # Innerhalb eines Bereichs. Diese machen dasselbe: print ("Zufallszahl zwischen 1 und 100:", rund (random.random () * 100) + 1) print ("Zufallszahl zwischen 1 und 100:"), random.randrange (1, 101)) drucken ("Zufallszahl zwischen 1 und 100:", Zufall.randint (1, 100)) 

Ausgabe:

 Zufallszahl im Bereich [0, 1): 0, 05137418896158319 Zufallszahl zwischen 1 und 100: 27 Zufallszahl zwischen 1 und 100: 80 Zufallszahl zwischen 1 und 100: 80 

Perl 5

In Perl:

 Srand (Zeit); # ändert sich einmal pro Sekunde print "Zufallszahl im Bereich [0, 1]:", rand (), "\ n"; print "Zufallszahl im Bereich [1, 100]:", int (rand (101)), "\ n"; 

Ausgabe:

 Zufallszahl im Bereich [0, 1): 0, 691379946963028 Zufallszahl im Bereich [0, 100]: 82 

JavaScript

 console.log ("Zufallszahl im Bereich [0, 1):" + Math.random ()); console.log ("Zufallszahl im Bereich [1.100]:" + Math.floor (Math.random () * 101)); 

Zeigen Sie die Ausgabe in der JavaScript-Konsole Ihres Webbrowsers an (beispielsweise drücken Sie in Firefox Strg + Umschalt + K ):

 Zufallszahl im Bereich [0, 1): 0, 305008216755414 Zufallszahl im Bereich [1, 100]: 8 

Hinweis: Es ist nicht möglich, die Math.random () - Funktion in JavaScript zu samen . Wenn Sie ein robustes PRNG in JavaScript benötigen, überprüfen Sie bessere Zufallszahlen für JavaScript in GitHub.

Beispiel PRNG: JavaScript-Widget

Mit dem folgenden Widget können Sie eine PRNG samen und zur Erzeugung von Zufallszahlen verwenden.

Jedes Mal, wenn Sie aus einem gegebenen Startwert eine Zufallszahl generieren, erhöht sich dessen Versatz um 1. Die erste aus dem Startwert generierte Zahl hat einen Offset von Null, der zweite hat einen Offset von 1 usw. Der Generator erzeugt immer die gleiche Anzahl für einen gegebenen Startwert und Offset .

Geben Sie alles, was Sie möchten, in das Feld ein, um einen eindeutigen Samen zu erstellen.

Verwenden Sie die Schaltfläche Generieren, um die nächste Zufallszahl mit diesem Startwert zu erhalten und den Versatz zu erhöhen.

Verwenden Sie die Reset-Taste, um den Offset auf Null zurückzusetzen.

Zahl, die aus Samen erzeugt wird :

Seed-Offset zurücksetzen (derzeit 0 )

Dieses Widget verwendet die Open-Source-PRNG-Skripts von Johannes Baagøe, Alea.js und Mash.js.

Computersicherheit, Programmierung, Softwarebedingungen