Mikä scrypt on?

scrypt on salasanan hajautusfunktio eli avainjohdantafunktio, jonka Colin Percival suunnitteli vuonna 2009 ja joka julkaistiin RFC 7914 -standardina. bcryptin ja Argon2:n tavoin se on tarkoituksella hidas, joten jokainen arvaus vie hyökkääjältä aikaa. Se on myös muistivaativa: jokainen hajautus täyttää suuren muistialueen ja lukee sen takaisin arvaamattomassa järjestyksessä, mikä tekee murrosta GPU:illa ja erikoisvalmisteisilla siruilla huomattavasti kalliimpaa. scryptiä käytetään salasanojen tallentamiseen monissa verkkokehityskehyksissä, Node.js:n, Pythonin ja Gon standardikirjastoissa sekä kryptovaluuttalompakoissa, kuten Ethereumin avaintallennuksissa.

Työkalun kuvaus

Tämä työkalu hajauttaa salasanan scryptillä selaimessasi. Se käyttää satunnaista suolaa ja OWASP:n suosittelemia salasanojen tallennusasetuksia. Voit muuttaa suolaa, kustannusta (N), lohkokokoa (r), rinnakkaisuutta (p) ja avaimen pituutta. Hajautusarvo on saatavilla PHC-merkkijonona salasanakirjastoja varten sekä heksadesimaali- ja Base64-muodossa koodia varten, joka tallentaa suolan ja parametrit erikseen.

Ominaisuudet

  • Hajauttaa salasanan RFC 7914 -standardissa määritellyllä scryptillä
  • Luo satunnaisen 16 tavun suolan, ja painikkeella voi luoda uuden
  • Hyväksyy oman suolan, jotta muualla luodun hajautusarvon voi tuottaa uudelleen
  • Asettaa kustannuksen (N) välille 2⁴–2²⁰ sekä lohkokoon (r), rinnakkaisuuden (p) ja avaimen pituuden
  • Antaa hajautusarvon PHC-merkkijonona, heksadesimaalina ja Base64-muodossa
  • Näyttää hitaiden hajautusten edistymisen ja varoittaa, jos asetukset vaativat yli 1 GiB muistia
  • Toimii selaimessasi, joten salasana ei koskaan poistu laitteeltasi

Parametrit

Parametri Oletusarvo Toiminta
Kustannus (N) 131072 (2¹⁷) Muistilohkojen määrä. Määrän kaksinkertaistaminen kaksinkertaistaa ajan ja muistinkulutuksen.
Lohkokoko (r) 8 Kunkin lohkon koko, 128 × r tavua. Vaikuttaa myös aikaan ja muistinkulutukseen.
Rinnakkaisuus (p) 1 Riippumattomien suorituskertojen määrä. Kertoo ajan, mutta ei muistinkulutusta.
Avaimen pituus 32 tavua Hajautusarvon pituus.

Tarvittava muisti on 128 × N × r tavua, mikä oletusarvoilla on 128 MiB.

Tulostusmuodot

PHC-merkkijono sisältää kaiken, mitä tarvitaan salasanan tarkistamiseen myöhemmin: algoritmin, parametrit, suolan ja hajautusarvon. Suola ja hajautusarvo ovat Base64-muodossa ilman täytemerkkejä:

$scrypt$ln=17,r=8,p=1$<salt>$<hash>

ln on N:n 2-kantainen logaritmi, joten ln=17 tarkoittaa, että N = 131072. Tätä muotoa lukevat ja kirjoittavat Pythonin passlib, Rustin scrypt-pakkaus ja Node.js:n @phc/scrypt-pakkaus.

Heksadesimaali- ja Base64-kentät sisältävät vain hajautusarvon, jonka palauttavat Node.js:n crypto.scrypt, Pythonin hashlib.scrypt ja Gon scrypt.Key. Tallenna suola ja parametrit niiden yhteydessä.

Näin se toimii

Suolakenttä luetaan tekstinä ja koodataan UTF-8-muotoon, aivan kuten annettaessa merkkijonomuotoinen suola Node.js:n crypto.scrypt-funktiolle. Satunnainen suola koostuu 16 satunnaisesta tavusta, jotka kirjoitetaan 32 heksadesimaalimerkkinä. Nämä 32 merkkiä ovat suola, joka hajautetaan. Myös salasana koodataan UTF-8-muotoon. Hajautusarvo lasketaan taustasäikeessä, joten sivu pysyy responsiivisena. Laskenta käynnistyy uudelleen, kun muutat mitä tahansa syötettä.

Vinkkejä

  • Käytä jokaiselle salasanalle uutta satunnaista suolaa. Sama salasana samalla suolalla tuottaa aina saman hajautusarvon.
  • OWASP suosittelee salasanojen tallennukseen vähintään arvoja N = 2¹⁷, r = 8 ja p = 1. N-arvoa kannattaa kasvattaa niin suureksi kuin palvelimesi pystyy käsittelemään jokaisen kirjautumisen yhteydessä.
  • Node.js rajoittaa scryptin muistinkulutuksen oletusarvoisesti 32 MiB:iin. Anna crypto.scrypt-funktiolle suurempi maxmem-arvo, kun käytät asetuksia N = 2¹⁷ tai suurempi ja r = 8.
  • Voit tarkistaa toisessa järjestelmässä luodun hajautusarvon syöttämällä saman salasanan, suolan ja parametrit sekä vertaamalla tuloksia.