Sikkerhedsguide
Klient-side passwordgenerering med Web Crypto og afvisningssampling
Et teknisk whitepaper, der forklarer PwdGens browserbaserede passwordgenereringsmodel, entropigrænser, afvisningssampling og privatlivsbegrænsninger.
Abstrakt
PwdGen bruger en klient-side referencegenereringsmetode: browser eller runtime Web Crypto leverer tilfældige bytes, afvisningssampling mapper disse bytes til upartiske afgrænsede indekser, og en Fisher-Yates-blanding fordeler påkrævede tegnklasser på tværs af det endelige password. Metoden er bevidst lille, reviderbar og reproducerbar på tværs af webappen, API-adapteren, CLI’en og den forberedte pwdgen-core-pakke.
Dette dokument beskriver ingeniørmodellen. Det er ikke et krav om en ny kryptografisk primitiv, en formel standard eller en uafhængig tredjepartsrevision.
Tilfældighedskilde
Generatoren anmoder om kryptografisk stærke tilfældige værdier gennem crypto.getRandomValues(). Web Crypto-implementeringer forventes at bruge en kryptografisk sikker pseudo-tilfældig talgenerator seedet med højkvalitetsentropi leveret af værtsmiljøet. I praksis delegerer browsere dette ansvar til operativsystemfaciliteter og platformskryptografiske udbydere.
PwdGen hævder ikke, at hvert passwordgenereringskald direkte sampler en hardware-støjkilde. Den sikrere og mere præcise udtalelse er, at browseren leverer CSPRNG-output gennem Web Crypto API’en, og at PwdGen undgår ikke-kryptografiske pseudo-tilfældige grænseflader.
Hvorfor ikke Math.random()
Math.random() er ikke specificeret til sikkerhedsfølsom brug. Det er velegnet til simuleringer, visuelle effekter og almindelig randomiseret UI-adfærd, men det giver ikke de garantier, der forventes til passwords, nulstillingskoder, signeringsnøgler eller andre legitimationsoplysninger.
PwdGen behandler usikre pseudo-tilfældige fallbacks som en fejltilstand. Hvis Web Crypto ikke er tilgængelig, bør generatoren vise en kompatibilitetsfejl i stedet for stille at producere svage legitimationsoplysninger.
Afvisningssampling
Tilfældige bytes og heltal trækkes normalt fra en potens-af-to-rækkevidde. Passwordalfabeter har sjældent en størrelse, der deler denne rækkevidde nøjagtigt. En direkte modulo-operation kan gøre nogle tegn lidt mere sandsynlige end andre.
PwdGen bruger afvisningssampling:
- Træk et 32-bit unsigned heltal.
- Beregn det største multiplum af alfabetstørrelsen, der passer inden for 32-bit-området.
- Afvis værdier over denne grænse.
- Anvend kun modulo på det resterende komplette område.
Dette holder afgrænset tegnvalg ensartet uden at introducere målbar modulo-bias.
Tegndækning og entropi
For konfigurerede passwordpolitikker vælger generatoren først ét tegn fra hver aktiveret klasse, udfylder resten fra det kombinerede alfabet og blander derefter resultatet. Dette hjælper med at opfylde destinationspasswordregler uden at placere en forudsigelig klasse på en forudsigelig position.
Det teoretiske entropiestimat er:
bits = length × log2(uniqueAlphabetSize)
Denne værdi er en øvre grænse for ensartet tilfældige valg fra det konfigurerede alfabet. Den tager ikke højde for passwordgenbrug, brugerediteret output, kompromitterede enheder, lækkede passwords eller svag lagring af destinationsservicen.
Privatlivsgrænse
I browsergrænsefladerne forbliver genererede værdier i sidens hukommelse og synlige resultatfelter, indtil brugeren kopierer eller eksporterer dem. De lokale generatorer sender ikke genererede passwords til PwdGen-servere, placerer dem i URL’er eller skriver dem i analysehændelser.
Denne grænse beskytter ikke mod ondsindede browserudvidelser, udklipsholdere, kompromittering af operativsystemet, skærmoptagelse, phishing-sider eller en bruger, der indsætter et genereret password i en usikker destination.
Reproducerbar implementering
Den offentlige pwdgen-cli-pakke og den forberedte pwdgen-core-pakke eksisterer for at holde genereringsmodellen inspicerbar uden for websiden. Enhedstests dækker tegnklasseinklusion, ekskluderede tegn, ugyldige konfigurationer, entropiformler og fraværet af usikre pseudo-tilfældige fallback-kodestier.
Målet er ikke at gøre PwdGen til en privat standard. Målet er at gøre implementeringen lille nok til, at udviklere kan læse, teste og erstatte den, når deres miljø kræver en anden tillidsgrænse.