Ghid de securitate
Generarea parolelor pe partea clientului cu Web Crypto și eșantionarea prin respingere
O lucrare tehnică care explică modelul de generare a parolelor în browser al PwdGen, limitele entropiei, eșantionarea prin respingere și limitele de confidențialitate.
Rezumat
PwdGen utilizează o metodă de generare de referință pe partea clientului: browserul sau runtime-ul Web Crypto furnizează octeți aleatori, eșantionarea prin respingere mapează acești octeți la indici delimitați fără bias, iar o amestecare Fisher-Yates distribuie clasele de caractere necesare în parola finală. Metoda este intenționat mică, auditabilă și reproductibilă în aplicația web, adaptorul API, CLI și pachetul pwdgen-core pregătit.
Acest document descrie modelul de inginerie. Nu este o revendicare a unui nou primitiv criptografic, un standard formal sau un audit independent de la o terță parte.
Sursa de aleatorietate
Generatorul solicită valori aleatoare puternice din punct de vedere criptografic prin crypto.getRandomValues(). Se așteaptă ca implementările Web Crypto să utilizeze un generator de numere pseudo-aleatoare securizat criptografic, alimentat cu entropie de înaltă calitate furnizată de mediul gazdă. În practică, browserele delegă această responsabilitate facilităților sistemului de operare și furnizorilor criptografici ai platformei.
PwdGen nu susține că fiecare apel de generare a parolei eșantionează direct o sursă hardware de zgomot. Afirmația mai sigură și mai precisă este că browserul furnizează ieșirea CSPRNG prin API-ul Web Crypto, iar PwdGen evită interfețele pseudo-aleatoare non-criptografice.
De ce nu Math.random()
Math.random() nu este specificat pentru utilizări sensibile la securitate. Este potrivit pentru simulări, efecte vizuale și comportament UI aleatoriu obișnuit, dar nu oferă garanțiile așteptate pentru parole, coduri de resetare, chei de semnare sau alte acreditări.
PwdGen tratează revenirile pseudo-aleatoare nesigure ca o stare de eșec. Dacă Web Crypto nu este disponibil, generatorul ar trebui să afișeze o eroare de compatibilitate, mai degrabă decât să producă în tăcere acreditări slabe.
Eșantionarea prin respingere
Octeții și numerele întregi aleatoare sunt de obicei extrase dintr-un interval putere a lui doi. Alfabetele parolelor au rareori o dimensiune care să împartă exact acest interval. O operație directă de modulo poate face ca unele caractere să fie ușor mai probabile decât altele.
PwdGen utilizează eșantionarea prin respingere:
- Se extrage un număr întreg de 32 de biți fără semn.
- Se calculează cel mai mare multiplu al dimensiunii alfabetului care încape în intervalul de 32 de biți.
- Se resping valorile deasupra acelei limite.
- Se aplică modulo doar intervalului complet rămas.
Acest lucru menține selecția caracterelor delimitată uniformă fără a introduce un bias măsurabil de modulo.
Acoperirea caracterelor și entropia
Pentru politicile de parole configurate, generatorul selectează mai întâi un caracter din fiecare clasă activată, completează restul din alfabetul combinat și apoi amestecă rezultatul. Acest lucru ajută la îndeplinirea regulilor de parole ale destinației fără a plasa o clasă previzibilă într-o poziție previzibilă.
Estimarea teoretică a entropiei este:
bits = length × log2(uniqueAlphabetSize)
Această valoare este o limită superioară pentru alegeri uniform aleatoare din alfabetul configurat. Nu ține cont de reutilizarea parolelor, ieșirea editată de utilizator, dispozitive compromise, parole scurse sau stocare slabă de către serviciul de destinație.
Limita de confidențialitate
În instrumentele browserului, valorile generate rămân în memoria paginii și în câmpurile de rezultat vizibile până când utilizatorul le copiază sau le exportă. Generatoarele locale nu trimit parolele generate către serverele PwdGen, nu le pun în URL-uri și nu le scriu în evenimente de analiză.
Această limită nu protejează împotriva extensiilor de browser rău intenționate, managerilor de clipboard, compromiterii sistemului de operare, capturilor de ecran, paginilor de phishing sau a utilizatorului care lipește o parolă generată într-o destinație nesigură.
Implementare reproductibilă
Pachetul public pwdgen-cli și pachetul pregătit pwdgen-core există pentru a menține modelul de generare inspectabil în afara paginii web. Testele unitare acoperă includerea claselor de caractere, caracterele excluse, configurațiile invalide, formulele de entropie și absența căilor de cod pseudo-aleatoare nesigure.
Scopul nu este de a face din PwdGen un standard privat. Scopul este de a face implementarea suficient de mică pentru ca dezvoltatorii să o poată citi, testa și înlocui atunci când mediul lor necesită o limită de încredere diferită.