Zufallsauswahl: Liste, Münze, Würfel, Zahl
Wähle ein zufälliges Element aus einer Liste, wirf eine Münze, würfle oder erzeuge eine Zufallszahl.
Zufallsauswahl: Liste, Münze, Würfel, Zahl wird geladen… Wenn nichts passiert, aktiviere JavaScript.
Echte Zufälligkeit ist mit einem Computer überraschend schwer zu erreichen. Computer sind deterministische Maschinen: Bei gleichem Ausgangszustand erzeugen sie dieselbe Ausgabe. Frühe Zufallszahlengeneratoren für Spiele und Simulationen verwendeten mathematische Formeln, typischerweise lineare Kongruenzgeneratoren, die Folgen erzeugen, die zufällig wirken, aber völlig vorhersehbar sind, wenn man den Startwert (Seed) und den Algorithmus kennt. Diese Unterscheidung zwischen echter Zufälligkeit und Pseudozufälligkeit ist in Bereichen wie der Kryptografie enorm wichtig, wo eine vorhersehbare Folge ausgenutzt werden kann, aber auch bei fairen Ziehungen, Verlosungen und Spielen, bei denen überprüfbare Unvorhersehbarkeit Teil des sozialen Vertrags ist.
Häufig gestellte Fragen
Werden meine Listen oder Ergebnisse gespeichert oder an einen Server gesendet?
Was ist der Unterschied zwischen Math.random() und crypto.getRandomValues()?
Wie funktioniert der Münzwurf? Ist er wirklich 50/50?
Kann ich das für eine faire Verlosung oder einen Wettbewerb verwenden?
Kann ich mehrere Elemente aus einer Liste auswählen, ohne dasselbe Element zu wiederholen?
Wie funktioniert das Würfeln mit mehreren Würfeltypen?
Eignet sich dieses Werkzeug zum Erzeugen von Zufallszahlen für kryptografische Zwecke?
Was ist ein Fisher-Yates-Mischen und warum ist es wichtig?
Kann ich ein zufälliges Element auswählen, bei dem verschiedene Elemente unterschiedliche Wahrscheinlichkeiten haben?
Was passiert, wenn zwei Personen dieses Werkzeug gleichzeitig verwenden? Könnten sie dasselbe Ergebnis erhalten?
Über Zufallsauswahl: Liste, Münze, Würfel, Zahl
Der Bedarf, zufällig auszuwählen, kommt im Alltag und in technischen Zusammenhängen ständig vor. Lehrer nutzen Zufallsauswahlen, um Schüler aufzurufen, ohne jemanden zu bevorzugen. Verlosungsorganisatoren ziehen Preisgewinner aus langen Teilnehmerlisten. Spielleiter würfeln, um die Ergebnisse von Pen-and-Paper-Rollenspielen zu bestimmen. Entwickler müssen Testnutzer zufällig den Kohorten eines A/B-Experiments zuweisen, Daten-Arrays mischen oder zufällige Stichproben-Datensätze erzeugen. Entscheidungsträger nutzen Münzwürfe und Zufallszahlengeneratoren, um Gleichstände aufzulösen oder gezielt Variabilität in Prozesse einzubringen, die sonst systematische Verzerrungen entwickeln könnten. Sportligen verwenden zufällige Auslosungen, um Turnierbäume und Begegnungen festzulegen.
Dieses Werkzeug verwendet `crypto.getRandomValues`, denselben kryptografisch sicheren Pseudozufallszahlengenerator (CSPRNG), den Browser für TLS-Schlüsselmaterial und die Passworterzeugung nutzen. Anders als `Math.random()`, das einen nicht gezielt initialisierten Algorithmus verwendet, der sich aus beobachteter Ausgabe vorhersagen lässt und ausdrücklich nicht für Sicherheitszwecke geeignet ist, bezieht `crypto.getRandomValues` seine Entropie aus den Hardware-Rauschquellen des Betriebssystems: Interrupt-Timing, thermisches Rauschen und andere unvorhersehbare physikalische Phänomene. Das bedeutet, dass jede Auswahl unabhängig von allen vorherigen Auswahlen ist und nicht vorhergesagt oder rückgängig gemacht werden kann. Alles läuft im Browser, kein Server ist beteiligt, und es werden keine Listen oder Ergebnisse gespeichert.
Einige praktische Hinweise: Beim Auswählen mehrerer Elemente aus einer Liste ohne Zurücklegen (jedes Element kann nur einmal gewählt werden) führt das Werkzeug ein Fisher-Yates-Mischen der Liste durch und gibt die ersten N Elemente zurück. Das entspricht mathematisch dem Hineinlegen von Namen in einen Hut und dem einzelnen Ziehen. Für Würfelwürfe kannst du mehrere Würfeltypen kombinieren, 1d6 + 1d20 + 2d8, um die Mechanik von Pen-and-Paper-Rollenspielen nachzubilden. Bei Zahlenbereichen sind die Endpunkte auf beiden Seiten eingeschlossen. Wenn du eine gewichtete Zufallsziehung möchtest, bei der manche Elemente wahrscheinlicher sind als andere, dupliziere diese Elemente in deiner Liste anteilig, bevor du die Auswahl startest.
Vom Knochenwurf zum Quantenrauschen: fünf Jahrtausende des Versuchs, Zufall zu erzeugen
Menschen suchen nach zuverlässigem Zufall, seit sie faire Entscheidungen treffen, Erbschaften aufteilen oder das Göttliche befragen mussten. Die ältesten bekannten Zufallsgeräte sind Astragali (Knöchelchen), die Sprunggelenkknochen von Schafen, die schon um 3000 v. Chr. in Mesopotamien und Ägypten als Würfel verwendet wurden. Die römische Praxis des Losens (sortes) nutzte Kieselsteine, Tonscherben oder Holzmarken, die aus einem Behälter gezogen wurden. Julius Cäsar soll Streitigkeiten durch das Los beigelegt haben, und das Wort „Lotterie“ selbst leitet sich vom altfranzösischen „lot“ ab, das Schicksal oder Anteil bedeutet.
Der erste algorithmische Zufallszahlengenerator wurde 1946 von John von Neumann als die Mittquadratmethode veröffentlicht: Man nimmt eine Zahl, quadriert sie, entnimmt die mittleren Ziffern und wiederholt das. Von Neumann selbst machte sich keine Illusionen; er merkte an, dass sich jeder, der arithmetische Methoden zur Erzeugung von Zufallszahlen verwendet, im Zustand der Sünde befindet. Die Methode war deterministisch und wurde schnell periodisch, indem sie ihre Folge nach einigen hundert Iterationen wiederholte. Lineare Kongruenzgeneratoren (LCGs), im selben Jahr formal von D. H. Lehmer eingeführt, waren robuster und blieben in Sprachen wie dem `rand()` von C jahrzehntelang der Standard.
Die Erkenntnis, dass deterministische Pseudozufälligkeit grundsätzlich ungeeignet für die Kryptografie ist, trieb die Entwicklung von Hardware-Zufallszahlengeneratoren (HRNGs) und später der Entropie-Pools auf Betriebssystemebene voran, die heute `crypto.getRandomValues()` zugrunde liegen. Die in der Mitte der 1990er-Jahre eingeführten `/dev/random` und `/dev/urandom` von Linux sammeln Entropie aus Tastatur-Timing, Festplatten-Suchzeiten und Netzwerk-Interrupts. Moderne CPUs enthalten dedizierte Hardware-Befehle, Intels RDRAND und das Pendant von AMD, die das thermische Rauschen in Transistoren messen, um echte Zufallsbits mit Gigabit-Geschwindigkeit zu erzeugen. Was von Neumann als Sünde beschrieb, wurde durch die Quantenphysik ersetzt.