Este corect generatorul tău de numere aleatorii? Lista de verificare practică a auditului
[Instrumente și corectitudine30 martie 2026·[ minute de citire]2] [
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: [Lipsa oricăreia dintre aceste rupturi de încredere, chiar dacă rezultatele se întâmplă să „arate” aleatoriu.
[ comune de părtinire [ proasteUn 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Întotdeauna generați dintr-o sursă criptografică: crypto.getRandomValues() în browsere, /dev/urandom pe Linux sau [ în Node.js.
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ă.
[ ascunseSome 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 [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-
[ produce hashul publicat
- Algoritmul seed + produce rezultatele anunțate [ [
- Scrieți metoda RNG utilizată (de exemplu, „Web Crypto API”)
- Publicați algoritmul de desen (chiar și pseudocodul ajută)
- Utilizați commit-reveal pentru verificabilitate
- Înregistrați și publicați jurnalele de desenare cu marcaje temporale [ observatorilor independenți să verifice rezultatele [ [ frecvente [ este suficient de bun? [
- Generator de numere aleatorii — numere aleatoare criptografic corecte
- Hash Generator — creează hash-uri de angajament pentru extrageri verificabile
- De ce să folosiți un generator de PIN? — PIN-uri aleatorii securizate
- Lista de verificare a igienei digitale — practici generale de securitate [
Utilizați Generatorul nostru de hash pentru a crea și a verifica hash-ul de angajament.
[// Faza de angajament
const seed = crypto.randomBytes(32).toString('hex');
const angajament = sha256(seed); // publică acest lucru înainte de tragere la sorți // Faza de desen
rezultat const = deterministDraw(seed, participants); // Faza de dezvăluire
// publică semințele — oricine poate verifica sha256(seed) === angajament [ corectitudinii către utilizatori
[ necesită transparență. Când rulați extrageri publice:
[
Math.random() utilizează un generator de numere pseudo-aleatorie (PRNG) care nu este sigur din punct de vedere criptografic. Ieșirea sa poate fi prezisă dacă starea internă este cunoscută. Pentru extrageri corecte, utilizați crypto.getRandomValues() în browser sau crypto.randomInt() în Node.js.
Cum pot dovedi că o remiză nu a fost manipulată?
Utilizați o schemă de commit-reveal: înainte de tragere la sorți, publicați un hash al semințelor aleatorii (commitment). După extragere, dezvăluie sămânța. Oricine poate verifica dacă sămânța produce hash-ul publicat și rezultatele anunțate.
De câte mostre am nevoie pentru verificările de bază ale părtinirii?
Pentru o verificare simplă a uniformității pentru N rezultate, aveți nevoie de cel puțin 100 × N eșantioane (de exemplu, 1.000 de eșantioane pentru o extragere cu 10 opțiuni). Aplicați un test chi-pătrat: dacă valoarea p este peste 0,05, distribuția este relativ uniformă. Pentru audituri serioase, utilizați peste 10.000 de mostre.
[ [ și articole înrudite [