Wie Zufallszahlengeneratoren funktionieren

Nicht jede Zufälligkeit ist gleich. Der Unterschied zwischen einem Pseudo-Zufallszahlengenerator und einem kryptographisch sicheren bestimmt, ob Ihr Münzwurf, Würfelwurf oder Namensziehung wirklich fair oder leise vorhersehbar ist.


Was ist ein Zufallszahlengenerator?

Ein Zufallszahlengenerator (RNG) ist ein Algorithmus oder ein Hardwaregerät, das eine Folge von Zahlen ohne erkennbares Muster erzeugt. Computer stehen hier vor einem grundlegenden Problem: Sie sind deterministische Maschinen. Bei gleichem Ausgangszustand wird eine CPU immer den gleichen Ausgang erzeugen. Echte Hardware-Zufälligkeit erfordert eine externe Quelle der Unvorhersehbarkeit - Entropie genannt - wie thermisches Rauschen, Variation des Festplatten-Timings oder Mausbewegung.

Software-RNGs lösen dies, indem sie entweder echte Entropie aus dem Betriebssystem sammeln oder eine mathematische Formel verwenden, um Zufälligkeit zu simulieren. Diese beiden Ansätze führen zu sehr unterschiedlichen Ergebnissen.

Pseudozufallszahlengeneratoren (PRNG)

Ein Pseudo-Zufallszahlengenerator (PRNG) beginnt mit dem internen Zustand und wendet einen deterministischen Algorithmus an, um jede aufeinanderfolgende Zahl zu erzeugen. Die Ausgabe kann zufällig aussehen, aber der gleiche Anfangszustand erzeugt die gleiche Sequenz.

JavaScript Math.random() verwendet ein implementierungsdefiniertes PRNG. Die JavaScript-Spezifikation erfordert keinen bestimmten Algorithmus und macht die Ausgabe ausdrücklich nicht kryptographisch sicher. Es ist daher unangebracht, wenn Unvorhersehbarkeit oder überprüfbare Fairness von Bedeutung sind.

Für die meisten Zwecke - Animationen, Mischen einer Playlist, Auswahl einer zufälligen Hintergrundfarbe - spielt dies keine Rolle. Aber für alles, wo Fairness auf dem Spiel steht (Giveaways, Team Draws, Spielergebnisse), ist die Vorhersagbarkeit ein echtes Problem.

Kryptographisch sichere PRNGs (CSPRNG)

Ein kryptografisch sicherer Pseudozufallszahlengenerator (CSPRNG) ist so konzipiert, dass frühere Ausgänge zukünftige Ausgänge nicht praktisch vorhersehbar machen. Im Vergleich zu einem Allzweck-PRNG bietet es Eigenschaften, die für sicherheitssensible und fairnesssensible Anwendungen benötigt werden:

  • Next-Bit Unvorhersehbarkeit: Die Kenntnis einer beliebigen Anzahl früherer Ausgaben bietet keinen statistisch signifikanten Vorteil bei der Vorhersage der nächsten Ausgabe.
  • Starke Plattformentropie: Der Generator wird vom Betriebssystem anstelle von Anwendungszeitstempeln oder anderen leicht zu erratenden Werten ausgesät und aktualisiert.

Browser erhalten kryptografisch starke Werte von Betriebssystemeinrichtungen. Die genauen Entropiequellen und Algorithmen sind Plattformdetails, daher sollten Webanwendungen die Web Crypto API verwenden, anstatt zu versuchen, Entropie selbst zu sammeln oder zu verwalten.

Die Web Crypto API: crypto.getRandomValues()

Browser zeigen CSPRNG-Funktionalität durch die Web Crypto API. Die Schlüsselfunktion ist crypto.getRandomValues(typedArray), die ein typisiertes Array mit kryptografisch zufälligen Bytes aus dem OS-Entropiepool füllt.

Um eine unvoreingenommene Ganzzahl in einem Bereich zu erzeugen, liest Randly einen 32-Bit-Wert (oder kombiniert Werte für breitere sichere Ganzzahlbereiche) und lehnt den kurzen Tail ab, der sonst Modulo-Bias erzeugen würde:

Funktion randomUint32() {

const array = neues Uint32Array(1);

crypto.getRandomValues(array);

Return Array[0];

}

Funktion randomInt(min, max) {

const range = max - min + 1;

const limit = Math.floor(2 ** 32 / range) * range;

let value;

do value = randomUint32(); while (value >= limit);

Rückgabe min + (Wert-%-Bereich);

}

A Uint32Array liefert 232 mögliche Werte; Randly kombiniert 53 Bits, wenn ein breiterer Safe-Integer-Bereich benötigt wird. Rejection Sampling stellt sicher, dass jede Ausgabe im angeforderten Bereich der gleichen Anzahl von Quellwerten entspricht, so dass kein Ergebnis einen größeren Anteil erhält, nur weil der angeforderte Bereich den Quellbereich nicht gleichmäßig teilt.

Warum es für Fairness wichtig ist

Für die meisten Gelegenheitsanwendungen ist die Unterscheidung unsichtbar. Betrachten Sie jedoch einen Klassenlehrer, der einen Namensgeber verwendet, um Schüler anzurufen, oder eine Organisation, die eine Preisverlosung durchführt. Ein Allzweck-PRNG ist nicht für den kontradiktorischen Einsatz spezifiziert, während eine Plattform CSPRNG so konzipiert ist, dass zukünftige Werte unvorhersehbar bleiben. Ein geprüfter Prozess ist immer noch für regulierte oder hochwertige Ziehungen geeignet.

Math.random() (PRNG)

  • • Deterministisch angesichts des Saatguts
  • • Keine kryptographische Unberechenbarkeitsgarantie
  • • Schnell – geeignet für Animationen und Visuals
  • • Nicht geeignet für Sicherheit oder faire Ziehungen

crypto.getRandomValues() (CSPRNG)

  • • Geliefert durch das Betriebssystem CSPRNG
  • • Entwickelt, um Output-Vorhersage zu widerstehen
  • • Etwas langsamer (vernachlässigbar für den Werkzeuggebrauch)
  • • Geeignete Primitive für sichere Zufälligkeit

Wie Randly Zufall nutzt

Jedes Werkzeug auf Randly - Würfelrollen, Münzwürfe, Namensauswahlen, Raddrehungen, Farberzeugung - verwendet crypto.getRandomValues() ausschließlich. Die Implementierung lebt in einem einzigen gemeinsamen Modul ()lib/random.ts), die typisierte Funktionen exportiert: randomInt(min, max), randomIndex(Länge), randomElement(array), und shuffleArray(array).

Kein Anruf Math.random() existiert in jeder Werkzeuglogik. Standard-PRNG-Werte erscheinen nur in Framer Motion-Animationsparametern (Floating-Element-Startpositionen), die rein kosmetisch sind und keinen Einfluss auf die Werkzeugergebnisse haben.

Häufige Missverständnisse

"Ein schnelleres Klicken macht das Ergebnis zufälliger."

Das Timing Ihres Klicks hat keine Auswirkungen bei der Verwendung eines CSPRNG. Der Entropie-Pool wird vom Betriebssystem unabhängig von der Benutzerinteraktion ständig aktualisiert.

"Das Ausführen des gleichen Tools zweimal hintereinander liefert korrelierte Ergebnisse."

Jeder Aufruf an crypto.getRandomValues() ist unabhängig. Frühere Ausgaben liefern keine Informationen über zukünftige.

"Eine längere Liste bedeutet, dass jemand am Ende weniger wahrscheinlich ausgewählt wird."

Die Auswahl des Zufallsindex gibt jeder Position eine gleiche Wahrscheinlichkeit von 1/n, unabhängig von der Listenlänge.


Versuchen Sie die Tools

Alle Randly-Tools verwenden kryptografisch sichere Zufälligkeit. Keine Anmeldung erforderlich.

→ Zufällige Namensauswahl→ Würfelrolle (d2–d100)Coin Flip→ Glücksrad

Randly

Kleine Werkzeuge für leichtere Entscheidungen.

Alle WerkzeugeRoadmapDatenschutzBedingungenKontaktLernenHilfe

© 2026 Randly. Alle Rechte vorbehalten.