bitlvl
SR

bcrypt, Argon2 i scrypt hešer

Izaberite algoritam i cenu, heširajte lozinku, ili nalepite heš da ga proverite. Svaki algoritam ovde je implementiran u stranici i testiran prema zvaničnim vektorima.

Režim
 

Rezultati i poruke ovog alata prikazuju se na engleskom.

Zašto spor heš

Kad baza procuri, napadači pogađaju lozinke offline prema sačuvanim hešovima. Brz heš kao SHA-256 omogućava jednom GPU-u oko deset milijardi pokušaja u sekundi, što većinu lozinki koje su ljudi izabrali pretvara u otvoreni tekst za nekoliko sati. Funkcije za heširanje lozinki su namerno spore i, u novijim dizajnima, gladne memorije, tako da svaki pokušaj napadača košta koliko i vas, a hiljade jezgara GPU-a ne pomažu jer dele premalo memorije.

FunkcijaGodinaPodesivoPreporučeno (OWASP 2024)Koristite kad
Argon2id2015memorija, prolazi, trakem=19 MiB, t=2, p=1 (ili m=64 MiB, t=3)Podrazumevano za nove sisteme. Pobednik Password Hashing Competition.
scrypt2009N, r, pN=2¹⁷, r=8, p=1Memorijski zahtevan; dobar tamo gde Argon2 nije dostupan.
bcrypt1999cena (2ⁿ rundi)cena 10 ili višeSvuda; i dalje solidan. Seče na 72 bajta.
PBKDF22000iteracije600.000 (SHA-256)FIPS usklađenost; nije memorijski zahtevan, pa je najslabiji protiv GPU-a.

Čitanje heš stringa

$2b$12$ + 22 znaka soli + 31 heša: bcrypt, cena 12 (4.096 rundi). $argon2id$v=19$m=19456,t=2,p=1$salt$hash: Argon2id sa parametrima u stringu, Base64 bez paddinga. Oba formata nose sve što je potrebno za proveru, pa cenu možete vremenom da povećavate i ponovo heširate korisnike pri sledećoj prijavi. scrypt i PBKDF2 nemaju univerzalni format stringa; so i parametri se čuvaju pored, zbog čega provera traži so posebno.

Izbor cene

Ciljajte na otprilike 100–300 ms po hešu na vašem serveru. Ova stranica prijavljuje koliko je svaki heš trajao u vašem pregledaču (pristojan laptop je uporediv sa malim serverskim jezgrom). Argon2 na preporučenih 19 MiB traje oko sekundu u JavaScriptu; nativne implementacije su nekoliko puta brže.

Šta ne raditi

Ne koristite MD5, SHA-1 ili SHA-256 same, čak ni sa solju. Ne koristite jednu so za ceo sajt. Ne pre-heširajte sa SHA-256 da zaobiđete bcrypt ograničenje od 72 bajta, osim ako rezultat i ne kodirate u Base64 (sirovi bajtovi mogu da sadrže NUL, na kome bcrypt staje). I ne lepite prave produkcione lozinke ni u jednu veb stranicu, uključujući ovu; koristite test vrednosti.

Pitanja

Da li je bezbedno koristiti ovu stranicu sa pravom lozinkom?

Heširanje se izvršava u vašem pregledaču i ništa se ne prenosi, ali razumno pravilo je da svaku veb stranicu tretirate kao nepouzdanu za žive kredencijale. Koristite je za generisanje hešova za test podatke, za razumevanje formata i za proveru sa jednokratnim lozinkama.

Zašto bcrypt svaki put daje drugačiji heš?

So je nasumična pri svakom pozivu; čuva se unutar heš stringa. Provera je izvlači i ponovo računa. Očekuje se da se dva heša iste lozinke razlikuju; oba prolaze proveru.

Zašto moja bcrypt provera ne uspeva za dugačku lozinku?

bcrypt koristi samo prva 72 bajta. Ako je lozinku heširala biblioteka koja pre-hešira (neke Django i Passlib konfiguracije), sirova bcrypt provera ovde se neće poklopiti. Proverite i prefiks: $2y$ i $2b$ hešovi su kompatibilni; $2x$ označava implementaciju sa greškom.

Šta znače m, t i p u Argon2?

m je memorija u KiB (19456 = 19 MiB), t je broj prolaza kroz tu memoriju, p je broj traka koje mogu da se izvršavaju paralelno. Memorija je glavni bezbednosni regulator: ona čini GPU i ASIC napade skupim.