„Zufällig“ ist leicht zu erfragen und überraschend leicht falsch zu verstehen. Der Unterschied zwischen einem Generator, dem Sie bei einer Verlosung vertrauen können, und einem, der stillschweigend bestimmte Zahlen bevorzugt, hängt von einigen Ideen ab: Woher kommt die Zufälligkeit, wie wird sie auf Ihr Sortiment abgebildet und ob die Auslosung unvorhersehbar oder reproduzierbar sein soll. Dieser Generator basiert auf diesen Unterscheidungen – standardmäßig kryptografisch sicher, konstruktionsunabhängig und mit einem optionalen Startwert-Modus für den Fall, dass Wiederholbarkeit wichtiger ist als Geheimhaltung. In den folgenden Abschnitten wird erklärt, was unter der Haube passiert und wie man die richtigen Einstellungen wählt.
Echter Zufall vs. Pseudozufall
Es gibt zwei Familien von Zufälligkeiten. Ein echter (oder Hardware-)Zufallszahlengenerator zieht Unvorhersehbarkeit aus einem physikalischen Prozess – elektrisches Rauschen, Zeitschwankungen, radioaktiver Zerfall. Ein Pseudozufallsgenerator (PRNG) führt eine deterministische Formel ausgehend von einem Startwert aus; Die Ausgabe sieht zufällig aus und besteht statistische Tests, aber die gesamte Sequenz ist festgelegt, sobald Sie den Startwert kennen.
Ihr Browser verbindet die beiden. crypto.getRandomValues – die Quelle, die dieses Tool standardmäßig verwendet – ist ein kryptografisch sicheres PRNG, das kontinuierlich aus dem Hardware-Entropiepool des Betriebssystems neu initialisiert wird. Aus praktischen Gründen ist seine Ausgabe unvorhersehbar und unvoreingenommen, weshalb es das richtige Werkzeug für Gewinnspiele, Sicherheitstoken und alles ist, wo jemand davon profitieren könnte, den nächsten Wert zu erraten. Das ältere Math.random ist ein einfaches PRNG ohne Sicherheitsgarantien und wird hier bewusst nicht verwendet.
Modulo-Bias und warum Ablehnungsstichproben das Problem beheben
Dies ist der Fehler, den die meisten selbst erstellten Zufallscodes machen. Um eine große Zufallszahl beispielsweise in eine Zahl von 1 bis 6 umzuwandeln, ist der naheliegende Schritt der Rest: 1 + (x mod 6). Das Problem besteht darin, dass die Quelle 2³² mögliche Werte hat und 2³² nicht durch 6 teilbar ist. Die verbleibenden Werte an der Spitze des Bereichs laufen umher und landen auf den ersten paar Ergebnissen, wodurch 1, 2, 3 und 4 etwas wahrscheinlicher sind als 5 und 6. Bei einem sechsseitigen Würfel ist die Abweichung gering; Bei einem großen Bereich oder über Millionen von Ziehungen wird es messbar – und in Sicherheitskontexten ist es eine echte Schwäche.
Die Lösung ist die Ablehnungsstichprobe: Berechnen Sie das größte Vielfache Ihres Bereichs, das in 2³² passt, zeichnen Sie Rohwerte und werfen Sie alle Werte weg, die im verbleibenden Eimer landen, bevor Sie den Rest nehmen. Ein paar Ziehungen werden verworfen, aber am Ende ist jede Ganzzahl in Ihrem Bereich genau gleich wahrscheinlich. Dieser Generator macht das für jede ganze Zahl, die er erzeugt, also ist „1–6“ wirklich ein fairer Würfel und „1–10.000“ wirklich einheitlich.
Einzigartige vs. sich wiederholende und faire Lotterietipps
Ziehungen mit „Wiederholungen zulassen“ mit Ersatz: Jeder Tipp ist unabhängig, sodass die gleiche Zahl mehr als einmal auftauchen kann – das richtige Modell für Würfel- und Münzwürfe. „Einzigartige“ Ziehungen ohne Ersatz: Jeder Wert erscheint höchstens einmal, was Sie für eine Tombola, eine Teamauswahl oder eine Lotterielinie wünschen. Wenn Sie nach eindeutigen Werten fragen, mischt der Generator den in Frage kommenden Pool mit einer teilweisen Fisher-Yates-Mischung und nimmt das erste k, wodurch jede Kombination gleichwahrscheinlich bleibt und garantiert wird, dass es keine Duplikate gibt.
Hier sind zwei Leitplanken wichtig. Sie können nicht mehr eindeutige Werte zeichnen, als der Bereich enthält – es ist unmöglich, nach 10 eindeutigen Zahlen von 1–6 zu fragen, daher zeichnet das Tool so viele wie möglich und warnt Sie. Und die Ausschlussliste entfernt vor der Ziehung bestimmte Werte (einen bereits gezogenen Gewinner, eine unglückliche 13) aus dem Pool, wodurch auch der eindeutige Pool verkleinert wird.
Wann sollte ein Saatgut verwendet werden (Reproduzierbarkeit)
Meistens möchten Sie Zufälligkeiten, die Sie nicht vorhersagen können, daher ist der standardmäßige kryptosichere Modus korrekt. Aber manchmal möchte man das Gegenteil: eine Auslosung, die man bei Bedarf wiederholen kann. Dafür ist der Startwert da. Im Startwertmodus stammen die Zahlen von mulberry32, einem deterministischen PRNG, und derselbe Startwert mit den gleichen Einstellungen erzeugt immer die gleichen Zahlen.
Das ist wirklich nützlich. Ein Forscher kann das Saatgut zusammen mit einer Studie veröffentlichen, sodass die Zufallsstichprobe reproduzierbar ist. Ein Verlosungsveranstalter kann den Startwert im Voraus bekannt geben, sodass die Teilnehmer die Ziehung anschließend überprüfen können, anstatt ihr zu vertrauen. Ein Entwickler kann Testdaten bereitstellen, sodass fehlgeschlagene Tests wiederholbar sind. Der Nachteil besteht darin, dass eine Startwert-Sequenz von Natur aus für jeden vorhersehbar ist, der den Startwert kennt. Verwenden Sie daher niemals den Startwert-Modus, um Passwörter, Schlüssel oder andere Dinge zu generieren, die geheim bleiben müssen.
Ist es fair? Lesen der Verteilung
„Ist das tatsächlich zufällig?“ ist eine berechtigte Frage, und die Registerkarte „Statistiken“ dient zur Beantwortung dieser Frage. Bei einer einzelnen kleinen Ziehung kann man nicht viel sagen – fünf Zahlen von 1–100 scheinen nicht gleichmäßig verteilt zu sein, und das ist normal; Wahre Zufälligkeit ist klumpig, nicht ordentlich. Das Muster tritt erst im Maßstab hervor. Werfen Sie ein paar hundert Mal einen Würfel oder erzeugen Sie eine große Stichprobe, und die Häufigkeitsbalken werden auf gleiche Höhen abgeflacht, was das visuelle Zeichen einer gleichmäßigen Verteilung ist.
Dies ist auch das Gegenmittel zum Trugschluss des Spielers. Eine Folge von fünf Würfen führt nicht dazu, dass Zahl „fällig“ ist – jeder Wurf ist unabhängig und bleibt 50/50, und die laufende Zählung tendiert einfach in Richtung 50 %, wenn die Anzahl der Würfe zunimmt (das Gesetz der großen Zahlen), ohne dass ein einzelner Wurf von den vorangegangenen Würfen beeinflusst wird.