Sikkerhetsveiledning
Hvorfor Math.random ikke er trygt for passord
Lær hvorfor Math.random er egnet for UI-effekter, men ikke for passord, tilbakestillingskoder, tokens eller andre sikkerhetssensitive hemmeligheter.
Sammendrag
Math.random() er en generell JavaScript-pseudo-tilfeldig funksjon. Den er nyttig for animasjoner, randomisert UI-atferd, eksempler, spill og simuleringer. Den er ikke spesifisert for kryptografisk sikkerhet og bør ikke brukes til å generere passord, tilbakestillingskoder, API-hemmeligheter, signeringsnøkler eller gjenopprettingstokens.
Problemet
En passordgenerator trenger uforutsigbarhet mot en angriper, ikke bare verdier som ser varierte ut for en bruker. Math.random() gir ikke en nettleserstandard kryptografisk sikkerhetsgaranti, og implementasjoner kan variere mellom motorer.
Det sikrere nettleseralternativet
Moderne nettlesere tilbyr crypto.getRandomValues() gjennom Web Crypto API. PwdGen bruker dette grensesnittet og avvisningssampling, som unngår skjev tegnutvelging. Hvis dette APIet ikke er tilgjengelig, er den sikre oppførselen å stoppe generering og forklare kompatibilitetskravet.
Hvordan vurdere en generator
Søk i kildekoden etter Math.random. En seriøs passordgenerator bør ikke bruke den for passordtegn. Den kan forekomme i dokumentasjon som forklarer hvorfor den er utrygg, men ikke i genereringsveien.
Detaljert veiledning
Denne veiledningen fokuserer på hvorfor Math.random er uegnet for passord og hemmeligheter. Den er skrevet for utviklere, studenter og verktøybrukere som sjekker om en generator bruker sikker tilfeldighet, så det praktiske målet er ikke å skape et dramatisk sikkerhetskrav. Målet er å velge en passordvane som kan overleve daglig bruk: påloggingsskjemaer, passordbehandlere, mobile tastaturer, kontogjenoppretting, delte enheter og den sporadiske tjenesten med rare valideringsregler. En sikker anbefaling er bare nyttig hvis en ekte person kan følge den konsekvent.
Det sikreste utgangspunktet er tilfeldighet pluss unikhet. Tilfeldighet betyr at verdien er valgt fra et stort rom av en kryptografisk egnet tilfeldig kilde, ikke oppfunnet fra en bursdag, et kjæledyrnavn, et tastaturmønster eller et favorittsitat. Unikhet betyr at det samme passordet ikke brukes noe annet sted. Et passord som er langt, men gjenbrukt, kan mislykkes raskt etter ett urelatert datainnbrudd, mens et unikt tilfeldig passord begrenser skaden til den ene kontoen der det ble brukt.
For dette emnet er en praktisk forhåndsinnstilling crypto.getRandomValues med avvisningssampling i stedet for Math.random. Du kan bruke den forhåndsinnstillingen med Web Crypto API-veiledningen og deretter lagre den endelige verdien i en pålitelig passordbehandler. PwdGen genererer verdier lokalt i nettleseren med Web Crypto; det genererte passordet sendes ikke til en PwdGen-server. Det lokale designet reduserer eksponering på serversiden, men beskytter ikke mot alle trusler. En ondsinnet nettleserutvidelse, en kompromittert enhet, en phishing-side eller utrygg håndtering av utklippstavlen kan fortsatt eksponere en hemmelighet etter at den er generert.
De vanligste problemene å unngå er forutsigbare pseudo-tilfeldige sekvenser, moduloskjevhet, egendefinerte tilfeldige funksjoner og demokode kopiert inn i produksjon. Disse problemene betyr noe fordi angripere sjelden trenger å brute-force alle mulige passord når menneskelige vaner gir dem en snarvei. Credential stuffing, phishing, lekkede passordlister og misbruk av kontogjenoppretting er ofte mer realistiske enn et rent matematisk søk. Derfor kombinerer den beste rådgivningen passordkvalitet med kontonivåkontroller som MFA, passnøkler, lagring av gjenopprettingskoder og regelmessig gjennomgang av gjenopprettings-e-post eller telefoninnstillinger.
Bruk denne sjekklisten når du anvender anbefalingen:
- Ikke bruk Math.random for passord.
- Bruk Web Crypto i nettlesere.
- Bruk Node crypto eller en pålitelig pakke i CLI-kode.
- Test for utilsiktet fallback-kode.
Hvis et nettsted avviser den ideelle innstillingen, ikke tving passordet inn i et svakere mønster manuelt. Juster én variabel om gangen. Hvis symboler avvises, behold store bokstaver, små bokstaver og tall aktivert og øk lengden. Hvis en maksimal lengde er lav, bruk den største aksepterte lengden og sørg for at verdien er unik. Hvis et passord må leses høyt, skrives ut eller skrives på en TV- eller ruterskjerm, vurder å ekskludere forvirrende tegn og øke lengden for å kompensere for det mindre alfabetet.
Til slutt, husk grensen for passordråd. Et sterkt passord er ett lag med forsvar, ikke en garanti. Det kan ikke gjøre en phishing-side trygg, fikse skadelig programvare eller kompensere for en tjeneste som lagrer legitimasjon dårlig. Den nyttige vanen er kjedelig, men holdbar: generer en unik verdi, lagre den trygt, beskytt gjenopprettingsveien, og bytt den ut raskt hvis du mistenker eksponering.
Et trygt neste steg
Etter å ha lest denne veiledningen, gjør én liten kontorevisjon i stedet for å prøve å fikse alt på en gang. Velg kontoen som ville forårsake mest trøbbel hvis den ble overtatt, bekreft at passordet er unikt, og sjekk gjenopprettings-e-posten, gjenopprettingstelefonen, MFA-metoden og lagring av sikkerhetskopikoder. Hvis noen del av den kjeden er svak, forbedre den delen før du går videre til lavere risikokontoer. Denne rekkefølgen holder arbeidet håndterbart og beskytter kontoene som angripere mest sannsynlig vil bruke som et springbrett. For hvorfor math.random ikke er trygt for passord, er det beste resultatet en repeterbar vane: generer lokalt, lagre nøye, og unngå gjenbruk.
Ofte stilte spørsmål
Er Math.random noen gang OK?
Ja, for visuelle effekter, simuleringer og vanlig UI-tilfeldighet, men ikke for legitimasjon eller sikkerhetstokens.
Hva bør passordgeneratorer bruke i stedet?
De bør bruke en kryptografisk tilfeldig kilde som crypto.getRandomValues() i nettleseren.
Faller PwdGen tilbake på Math.random?
Nei. Hvis Web Crypto ikke er tilgjengelig, viser PwdGen en kompatibilitetsadvarsel og genererer ikke passord med Math.random().