Hoe je eerlijk een winnaar kiest voor een weggeefactie en je werkwijze laat zien
Om eerlijk een winnaar te kiezen, gebruik je een generator die voor beveiliging is gemaakt, geef je elke deelnemer dezelfde kans en laat je achteraf mensen het resultaat controleren. De meeste oneerlijkheid in een eenvoudige kiezer komt uit een van twee bronnen: een zwakke bron van willekeur, of een kleine rekenfout die modulo-bias heet. Beide zijn op te lossen. Een gepubliceerde lijst met deelnemers en een verslag van de trekking zijn het beste bewijs dat niemand de winnaar heeft uitgekozen.
Willekeurige kiezerEerlijk een winnaar kiezenGratis doenEchte en pseudo-willekeurige getallen
Een echte willekeurige bron haalt zijn onvoorspelbaarheid uit een fysiek proces, zoals elektronische ruis. Een pseudo-willekeurige generator is een formule. Hij begint met een startwaarde (seed), voert vaste stappen uit en levert een reeks op die er willekeurig uitziet. De reeks ligt volledig vast door de startwaarde, dus wie de startwaarde en de formule kent, kan elk getal voorspellen.
De meeste software gebruikt pseudo-willekeurige generators, en dat is prima om een afspeellijst door elkaar te husselen of een spelniveau willekeurig te maken. Bij een trekking waar mensen iets te winnen hebben, is de vraag of iemand de uitkomst kan voorspellen of beïnvloeden. Een generator die snel is maar voorspelbaar, is dan het verkeerde hulpmiddel.
Gebruik de cryptografische generator van de browser
In JavaScript is Math.random() een snelle pseudo-willekeurige generator. In de documentatie staat dat hij niet geschikt is voor cryptografie, en een prijstrekking is een keuze waarbij veiligheid telt. De Web Crypto-functie crypto.getRandomValues() vult een array met waarden uit de cryptografische bron van het besturingssysteem. Die moet je gebruiken. De Willekeurige kiezer gebruikt die functie bij elke keuze, ook bij munten opgooien en dobbelen. Een kiezer die niet vertelt wat hij gebruikt, is lastiger te vertrouwen, dus vraag het na voordat je erop vertrouwt.
Modulo-bias, met één voorbeeld
Stel dat je bron een willekeurige byte geeft, een geheel getal van 0 tot en met 255, en dat je één van drie deelnemers wilt kiezen. De makkelijke route is de rest nemen bij deling door 3. Dat lijkt eerlijk, maar 256 is niet gelijk deelbaar door drie.
- De waarden 0, 3, 6 enzovoort tot en met 255 geven rest 0. Dat zijn er 86.
- Waarden met rest 1 zijn er 85, en waarden met rest 2 zijn er ook 85.
Deelnemer 0 komt dus 86 keer voor op 256, ongeveer 33,6%, terwijl deelnemers 1 en 2 elk 85 keer voorkomen, ongeveer 33,2%. Het verschil is klein, maar wel reëel, en het wordt groter naarmate het aantal deelnemers groot is ten opzichte van het bereik van de bron.
De oplossing is rejection sampling. Trek een waarde, en valt die in het oneven overgebleven deel, trek dan opnieuw. Bij het byte-voorbeeld verwerp je 255 en accepteer je alleen 0 tot en met 254, wat gelijk deelbaar is door drie. Met een willekeurig getal van 32 bits is het overblijvende deel ongeveer één waarde op 4,3 miljard, dus de bias is voor een weggeefactie verwaarloosbaar. Een zorgvuldige kiezer lost dit toch op, omdat dezelfde fout erger wordt naarmate het bereik kleiner wordt.
Trekkingen zonder herhalingen
Als je meerdere winnaars nodig hebt, kan het trekken van een willekeurige index drie keer dezelfde deelnemer opleveren. Twee nette methodes voorkomen dat:
- Verwijder elke winnaar uit de lijst en trek daarna opnieuw uit de rest.
- Schud de hele lijst één keer met de Fisher–Yates-methode en neem de winnaars van bovenaf.
Fisher–Yates loopt de lijst van achteren af, wisselt elke positie met een willekeurig gekozen positie op of vóór die plek, en levert elke volgorde met gelijke kans op als de willekeurige keuzes eerlijk zijn. De methode is kort, goed begrepen en makkelijk uit te leggen aan deelnemers. De opties Winnaars verwijderen en Geen herhalingen van de kiezer ondersteunen beide methodes.
Maak de trekking controleerbaar
Een eerlijke trekking is er één die iedereen kan nagaan. Doe vóór de trekking het volgende:
- Publiceer de deelnemers als genummerde lijst, samen met de regels over wie in aanmerking kwam.
- Publiceer een SHA-256-vingerafdruk van die lijst. Elke SHA-256-tool kan er een maken, zoals de hashgenerator. Een vingerafdruk verandert volledig als er één deelnemer wijzigt, dus de lijst kan achteraf niet stilletjes worden aangepast. Dezelfde controle bevestigt downloads; hoe je de SHA-256-checksum van een download controleert laat de stappen zien.
Tijdens en na de trekking doe je dit:
- Neem het scherm op vanaf het moment dat je de kiezer start tot het getoonde resultaat.
- Publiceer de definitieve lijst met het winnende nummer, zodat mensen de vingerafdruk opnieuw kunnen berekenen en kunnen zien dat er niets is veranderd.
- Vertel hoe de winnaar is gekozen, bijvoorbeeld „gekozen met een kiezer in de browser die de cryptografische willekeurige bron van het besturingssysteem gebruikt”.
Regels voor weggeefacties verschillen per platform, en prijstrekkingen kunnen wettelijke eisen hebben die afhangen van waar je woont. Controleer de promotieregels van het platform en je lokale wetgeving voordat je een actie start. Dit is algemene informatie, geen juridisch advies. Als je klaar bent, kies een winnaar met de Willekeurige kiezer.
Zo doe je het met fixmint
- Kies Namen en plak de deelnemers in Namen, één per regel.
- Zet Winnaars op het aantal prijzen. Vink Winnaars uit de lijst verwijderen aan, zodat niemand twee keer kan winnen.
- Voor een getalstrekking kies je Getal, stel je Kleinste en Grootste in, en vink je Geen herhalingen aan als elk getal maar één keer mag winnen.
- Klik op Winnaars kiezen terwijl je schermopname al vanaf het begin loopt.
- Publiceer de genummerde deelnemers, de SHA-256-vingerafdruk, de winnende deelnemer en hoe je de kiezer hebt gebruikt.
Korte antwoorden
Is Math.random() prima voor een weggeefactie?
Voor spellen en husselen wel, maar niet voor een trekking die mensen gaan controleren, omdat de uitkomst voorspelbaar is. Gebruik een cryptografische bron.
Waarom niet gewoon een willekeurig getal nemen modulo het aantal deelnemers?
Als het bereik niet gelijk deelbaar is, is de rest ongelijk verdeeld, waardoor sommige deelnemers iets meer kans hebben. Rejection sampling haalt die bias weg.
Kan ik meerdere winnaars uit één trekking kiezen?
Ja. Verwijder elke winnaar voordat je de volgende kiest, of schud één keer en neem de bovenste deelnemers. In beide gevallen kan niemand twee keer winnen.
Vertaald uit de Engels origineel met hulp van AI.
Reacties
Nog geen reacties. Wees de eerste.


