Turvallisuusopas
Miksi Math.random ei ole turvallinen salasanoille
Opi, miksi Math.random sopii käyttöliittymäefekteihin, mutta ei salasanoihin, palautuskoodeihin, tokeneihin tai muihin turvallisuusherkkiin salaisuuksiin.
Yhteenveto
Math.random() on yleinen JavaScriptin pseudosatunnaisfunktio. Se on hyödyllinen animaatioihin, satunnaistettuun käyttöliittymäkäyttäytymiseen, esimerkkeihin, peleihin ja simulaatioihin. Sitä ei ole määritelty kryptografiseen turvallisuuteen, eikä sitä tulisi käyttää salasanojen, palautuskoodien, API-salaisuuksien, allekirjoitusavaimien tai palautustunnusten luomiseen.
Ongelma
Salasanageneraattori tarvitsee arvaamattomuutta hyökkääjää vastaan, ei vain arvoja, jotka näyttävät vaihtelevilta käyttäjälle. Math.random() ei tarjoa selainstandardin mukaista kryptografista turvallisuustakuuta, ja toteutukset voivat vaihdella moottoreiden välillä.
Turvallisempi selainvaihtoehto
Nykyaikaiset selaimet tarjoavat crypto.getRandomValues() Web Crypto API:n kautta. PwdGen käyttää tätä rajapintaa ja hylkäysotantaa, joka välttää vinoutuneen merkkivalinnan. Jos tämä rajapinta ei ole käytettävissä, turvallinen toimintatapa on lopettaa generointi ja selittää yhteensopivuusvaatimus.
Kuinka tarkistaa generaattori
Etsi lähdekoodista Math.random. Vakava salasanageneraattori ei saa käyttää sitä salasanamerkkien luomiseen. Se voi esiintyä dokumentaatiossa, jossa selitetään, miksi se on turvaton, mutta ei generointipolussa.
Yksityiskohtainen ohjeistus
Tämä opas keskittyy siihen, miksi Math.random on sopimaton salasanoille ja salaisuuksille. Se on kirjoitettu kehittäjille, opiskelijoille ja työkalujen käyttäjille, jotka tarkistavat, käyttääkö generaattori turvallista satunnaisuutta, joten käytännön tavoite ei ole luoda dramaattista turvallisuusväitettä. Tavoitteena on valita salasanatapa, joka kestää jokapäiväistä käyttöä: kirjautumislomakkeet, salasananhallintaohjelmat, mobiilinäppäimistöt, tilin palautus, jaetut laitteet ja satunnaiset palvelut, joilla on outoja validointisääntöjä. Turvallinen suositus on hyödyllinen vain, jos oikea henkilö pystyy noudattamaan sitä johdonmukaisesti.
Turvallisin lähtökohta on satunnaisuus plus ainutlaatuisuus. Satunnaisuus tarkoittaa, että arvo valitaan suuresta avaruudesta kryptografisesti sopivasta satunnaislähteestä, eikä sitä keksitä syntymäpäivästä, lemmikin nimestä, näppäimistökuviosta tai lempilainauksesta. Ainutlaatuisuus tarkoittaa, että samaa salasanaa ei käytetä missään muualla. Pitkä mutta uudelleenkäytetty salasana voi vaarantua nopeasti yhden toisiinsa liittymättömän tietomurron jälkeen, kun taas ainutlaatuinen satunnainen salasana rajoittaa vahingon yhteen tiliin, jossa sitä käytettiin.
Tässä aiheessa käytännöllinen esiasetus on crypto.getRandomValues hylkäysotannalla Math.randomin sijaan. Voit soveltaa tätä esiasetusta Web Crypto API -oppaan avulla ja tallentaa lopullisen arvon luotettuun salasananhallintaohjelmaan. PwdGen luo arvot paikallisesti selaimessa Web Crypton avulla; luotua salasanaa ei lähetetä PwdGen-palvelimelle. Tämä paikallinen suunnittelu vähentää palvelinpuolen altistumista, mutta se ei suojaa kaikilta uhilta. Haitallinen selainlaajennus, vaarantunut laite, tietojenkalastelusivu tai turvaton leikepöydän käsittely voivat silti paljastaa salaisuuden sen luomisen jälkeen.
Yleisimmät vältettävät ongelmat ovat ennustettavat pseudosatunnaissekvenssit, modulo-vinouma, mukautetut satunnaisfunktiot ja tuotantoon kopioitu demokoodi. Nämä ongelmat ovat tärkeitä, koska hyökkääjät harvoin joutuvat brute-forceamaan jokaista mahdollista salasanaa, kun ihmisten tavat antavat heille oikotien. Tunnusten täyttö, tietojenkalastelu, vuotaneet salasanalistat ja tilin palautuksen väärinkäyttö ovat usein realistisempia kuin puhdas matemaattinen haku. Siksi paras neuvo yhdistää salasanan laatu tilikohtaisiin suojauksiin, kuten MFA, pääsyavaimet, palautuskoodien tallennus ja palautussähköpostin tai puhelinnumeron säännöllinen tarkistus.
Käytä tätä tarkistuslistaa suosituksen soveltamisessa:
- Älä käytä Math.randomia salasanoille.
- Käytä Web Cryptoa selaimissa.
- Käytä Node cryptoa tai tarkistettua pakettia CLI-koodissa.
- Testaa vahingossa tapahtuvan varakoodin varalta.
Jos verkkosivusto hylkää ihanteellisen asetuksen, älä pakota salasanaa heikompaan malliin käsin. Säädä yhtä muuttujaa kerrallaan. Jos symbolit hylätään, pidä isot kirjaimet, pienet kirjaimet ja numerot käytössä ja lisää pituutta. Jos enimmäispituus on pieni, käytä suurinta hyväksyttyä pituutta ja varmista, että arvo on ainutlaatuinen. Jos salasana on luettava ääneen, tulostettava tai kirjoitettava television tai reitittimen näytöllä, harkitse hämmentävien merkkien poissulkemista ja pituuden lisäämistä kompensoimaan pienempää aakkostoa.
Lopuksi muista salasananeuvonnan rajat. Vahva salasana on yksi suojakerros, ei takuu. Se ei voi tehdä tietojenkalastelusivusta turvallista, korjata haittaohjelmia tai korvata palvelua, joka tallentaa tunnukset huonosti. Hyödyllinen tapa on tylsä mutta kestävä: luo ainutlaatuinen arvo, tallenna se turvallisesti, suojaa palautuspolku ja vaihda se nopeasti, jos epäilet altistumista.
Turvallinen seuraava askel
Tämän oppaan lukemisen jälkeen tee yksi pieni tilin tarkistus sen sijaan, että yrität korjata kaikkea kerralla. Valitse tili, joka aiheuttaisi eniten ongelmia, jos se kaapattaisiin, varmista, että sen salasana on ainutlaatuinen, ja tarkista palautussähköposti, palautuspuhelinnumero, MFA-menetelmä ja varakoodien tallennus. Jos jokin osa ketjusta on heikko, paranna sitä ennen kuin siirryt pienemmän riskin tileihin. Tämä järjestys pitää työn hallittavana ja suojaa tilejä, joita hyökkääjät todennäköisimmin käyttävät ponnahduslautana. Miksi math.random ei ole turvallinen salasanoille, paras lopputulos on toistettava tapa: luo paikallisesti, tallenna huolellisesti ja vältä uudelleenkäyttöä.
Usein kysytyt kysymykset
Onko Math.random koskaan ok?
Kyllä, visuaalisiin tehosteisiin, simulaatioihin ja tavalliseen käyttöliittymän satunnaisuuteen, mutta ei tunnuksille tai turvallisuustokeneille.
Mitä salasanageneraattoreiden tulisi käyttää sen sijaan?
Niiden tulisi käyttää kryptografista satunnaislähdettä, kuten crypto.getRandomValues() selaimessa.
Käyttääkö PwdGen varalla Math.randomia?
Ei. Jos Web Crypto ei ole käytettävissä, PwdGen näyttää yhteensopivuusvaroituksen eikä luo salasanoja Math.random():lla.