Hvordan Random Number Generators fungerer

Ikke all tilfeldighet er lik. Forskjellen mellom en pseudorandom nummergenerator og en kryptografisk sikker en bestemmer om mynten din flip, terningrulle eller navnedrag er virkelig rettferdig - eller stille forutsigbar.


Hva er en Random Number Generator?

En tilfeldig tallgenerator (RNG) er en algoritme eller maskinvareenhet som produserer en rekke tall uten noe tydelig mønster. Datamaskiner står overfor et grunnleggende problem her: De er deterministiske maskiner. På grunn av samme starttilstand vil en CPU alltid produsere samme utgang. Sann maskinvare tilfeldighet krever en ekstern kilde til uforutsigbarhet - kalt entropy - som termisk støy, disk timing variasjon, eller mus bevegelse.

Programvare RNGs løser dette ved enten å samle ekte entropy fra operativsystemet eller ved å bruke en matematisk formel for å simulere tilfeldighet. Disse to tilnærmingene gir svært forskjellige resultater.

Pseudo-tilfeldige tallgeneratorer (PRNG)

En pseudorandom nummergenerator (PRNG) starter fra intern tilstand og anvender en deterministisk algoritme for å produsere hvert påfølgende nummer. Utgangen kan se tilfeldig ut, men den samme starttilstanden produserer samme sekvens.

JavaScript's Matematikk.random() Bruker en implementering-definert PRNG. JavaScript-spesifikasjonen krever ikke en bestemt algoritme og gjør eksplisitt ikke utdatakryptografisk sikkert. Det er derfor upassende når det er uforutsigbarhet eller kontrollerbar rettferdighet.

For de fleste formål — animasjoner, omfavne en spilleliste, plukke en tilfeldig bakgrunnsfarge - dette spiller ingen rolle. Men for alt der rettferdighet er på spill (giver, team trekker, spillresultater), er forutsigbarhet et ekte problem.

Cryptografisk sikre PRNG (CSPRNG)

En kryptografisk sikker pseudo-random nummergenerator (CSPRNG) er designet slik at tidligere utganger ikke gjør fremtidige utganger praktisk talt forutsigbare. Sammenlignet med et generelt formål PRNG, gir det egenskaper som kreves av sikkerhetsfølsomme og rettferdighetsfølsomme applikasjoner:

  • Neste-bit uforutsigbarhet: Å vite et antall tidligere utganger gir ingen statistisk signifikant fordel ved å forutsi neste utgang.
  • Sterk plattform entropy: generatoren blir sådd og forfrisket av operativsystemet i stedet for å bruke tidsstempler eller andre lett gjettede verdier.

Nettlesere får kryptografiske sterke verdier fra operativsystemfasiliteter. De eksakte entropikildene og algoritmene er plattformdetaljer, så webapplikasjoner bør bruke Web Crypto API i stedet for å prøve å samle eller administrere entropy seg selv.

Web Crypto API: crypto.getRandomValues()

Nettlesere eksponerer CSPRNG funksjonalitet gjennom Web Crypto API. Nøkkelfunksjonen er crypto.getRandomValues(typedArray), som fyller en skriven rekke med kryptografisk tilfeldige byter som er fra OS-entropy-bassenget.

For å generere et utilsiktet heltall i et område, leser Randly en 32-bits verdi (eller kombinerer verdier for bredere sikkerhetsinteger-områder) og avviser den korte halen som ellers ville skape modulo bias:

funksjonen tilfeldigUint32() {

const array = ny Uint32Array (1);

crypto.getRomValues(array);

returarray[0]

}

funksjonen tilfeldigInt( min, max) {

const rekkevidde = max - min + 1;

const limit = Math. Floor(2 ** 32 / rekkevidde) * område;

la verdi;

gjøre verdi = tilfeldigUint32(); mens (verdi >= grense);

returmin + (verdi % område);

}

A Utendørs32Array gir 232 mulige verdier; Randly kombinerer 53 biter når et bredere trygt integer-område er nødvendig. Avvisningsprøvetaking sikrer hver utgang i det ønskede område tilsvarer det samme antall kildeverdier, så intet resultat mottar en større andel bare fordi det ønskede område ikke deler kildeområdet jevnt.

Hvorfor det spiller en rolle for rettferdighet

For de fleste casual bruk er forskjellen usynlig. Men se på en klasseromslærer som bruker en navnevelger til å ringe på studenter, eller en organisasjon som kjører en premiedragt. En generell formål PRNG er ikke spesifisert for adversariell bruk, mens en plattform CSPRNG er designet for å holde fremtidige verdier uforutsigbare. En revisjonsprosess er fortsatt hensiktsmessig for regulerte eller høyverditrekk.

Matematikk.random() (PRNG)

  • Deterministisk gitt frøet
  • Ingen kryptografisk garanti
  • • Rask — egnet for animasjoner og visuelle
  • • Ikke egnet for sikkerhet eller fair trekk

crypto.getRandomValues() (CSPRNG)

  • • Leveres av operativsystemet CSPRNG
  • • Designet for å motstå utgangsprediksjon
  • • Lett langsommere (kan ikke brukes til verktøy)
  • Passende primitive for sikker tilfeldighet

Slik bruker Randly tilfeldighet

Alle verktøy på Randly - terningruller, myntflips, navn picks, hjulspinn, fargegenerering - bruker crypto.getRandomValues() utelukkende. Implementasjonen bor i én delt modul (lib/random.ts) at eksportskrivede funksjoner: RandomInt( min, max), tilfeldigIndex( lengde), tilfeldigElement( array), og shuffleArray (array).

Ingen anrop til Matematikk.random() Finnes i enhver verktøylogikk. Den eneste plassen standard PRNG verdier vises er i Framer Motion animasjonsparametere (flytende element startposisjoner), som er rent kosmetiske og har ingen effekt på verktøyutfall.

Vanlige misforståelser

" Å klikke raskere gjør resultatet mer tilfeldig."

Timing av klikk har ingen effekt når du bruker en CSPRNG. Entropybassenget oppdateres kontinuerlig av OS uavhengig av brukerinteraksjon.

Å kjøre det samme verktøyet to ganger i rad gir korrelerte resultater."

Hver samtale til crypto.getRandomValues() er uavhengig. Tidligere resultater gir ingen informasjon om fremtidige.

En lengre liste betyr at noen på slutten er mindre sannsynlig å bli plukket."

Tilfeldig indeksvalg gir alle posisjoner lik 1/n sannsynlighet, uansett listelengde.


Prøv verktøyene

Alle Randly verktøy bruker kryptografisk sikker tilfeldighet. Ingen registrering nødvendig.

→ Tilfeldig navnevelger→ Dice Roller (d2–d100)- Coin Flip→ lykkehjul

Randly

Små verktøy for enklere valg.

Alle verktøyVeikartPersonvernVilkårKontaktLærHjelp

© 2026 Randly. Alle rettigheter forbeholdt.