Säkerhetsguide
Lösenordsgenerering på klientsidan med Web Crypto och rejectionssampling
En teknisk whitepaper som förklarar PwdGens lösenordsgenereringsmodell på webbläsarsidan, entropigränser, rejectionssampling och integritetsbegränsningar.
Sammanfattning
PwdGen använder en referensgenereringsmetod på klientsidan: webbläsarens eller körningens Web Crypto tillhandahåller slumpmässiga byte, rejectionssampling mappar dessa byte till opartiska begränsade index, och en Fisher-Yates-blandning fördelar nödvändiga teckenklasser över det slutliga lösenordet. Metoden är avsiktligt liten, granskningsbar och reproducerbar över webbappen, API-adaptern, CLI och det förberedda pwdgen-core-paketet.
Detta dokument beskriver den tekniska modellen. Det är inte ett påstående om en ny kryptografisk primitiv, en formell standard eller en oberoende tredjepartsgranskning.
Slumpkälla
Generatorn begär kryptografiskt starka slumpvärden via crypto.getRandomValues(). Web Crypto-implementationer förväntas använda en kryptografiskt säker pseudoslumptalsgenerator som matas med högkvalitativ entropi från värdmiljön. I praktiken delegerar webbläsare detta ansvar till operativsystemets funktioner och plattformens kryptografiska leverantörer.
PwdGen påstår inte att varje lösenordsgenereringsanrop direkt samplar en hårdvarubruskälla. Det säkrare och mer korrekta uttalandet är att webbläsaren levererar CSPRNG-utdata via Web Crypto API, och att PwdGen undviker icke-kryptografiska pseudoslumpgränssnitt.
Varför inte Math.random()
Math.random() är inte specificerat för säkerhetskänslig användning. Det är lämpligt för simuleringar, visuella effekter och vanligt slumpmässigt UI-beteende, men det ger inte de garantier som förväntas för lösenord, återställningskoder, signeringsnycklar eller andra autentiseringsuppgifter.
PwdGen behandlar osäkra pseudoslumpalternativ som ett feltillstånd. Om Web Crypto inte är tillgängligt bör generatorn visa ett kompatibilitetsfel snarare än att tyst producera svaga autentiseringsuppgifter.
Rejectionssampling
Slumpmässiga byte och heltal dras vanligtvis från ett intervall som är en potens av två. Lösenordsalfabet har sällan en storlek som delar detta intervall exakt. En direkt modulo-operation kan göra vissa tecken något mer sannolika än andra.
PwdGen använder rejectionssampling:
- Dra ett 32-bitars osignerat heltal.
- Beräkna den största multipeln av alfabetsstorleken som ryms inom 32-bitarsintervallet.
- Avvisa värden över den gränsen.
- Tillämpa modulo endast på det återstående fullständiga intervallet.
Detta håller begränsat teckenval uniformt utan att introducera mätbar modulobias.
Teckentäckning och entropi
För konfigurerade lösenordspolicyer väljer generatorn först ett tecken från varje aktiverad klass, fyller resten från det kombinerade alfabetet och blandar sedan resultatet. Detta hjälper till att uppfylla destinationslösenordsregler utan att placera en förutsägbar klass på en förutsägbar position.
Den teoretiska entropiuppskattningen är:
bits = length × log2(uniqueAlphabetSize)
Det värdet är en övre gräns för uniformt slumpmässiga val från det konfigurerade alfabetet. Det tar inte hänsyn till lösenordsåteranvändning, användarredigerad utdata, komprometterade enheter, läckta lösenord eller svag lagring hos destinationstjänsten.
Integritetsgräns
I webbläsarverktygen förblir genererade värden i sidans minne och synliga resultatfält tills användaren kopierar eller exporterar dem. De lokala generatorerna skickar inte genererade lösenord till PwdGen-servrar, lägger dem i URL:er eller skriver dem i analyshändelser.
Denna gräns skyddar inte mot skadliga webbläsartillägg, urklippshanterare, kompromettering av operativsystem, skärmbilder, nätfiskesidor eller att en användare klistrar in ett genererat lösenord på en osäker destination.
Reproducerbar implementation
Det offentliga pwdgen-cli-paketet och det förberedda pwdgen-core-paketet finns för att hålla genereringsmodellen granskningsbar utanför webbsidan. Enhetstester täcker teckenklassinkludering, exkluderade tecken, ogiltiga konfigurationer, entropiformler och frånvaron av osäkra pseudoslumpkodsökvägar.
Målet är inte att göra PwdGen till en privat standard. Målet är att göra implementationen tillräckligt liten så att utvecklare kan läsa, testa och ersätta den när deras miljö kräver en annan förtroendegräns.