Turvallisuusopas
Asiakaspuolen salasanan luonti Web Cryptolla ja hylkäysotannalla
Tekninen white paper, joka selittää PwdGenin selainpuolen salasanan luontimallin, entropiarajat, hylkäysotannan ja yksityisyyden rajat.
Tiivistelmä
PwdGen käyttää asiakaspuolen referenssiluontimenetelmää: selain tai runtime Web Crypto tuottaa satunnaisbittijonon, hylkäysotanta kartoittaa nämä bitit harhattomiksi rajoitetuiksi indekseiksi, ja Fisher-Yates-sekoitus jakaa vaaditut merkkiluokat lopulliseen salasanaan. Menetelmä on tarkoituksella pieni, auditoitava ja toistettavissa verkkosovelluksessa, API-sovittimessa, CLI:ssä ja valmistellussa pwdgen-core-paketissa.
Tämä asiakirja kuvaa suunnittelumallin. Se ei ole väite uudesta kryptografisesta primitiivistä, muodollisesta standardista tai riippumattomasta kolmannen osapuolen auditoinnista.
Satunnaisuuden lähde
Generaattori pyytää kryptografisesti vahvoja satunnaisarvoja crypto.getRandomValues():n kautta. Web Crypto -toteutusten odotetaan käyttävän kryptografisesti turvallista pseudosatunnaislukugeneraattoria, joka on kylvetty isäntäympäristön tarjoamalla korkealaatuisella entropialla. Käytännössä selaimet delegoivat tämän vastuun käyttöjärjestelmän toiminnoille ja alustan kryptografisille palveluntarjoajille.
PwdGen ei väitä, että jokainen salasanan luontikutsu ottaisi suoraan näytteen laitteiston kohinalähteestä. Turvallisempi ja tarkempi väite on, että selain toimittaa CSPRNG-tulostetta Web Crypto API:n kautta, ja PwdGen välttää ei-kryptografisia pseudosatunnaisliittymiä.
Miksi ei Math.random()
Math.random() ei ole tarkoitettu turvallisuusherkkään käyttöön. Se sopii simulaatioihin, visuaalisiin tehosteisiin ja tavalliseen satunnaistettuun käyttöliittymäkäyttäytymiseen, mutta se ei tarjoa salasanoilta, palautuskoodeilta, allekirjoitusavaimilta tai muilta tunnistetiedoilta odotettuja takeita.
PwdGen käsittelee turvattomat pseudosatunnaisvarajärjestelmät virhetilana. Jos Web Crypto ei ole käytettävissä, generaattorin tulisi näyttää yhteensopivuusvirhe sen sijaan, että se tuottaisi hiljaa heikkoja tunnistetietoja.
Hylkäysotanta
Satunnaisbittijonot ja kokonaisluvut vedetään yleensä kahden potenssin alueelta. Salasana-aakkosten koko harvoin jakaa tämän alueen tarkasti. Suora modulo-operaatio voi tehdä joistakin merkeistä hieman todennäköisempiä kuin toisista.
PwdGen käyttää hylkäysotantaa:
- Ota 32-bittinen etumerkitön kokonaisluku.
- Laske suurin aakkoskoon monikerta, joka mahtuu 32-bittiseen alueeseen.
- Hylkää arvot, jotka ovat tämän rajan yläpuolella.
- Käytä moduloa vain jäljellä olevaan täydelliseen alueeseen.
Tämä pitää rajoitetun merkkivalinnan tasaisena ilman mitattavaa modulo-harhaa.
Merkkikattavuus ja entropia
Määritetyille salasanakäytännöille generaattori valitsee ensin yhden merkin jokaisesta käytössä olevasta luokasta, täyttää loput yhdistetystä aakkostosta ja sekoittaa sitten tuloksen. Tämä auttaa täyttämään kohdesalasanan säännöt asettamatta ennustettavaa luokkaa ennustettavaan paikkaan.
Teoreettinen entropia-arvio on:
bits = length × log2(uniqueAlphabetSize)
Tämä arvo on yläraja tasaisesti satunnaisille valinnoille määritetystä aakkostosta. Se ei ota huomioon salasanan uudelleenkäyttöä, käyttäjän muokkaamaa tulostetta, vaarantuneita laitteita, vuotaneita salasanoja tai kohdepalvelun heikkoa tallennusta.
Yksityisyyden raja
Selaintyökaluissa luodut arvot pysyvät sivun muistissa ja näkyvillä tuloskentissä, kunnes käyttäjä kopioi tai vie ne. Paikalliset generaattorit eivät lähetä luotuja salasanoja PwdGen-palvelimille, laita niitä URL-osoitteisiin tai kirjoita niitä analytiikkatapahtumiin.
Tämä raja ei suojaa haitallisilta selainlaajennuksilta, leikepöydän hallintaohjelmilta, käyttöjärjestelmän vaarantumiselta, näytönkaappaukselta, tietojenkalastelusivuilta tai käyttäjän liittäessä luodun salasanan turvattomaan kohteeseen.
Toistettava toteutus
Julkinen pwdgen-cli-paketti ja valmisteltu pwdgen-core-paketti ovat olemassa, jotta luontimalli pysyy tarkasteltavissa verkkosivun ulkopuolella. Yksikkötestit kattavat merkkiluokkien sisällyttämisen, poissuljetut merkit, virheelliset konfiguraatiot, entropiakaavat ja turvattomien pseudosatunnaisvarakoodipolkujen puuttumisen.
Tavoitteena ei ole tehdä PwdGenistä yksityistä standardia. Tavoitteena on tehdä toteutuksesta riittävän pieni, jotta kehittäjät voivat lukea, testata ja korvata sen, kun heidän ympäristönsä vaatii erilaista luottamusrajaa.