[ Înapoi la blog

Este corect generatorul tău de numere aleatorii? Lista de verificare practică a auditului

[Instrumente și corectitudine30 martie 2026·[ minute de citire]2] [Random number generator fairness audit

Când desfășurați o tombolă, alegeți echipe aleatoriu sau alocați sarcini prin tragere la sorți, corectitudinea nu este opțională - este esențialul. Dar „aleatoriu” nu înseamnă automat „corect”. Prejudecățile ascunse în generatoarele de numere aleatorii (RNG) pot denatura rezultatele în moduri care sunt invizibile, dacă nu știi unde să cauți.

Acest articol vă oferă o listă de verificare practică pentru a audita orice RNG pentru corectitudine, indiferent dacă utilizați Generatorul nostru de numere aleatoare sau vă construiți propriul dvs.

Ce înseamnă corectitudinea pentru extrageri în fața utilizatorului

[ RNG corect produce rezultate unde:

[
  • Uniformitate — fiecare rezultat are o probabilitate egală (pentru distribuții uniforme)
  • Independență — fiecare extragere nu este afectată de extragerile anterioare
  • Imprevizibilitate — niciun observator nu poate prezice următorul rezultat mai bine decât șansa
  • Verificabilitate — participanții pot confirma că procesul nu a fost manipulat
  • [

    Lipsa oricăreia dintre aceste rupturi de încredere, chiar dacă rezultatele se întâmplă să „arate” aleatoriu.

    [ comune de părtinire [ proaste

    Un PRNG (generator de numere pseudo-aleatorie) este la fel de imprevizibil ca și sămânța sa. Semințe comune dăunătoare:

    [ [Amprenta temporală curentă — previzibilă până la milisecundă; un atacator care știe aproximativ când se execută extragerea poate reproduce rezultatul
  • Contoare secvențiale — deloc aleatoare
  • [Introducerea utilizatorului — poate fi manipulată de către participanți [

    Întotdeauna generați dintr-o sursă criptografică: crypto.getRandomValues() în browsere, /dev/urandom pe Linux sau [ în Node.js.

    [ Bias

    O eroare subtilă și comună: folosirea operatorului modulo pentru a reduce un număr aleatoriu la un interval.

    // BIASED — dacă intervalul RNG nu este un multiplu de 6,
    // unele rezultate sunt puțin mai probabile
    const roll = randomUint32() % 6; // CORECT — eșantionare de respingere
    funcția fairDiceRoll() { const max = Math.floor(0xFFFFFFFF / 6) * 6; lasa valoare; do [ while (valoare >= max); valoarea de returnare % 6;
    [

    Pentru o matriță cu 6 fețe, polarizarea modulo cu un număr întreg de 32 de biți este de numai ~0,00000009%. Dar pentru intervale mai mari sau valori de 8 biți, aceasta devine semnificativă.

    [ ascunse

    Some draw systems silently exclude certain results (e.g., filtering out "recent winners" or rerolling results the operator doesn't like). Acest lucru încalcă corectitudinea chiar dacă RNG-ul de bază este perfect. Documentați și dezvăluiți orice reguli de filtrare înainte de extragere.

    [ de verificare a auditului pentru operatori [
  • Sursa de entropie — RNG este generat dintr-o sursă criptografică? (Nu Math.random, nu marcaje temporale)
  • [Test de uniformitate — Rulați peste 10.000 de mostre și aplicați un test chi-pătrat. valoarea p ar trebui să fie > 0,05
  • Modulo bias — Codul folosește eșantionarea de respingere sau o metodă de mapare imparțială?
  • [Independența — Sunt corelate extragerile secvențiale? Rulați un test de autocorelare pe seturi mari de mostre
  • Evaluarea codului — Codul de desenare este open source sau auditabil? Codul ascuns poate conține uși din spate
  • Filtrarea divulgării — Sunt rezultate filtrate, reluate sau excluse? Acest lucru trebuie dezvăluit
  • [Timing — Poate operatorul să vadă rezultatele înainte de a publica? Dacă da, pot elimina în mod selectiv extragerile nefavorabile [

    Model de transparență pentru tombolele publice

    Pentru extragerile cu mize mari (premii, sarcini, selecții), utilizați o schemă de dezvăluire-commit:

    [ [Înainte de extragere: Generați un seed aleatoriu. Publicați hash-ul SHA-256 („angajamentul”) – de exemplu, pe rețelele sociale sau într-un document marcat de timp
  • Desfășurați extragerea: Folosiți seed pentru a genera rezultate cu un algoritm determinist
  • [După tragere la sorți: Publicați seed. Oricine poate verifica că: