Utilia

Bcrypt-generaattori ja -tarkistin

Luo bcrypt-tiiviste kustannuskertoimella 4–14, tarkista salasana olemassa olevaa tiivistettä vasten ja katso version, kustannuksen, suolan ja tiivisteen osat.

Muodosta salasanan tiiviste

Tarkista salasana tiivistettä vasten

Näin tiivistät salasanan bcryptillä

  1. Kirjoita Muodosta salasanan tiiviste -osiossa Salasana. Laskuri näyttää sen pituuden UTF-8-tavuina ja varoittaa, kun pituus ylittää 72 tavua.
  2. Valitse Kustannuskerroin (4–14). Alla oleva rivi näyttää kierrosten määrän, esimerkiksi 10 → 2^10 = 1 024 kierrosta.
  3. Napsauta Luo tiiviste. Edistymispalkki seuraa työtä, ja sivu pysyy käytettävänä koko ajan. Kun työ on valmis, työkalu näyttää kuluneen ajan ja Bcrypt-tiivisteen valmiina kopioitavaksi.
  4. Tiiviste jaetaan osiinsa: Versio, Kustannus, Suola (22 merkkiä) ja Tiiviste (31 merkkiä).

Jos haluat tarkistaa salasanan tiivistettä vasten, kirjoita salasana, liitä tiiviste (juuri luotu tiiviste täytetään automaattisesti) ja napsauta Tarkista salasana. Tulos kertoo, vastaavatko ne toisiaan. Valitse Piilota salasanat, jos haluat peittää molemmat salasanakentät.

Tiivistys tapahtuu selaimessasi bcryptjs-kirjastolla, joka ladataan vasta, kun sitä ensimmäisen kerran tarvitaan. Salasanaa tai tiivistettä ei lähetetä minnekään.

Miten bcrypt toimii

bcrypt (Provos ja Mazières, 1999) on Blowfish-salaukseen perustuva salasanatiivistefunktio. Toisin kuin SHA-256, se on tarkoituksella hidas, ja sen hitautta voi säätää: kustannuskerroin on kahden potenssi, joten jokainen +1 kaksinkertaistaa työmäärän. Kustannuskerroin 10 tarkoittaa 1 024 kierrosta raskasta avaimen asetusta, kerroin 12 tarkoittaa 4 096 kierrosta. Hitaus ei juuri haittaa, kun käyttäjä kirjautuu sisään, mutta se tekee varastetun tietokannan raakavoimalla murtamisesta paljon kalliimpaa.

Tiiviste kuten $2b$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy luetaan seuraavasti:

  • $2b$: versio. $2a$ ja $2y$ (PHP) ovat yhteensopivia, ja ne voi tarkistaa täällä. $2x$ merkitsee vanhan virheellisen toteutuksen tiivisteitä, ja se hylätään.
  • 10: kustannuskerroin.
  • Seuraavat 22 merkkiä: satunnainen 128-bittinen suola bcryptin omalla Base64-aakkostolla (./A-Za-z0-9).
  • Viimeiset 31 merkkiä: 184-bittinen tulos.

Koska suola on satunnainen ja tallennettu tiivisteeseen, saman salasanan tiivistäminen kahdesti tuottaa kaksi eri tiivistettä, ja molemmat tarkistuvat oikein. Siksi salasana tarkistetaan tarkistusfunktiolla eikä vertaamalla tiivisteitä keskenään.

Kustannuskertoimen valinta

Valitse suurin kustannuskerroin, jonka palvelimesi kestää kirjautumisten pysyessä nopeina, tyypillisesti noin neljännessekunti tiivistettä kohden. OWASP suosittelee bcryptille vähintään kerrointa 10. Selaimet ajavat bcryptiä JavaScriptillä, mikä on moninkertaisesti hitaampaa kuin natiivi palvelintoteutus: kertoimesta 12 alkaen työkalu varoittaa, että tiivistäminen voi kestää sekunnista useisiin sekunteihin, ja jokainen lisäaskel kaksinkertaistaa ajan. Työ jaetaan lyhyisiin osiin, joten sivu ei jäädy.

Uusiin järjestelmiin OWASP suosittelee nykyään Argon2id:tä, ja bcrypt on yhä hyväksyttävä, kun Argon2id ei ole käytettävissä.

72 tavun raja

bcrypt käyttää vain salasanan ensimmäisiä 72 tavua: kaikki sen jälkeen jätetään äänettömästi huomiotta. Tavut eivät ole merkkejä: ääkkönen vie UTF-8:ssa 2 tavua ja emoji 4. Kaksi pitkää salasanaa, joiden ensimmäiset 72 tavua ovat samat, tuottavat saman tiivisteen. Tavulaskuri varoittaa, kun salasana on liian pitkä. Jotkin järjestelmät esitiivistävät pitkät salasanat (esimerkiksi HMAC-SHA256:lla ja sitten Base64:llä) ennen bcryptiä. Jos teet näin, älä koskaan välitä raakoja binääritiivisteitä, koska nollatavu päättäisi salasanan ennenaikaisesti monissa toteutuksissa.

Usein kysytyt kysymykset

Miksi sama salasana antaa joka kerta eri tiivisteen?

Jokainen tiiviste saa uuden satunnaisen suolan, joka tallennetaan tiivisteen sisään. Tarkista salasana -painike lukee suolan ja kustannuksen tiivisteestä ja laskee sen uudelleen, joten kaikki versiot tarkistuvat.

Voiko bcrypt-tiivisteen purkaa?

Ei. bcrypt on yksisuuntainen funktio. Ainoa tapa saada salasana selville on arvata se ja tiivistää jokainen arvaus, ja juuri sen kustannuskerroin tekee hitaaksi.

Mitä kustannuskerrointa pitäisi käyttää?

Vähintään 10, ja enemmän, jos palvelimesi pysyy riittävän nopeana. Mittaa tuotantolaitteistollasi: tässä näkyvä aika kuvaa JavaScriptiä selaimessasi, ja se on yleensä hitaampi kuin palvelin.

Ovatko $2a$-, $2b$- ja $2y$-tiivisteet keskenään vaihdettavissa?

Alle 256 tavun salasanoilla ne antavat saman tuloksen, ja tämä työkalu tarkistaa kaikki kolme. $2b$ korjasi OpenBSD:n toteutuksen pituuden ylivuotovirheen, ja $2y$ on PHP:n nimi oikein toimivalle toteutukselle.

Onko turvallista kirjoittaa tähän oikea salasana?

Kaikki toimii paikallisesti, eikä mitään lähetetä tai tallenneta. Oikeita tilejä varten on silti hyvä tapa testata esimerkkisalasanalla eikä salasanalla, jota oikeasti käytät.