BrowserTools
Werbung
Startseite / Sonstiges / Zufallsauswahl: Liste, Münze, Würfel, Zahl

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?
Nein. Alles, was du in das Werkzeug eingibst, und jedes Ergebnis, das es erzeugt, existiert nur in deinem Browser-Tab. Es werden keine Daten über das Netzwerk übertragen, keine Listen in einer Datenbank gespeichert und keine Ergebnisse protokolliert. Das Schließen des Tabs verwirft alles dauerhaft.
Was ist der Unterschied zwischen Math.random() und crypto.getRandomValues()?
`Math.random()` verwendet einen Pseudozufallszahlengenerator, in modernen Engines typischerweise xorshift128+, der schnell ist, aber deterministisch initialisiert wird und nicht darauf ausgelegt ist, unvorhersehbar zu sein. `crypto.getRandomValues()` bezieht aus dem Entropie-Pool des Betriebssystems, der von Hardware-Rauschquellen gespeist wird, und ist so ausgelegt, dass eine Vorhersage rechnerisch undurchführbar ist. Dieses Werkzeug verwendet `crypto.getRandomValues()` für alle Zufallsauswahlen.
Wie funktioniert der Münzwurf? Ist er wirklich 50/50?
Ja. Der Münzwurf erzeugt ein einzelnes kryptografisch zufälliges Bit: eine zufällige 32-Bit-Ganzzahl aus `crypto.getRandomValues`, und prüft dann, ob sie gerade oder ungerade ist. Jeder Wurf ist völlig unabhängig von allen vorherigen Würfen, und die Wahrscheinlichkeit für Kopf oder Zahl beträgt bei jedem einzelnen Wurf genau 50 %, genau wie bei einer physischen Münze ohne Gedächtnis.
Kann ich das für eine faire Verlosung oder einen Wettbewerb verwenden?
Ja, und das ist einer der besten Anwendungsfälle. Gib alle Teilnehmernamen oder Ticketnummern in die Liste ein, eine pro Zeile, und wähle eine (oder mehrere ohne Zurücklegen) aus. Da der zugrunde liegende Generator kryptografisch sicher ist und in deinem Browser läuft, gibt es keinen Betreiber, der das Ergebnis beeinflussen kann. Für Ziehungen mit hoher Tragweite erwäge, den Bildschirm mit der Browser-Konsole aufzunehmen, die die rohen Zufallswerte anzeigt, um eine Prüfspur zu haben.
Kann ich mehrere Elemente aus einer Liste auswählen, ohne dasselbe Element zu wiederholen?
Ja. Stelle im Listenmodus den Zähler „N auswählen“ auf die Anzahl der benötigten Elemente und aktiviere die Option „Keine Wiederholungen“. Das Werkzeug führt ein Fisher-Yates-Mischen durch, das eine gleichmäßig zufällige Permutation erzeugt, und gibt die ersten N Elemente der gemischten Liste zurück. Jedes Element erscheint höchstens einmal im Ergebnis.
Wie funktioniert das Würfeln mit mehreren Würfeltypen?
Für jeden Würfel erzeugt das Werkzeug eine kryptografisch zufällige Ganzzahl im Bereich von 1 bis zur Augenzahl des Würfels (1d6 ergibt 1–6, 1d20 ergibt 1–20 und so weiter). Mehrere Würfel werden unabhängig geworfen und ihre Werte werden bei Bedarf summiert. Du kannst verschiedene Würfeltypen kombinieren, etwa 2d6 + 1d8, um die Mechanik bestimmter Pen-and-Paper-Rollenspielsysteme nachzubilden.
Eignet sich dieses Werkzeug zum Erzeugen von Zufallszahlen für kryptografische Zwecke?
Die Zufallswerte werden mit `crypto.getRandomValues` erzeugt, das kryptografisch sicher ist. Dieses Werkzeug ist jedoch für die nutzerorientierte Zufallsauswahl gedacht und gibt keine rohe Entropie oder Byte-Arrays aus. Zum Erzeugen kryptografischer Schlüssel, Nonces oder Tokens verwende eine dedizierte Schlüsselerzeugungsbibliothek oder ein entsprechendes Werkzeug, anstatt die hier angezeigten Zahlen abzulesen.
Was ist ein Fisher-Yates-Mischen und warum ist es wichtig?
Der Fisher-Yates-Algorithmus (auch Knuth-Mischen genannt) ist die Standardmethode, um eine gleichmäßig zufällige Permutation einer Liste zu erzeugen. Er durchläuft die Liste vom letzten zum ersten Element und vertauscht jedes Element mit einem zufällig gewählten Element an oder vor seiner aktuellen Position. Jede mögliche Anordnung der Liste ist gleich wahrscheinlich. Naive Mischalgorithmen, etwa das Sortieren nach Zufallsschlüsseln, erzeugen verzerrte Verteilungen, bei denen manche Anordnungen wahrscheinlicher sind als andere.
Kann ich ein zufälliges Element auswählen, bei dem verschiedene Elemente unterschiedliche Wahrscheinlichkeiten haben?
Dieses Werkzeug behandelt alle Listenelemente als gleich wahrscheinlich. Um gewichtete Wahrscheinlichkeiten zu simulieren, füge die Elemente mehrfach im Verhältnis zu ihrem gewünschten Gewicht zur Liste hinzu; soll zum Beispiel Element A doppelt so wahrscheinlich sein wie Element B, führe A zweimal und B einmal auf. Das entspricht einem System gewichteter Lotterielose und erfordert keine besonderen Funktionen des Werkzeugs.
Was passiert, wenn zwei Personen dieses Werkzeug gleichzeitig verwenden? Könnten sie dasselbe Ergebnis erhalten?
Ja, theoretisch. Jede Browserinstanz erzeugt ihre eigene unabhängige Zufallsfolge, ohne Koordination zwischen den Nutzern. Zwei Personen, die das Werkzeug gleichzeitig verwenden, könnten zufällig dasselbe Ergebnis erhalten, mit derselben Wahrscheinlichkeit wie jedes andere übereinstimmende Ergebnis. Für Ziehungen, bei denen Eindeutigkeit über mehrere gleichzeitige Nutzer hinweg erforderlich ist, etwa beim Zuweisen sich nicht überschneidender Zufalls-IDs, ist stattdessen ein serverkoordinierter Ansatz nötig.

Ü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.

Werbung
Werbung
Werbung