Bcrypt generator i provjera
Generiši bcrypt heš s faktorom troška od 4 do 14, provjeri lozinku prema postojećem hešu i vidi njegovu verziju, trošak, sol i sažetak.
Heširaj lozinku
- Verzija
- Trošak
- Sol (22 znaka)
- Heš (31 znak)
Provjeri lozinku prema hešu
- Verzija
- Trošak
- Sol (22 znaka)
- Heš (31 znak)
Kako heširati lozinku pomoću bcrypta
- Pod Heširaj lozinku upiši Lozinku. Brojač prikazuje njenu dužinu u UTF-8 bajtovima i upozorava te kad pređe 72 bajta.
- Odaberi Faktor troška (4–14). Red ispod prikazuje broj rundi, na primjer 10 → 2^10 = 1.024 runde.
- Klikni Generiši heš. Traka napretka prati rad, a stranica ostaje upotrebljiva dok se izvršava. Kad završi, alat prikazuje utrošeno vrijeme i Bcrypt heš, spreman za kopiranje.
- Heš je podijeljen na dijelove: Verzija, Trošak, Sol (22 znaka) i Heš (31 znak).
Da provjeriš lozinku prema hešu, upiši lozinku, zalijepi heš (onaj koji si upravo generisao popunjava se automatski) i klikni Provjeri lozinku. Rezultat kaže odgovaraju li se. Označi Sakrij lozinke da zamaskiraš oba polja za lozinku.
Heširanje se izvršava u tvom pregledniku pomoću biblioteke bcryptjs, koja se učitava tek kad je prvi put zatrebaš. Nijedna lozinka ni heš ne šalju se nigdje.
Kako bcrypt radi
bcrypt (Provos i Mazières, 1999) je funkcija za heširanje lozinki zasnovana na šifri Blowfish. Za razliku od SHA-256, namjerno je spor, a ta sporost se može podešavati: faktor troška je stepen broja dva, pa svaki +1 udvostručuje posao. Trošak 10 znači 1.024 iteracije skupe pripreme ključa, a trošak 12 znači 4.096. Ta sporost jedva se primijeti pri prijavi korisnika, ali brute-force napad na ukradenu bazu podataka čini znatno skupljim.
Heš poput $2b$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy čita se ovako:
$2b$: verzija.$2a$i$2y$(PHP) su kompatibilne i mogu se ovdje provjeriti;$2x$označava hešove iz stare implementacije s greškom i odbija se.10: faktor troška.- Sljedeća 22 znaka: nasumična 128-bitna sol, zapisana u bcryptovoj vlastitoj Base64 abecedi (
./A-Za-z0-9). - Posljednjih 31 znak: 184-bitni rezultat.
Pošto je sol nasumična i pohranjena u samom hešu, heširanje iste lozinke dva puta daje dva različita heša, a oba se ispravno provjeravaju. Zato se lozinka provjerava funkcijom za provjeru, a ne poređenjem hešova.
Izbor troška
Odaberi najveći trošak koji tvoj server može podnijeti uz brze prijave, obično oko četvrtine sekunde po hešu. OWASP preporučuje najmanji trošak 10 za bcrypt. Preglednici izvršavaju bcrypt u JavaScriptu, što je nekoliko puta sporije od izvorne serverske implementacije: od troška 12 alat upozorava da heširanje može trajati od jedne do nekoliko sekundi, a svaki dodatni korak udvostručuje vrijeme. Posao je podijeljen na kratke odsječke, pa se stranica ne zamrzava.
Za nove sisteme OWASP sada preferira Argon2id, dok je bcrypt i dalje prihvatljiv gdje Argon2id nije dostupan.
Ograničenje od 72 bajta
bcrypt koristi samo prvih 72 bajta lozinke; sve poslije toga se tiho zanemaruje. Bajtovi nisu znakovi: slovo s dijakritikom zauzima 2 bajta u UTF-8, a emotikon 4. Dvije duge lozinke koje dijele prvih 72 bajta daju isti heš. Brojač bajtova te upozorava kad je lozinka predugačka. Neki sistemi prethodno heširaju duge lozinke (na primjer pomoću HMAC-SHA256, pa Base64) prije bcrypta; ako to radiš, nikada ne prosljeđuj sirove binarne sažetke, jer bi nulti bajt u mnogim implementacijama prerano završio lozinku.
Česta pitanja
Zašto ista lozinka svaki put daje drugačiji heš?
Svaki heš dobija novu nasumičnu sol, koja je pohranjena unutar heša. Dugme Provjeri lozinku čita sol i trošak iz heša i ponovo ga izračunava, pa se svaka verzija ispravno provjerava.
Može li se bcrypt heš dešifrovati?
Ne. bcrypt je jednosmjerna funkcija. Jedini način da se lozinka povrati je da se pogađa i da se heširaju svi pokušaji, a upravo to faktor troška čini sporim.
Koji faktor troška da koristim?
Najmanje 10, a više ako tvoj server ostaje dovoljno brz. Izmjeri na svom produkcijskom hardveru: vrijeme prikazano ovdje odražava JavaScript u tvom pregledniku, koji je obično sporiji od servera.
Jesu li $2a$, $2b$ i $2y$ hešovi zamjenjivi?
Za lozinke kraće od 256 bajta daju isti rezultat, a ovaj alat provjerava sva tri. $2b$ je ispravio grešku prekoračenja dužine u OpenBSD implementaciji, a $2y$ je PHP naziv za ispravnu implementaciju.
Je li sigurno ovdje upisivati pravu lozinku?
Sve se izvršava lokalno i ništa se ne šalje niti pohranjuje. Za prave račune ipak je dobra praksa testirati s probnom lozinkom, a ne s onom koju koristiš.
Srodni alati
- Generator hasheva Generiši MD5, SHA-1, SHA-256 i SHA-512 heševe teksta ili datoteka bilo koje veličine i provjeri kontrolne zbirove. Sve radi u tvom pregledniku.
- Generator lozinki Besplatan generator lozinki koji u pregledniku pravi jake nasumične lozinke od 4 do 128 znakova sigurnim generatorom. Ništa se ne pohranjuje niti šalje.
- Provjera jačine lozinke Provjeri koliko je tvoja lozinka jaka: ocjena, procijenjeno vrijeme probijanja u četiri scenarija napada i konkretni savjeti, sve lokalno u pregledniku.
- HMAC generator Izračunaj HMAC-SHA1, SHA-256, SHA-384 ili SHA-512 s tekstualnim, heks ili Base64 ključem, dobij heks i Base64 izlaz i provjeri potpis webhooka u pregledniku.