Willekeurige nummer generator

Wanneer je iemand vraagt om een willekeurig getal tussen 1 en 10 te kiezen, is de kans groot dat ze 7 zeggen. Vraag hetzelfde aan tien mensen en de kans is nog groter dat je patronen gaat zien. Mensen zijn er nu eenmaal niet goed in om willekeurige keuzes te maken. We denken dat we willekeurig zijn, maar in werkelijkheid zoeken we (onbewust) balans, vermijden we extremen, of volgen we patronen die vertrouwd aanvoelen. Zelfs als we het niet willen, zit ons hoofd vol patronen en dat is eigenlijk maar goed ook. Maar als je écht willekeurigheid nodig hebt, bijvoorbeeld voor een simulatie, een loting, of een testsituatie, dan kom je met menselijke intuïtie niet ver. Onderstaande widget doet dit iets beter.

Dus dan maar een computer? Ja en nee. Computers zijn berucht om hun onvermogen om echt willekeurig te zijn. Alles wat ze doen is gebaseerd op logica en herhaling. Een gewone zogenaamde pseudo willekeurige nummer generator, zoals Math.random() in JavaScript, lijkt willekeurig te zijn maar is in feite een algoritme dat op basis van een beginwaarde de zo genoemde seed waaruit een voorspelbare reeks nummers uit gespuugd worden. Als je die seed kent dan kun je elke volgende uitkomst exact voorspellen. Handig voor games of animaties waar herhaalbaarheid nuttig is, maar waardeloos als je eerlijkheid en veiligheid nodig hebt.

Daarom gebruikt de widget hieronder een veiligere methode: window.crypto.getRandomValues(). Dit is onderdeel van de Web Crypto API en biedt toegang tot een cryptografisch veilige willekeurige nummer generator. De resultaten zijn veel minder voorspelbaar dan bij een pseudo willekeurige nummer generator, en dit is precies wat je wilt als het gaat om het eerlijk genereren van getallen voor bijvoorbeeld loterijen en beveiligingstoepassingen.

Maar waar haalt een computer dan wél zijn willekeurigheid vandaan? Daar komt entropie om de hoek kijken. Of te wel een verzameling van onvoorspelbare gegevens uit de echte wereld. Denk aan de beweging van je muis, het moment waarop je toetsen aanslaat, of zelfs subtiele fluctuaties in hardware zoals temperatuur of spanningsverschillen. Al die minuscule variaties voeden een systeem dat willekeurigheid probeert te benaderen. Grote techbedrijven gaan nog verder zo heeft Cloudflare een muur vol lavalampen die voortdurend wordt gefilmd. De onvoorspelbare bewegingen van het licht in de bubbels worden gebruikt als visuele ruisbron om cryptografisch veilige sleutels mee te genereren. Niet omdat het moet, maar omdat het kan en omdat het werkt.

Bovenstaande tool maakt gebruik van datzelfde soort beveiligde bron. Jij hoeft alleen maar een minimum, maximum en een gewenste hoeveelheid getallen op te geven. De widget doet de rest. Bijvoorbeeld kies een minimum van 10, een maximum van 50 en vraag 5 getallen aan. Je krijgt dan een lijst als: 27, 14, 49, 22, 33. Elk daarvan is apart gegenereerd, eerlijk verdeeld over het bereik, en cryptografisch niet te voorspellen. Maar omdat het dus volledig willekeurig is bestaat de kans ook dat je de lijst: 11, 12, 13, 14 en 15 krijgt. De kans is enorm klein, maar niet nul.

De gegenereerde getallen zijn hele getallen (integers) binnen het opgegeven bereik, inclusief de grenzen. Het algoritme werkt met een Uint32Array die gevuld wordt via crypto.getRandomValues(). Vervolgens wordt elk getal gemoduleerd naar het juiste bereik. Omdat dit proces onafhankelijk is per getal, kunnen er dubbelen voorkomen. Wil je unieke getallen? Dan zul je nog een stapje verder moeten met een algoritme dat ook duplicaten filtert deze tool richt zich op eenvoud en snelheid.

Link

Andere tools

Link

Gerelateerde tools

Widget gemaakt met staark