Generátor a kontrola bcrypt
Vytvoř hash bcrypt s faktorem nákladnosti od 4 do 14, zkontroluj heslo proti existujícímu hashi a zobraz jeho verzi, nákladnost, sůl a otisk.
Zahashovat heslo
- Verze
- Nákladnost
- Sůl (22 znaků)
- Hash (31 znaků)
Zkontrolovat heslo proti hashi
- Verze
- Nákladnost
- Sůl (22 znaků)
- Hash (31 znaků)
Jak zahashovat heslo pomocí bcrypt
- V části Zahashovat heslo napiš Heslo. Počítadlo ukazuje jeho délku v bajtech UTF-8 a upozorní tě, když přesáhne 72 bajtů.
- Zvol Faktor nákladnosti (4–14). Řádek pod ním ukazuje počet kol, například 10 → 2^10 = 1 024 kol.
- Klikni na Generovat hash. Ukazatel průběhu sleduje práci a stránka zůstává během výpočtu použitelná. Po dokončení nástroj zobrazí potřebný čas a Hash bcrypt, připravený ke zkopírování.
- Hash je rozdělen na části: Verze, Nákladnost, Sůl (22 znaků) a Hash (31 znaků).
Chceš-li zkontrolovat heslo proti hashi, napiš heslo, vlož hash (ten, který jsi právě vytvořil, se vyplní automaticky) a klikni na Zkontrolovat heslo. Výsledek řekne, zda si odpovídají. Zaškrtnutím Skrýt hesla zamaskuješ obě pole s heslem.
Hashování běží ve tvém prohlížeči pomocí knihovny bcryptjs, která se načte, až když ji poprvé potřebuješ. Žádné heslo ani hash se nikam neodesílá.
Jak bcrypt funguje
bcrypt (Provos a Mazières, 1999) je funkce pro hashování hesel postavená na šifře Blowfish. Na rozdíl od SHA-256 je záměrně pomalá a její pomalost lze nastavit: faktor nákladnosti je mocnina dvou, takže každé zvýšení o 1 zdvojnásobí práci. Nákladnost 10 znamená 1 024 iterací náročného nastavení klíče, nákladnost 12 pak 4 096. Při přihlášení uživatele na této pomalosti prakticky nezáleží, ale útok hrubou silou na odcizenou databázi se tím výrazně prodraží.
Hash jako $2b$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy se čte takto:
$2b$: verze.$2a$a$2y$(PHP) jsou kompatibilní a lze je zde ověřit.$2x$označuje hashe ze staré chybné implementace a je odmítnuto.10: faktor nákladnosti.- Dalších 22 znaků: náhodná 128bitová sůl v abecedě Base64, kterou používá bcrypt (
./A-Za-z0-9). - Posledních 31 znaků: 184bitový výsledek.
Protože je sůl náhodná a uložená přímo v hashi, dvojí zahashování stejného hesla dá dva různé hashe a oba se ověří správně. Proto se heslo kontroluje ověřovací funkcí a hashe se nesrovnávají přímo.
Volba nákladnosti
Zvol nejvyšší nákladnost, kterou si tvůj server může dovolit, aniž by se zpomalilo přihlašování, obvykle kolem čtvrt sekundy na hash. OWASP doporučuje pro bcrypt minimální nákladnost 10. Prohlížeče spouštějí bcrypt v JavaScriptu, což je několikrát pomalejší než nativní implementace na serveru: od nákladnosti 12 nástroj upozorňuje, že hashování může trvat od jedné do několika sekund, a každý další krok čas zdvojnásobí. Práce je rozdělena na krátké úseky, takže se stránka nezasekne.
Pro nové systémy OWASP dnes upřednostňuje Argon2id, přičemž bcrypt je stále přijatelný tam, kde Argon2id není k dispozici.
Limit 72 bajtů
bcrypt používá jen prvních 72 bajtů hesla, vše za nimi se tiše ignoruje. Bajty nejsou znaky: písmeno s diakritikou zabere v UTF-8 2 bajty a emoji 4. Dvě dlouhá hesla, která sdílejí prvních 72 bajtů, dají stejný hash. Počítadlo bajtů tě upozorní, že je heslo příliš dlouhé. Některé systémy dlouhá hesla před bcryptem předem zahashují (například pomocí HMAC-SHA256 a pak Base64). Pokud to děláš, nikdy nepředávej surové binární otisky, protože nulový bajt by v mnoha implementacích předčasně ukončil heslo.
Časté dotazy
Proč dává stejné heslo pokaždé jiný hash?
Každý hash dostane novou náhodnou sůl, která je uložena uvnitř hashe. Tlačítko Zkontrolovat heslo načte sůl a nákladnost z hashe a vypočítá ho znovu, takže se ověří každá verze.
Dá se hash bcrypt dešifrovat?
Ne. bcrypt je jednosměrná funkce. Jediný způsob, jak heslo zjistit, je hádat ho a hashovat každý pokus, a právě to faktor nákladnosti zpomaluje.
Jaký faktor nákladnosti mám použít?
Alespoň 10, a více, pokud je tvůj server dostatečně rychlý. Měř na produkčním hardwaru: zde zobrazený čas odpovídá JavaScriptu ve tvém prohlížeči, který bývá pomalejší než server.
Jsou hashe $2a$, $2b$ a $2y$ zaměnitelné?
U hesel kratších než 256 bajtů dávají stejný výsledek a tento nástroj ověřuje všechny tři. $2b$ opravila chybu přetečení délky v implementaci OpenBSD a $2y$ je název z PHP pro správnou implementaci.
Je bezpečné sem psát skutečné heslo?
Vše běží lokálně a nic se neodesílá ani neukládá. U skutečných účtů je přesto dobrým zvykem testovat na vzorovém heslu, ne na tom, které opravdu používáš.
Související nástroje
- Generátor hashů Vytvoř hash MD5, SHA-1, SHA-256 a SHA-512 z textu nebo souborů libovolné velikosti a ověř kontrolní součty. Vše běží ve tvém prohlížeči.
- Generátor hesel Zdarma vytvoř silná náhodná hesla o 4 až 128 znacích v prohlížeči pomocí bezpečného generátoru náhodných čísel. Nic se neukládá ani neodesílá.
- Kontrola síly hesla Zjisti, jak silné je tvoje heslo. Uvidíš skóre, odhadovanou dobu prolomení ve čtyřech scénářích útoku a konkrétní tipy, vše lokálně ve tvém prohlížeči.
- Generátor HMAC Vypočítej HMAC-SHA1, SHA-256, SHA-384 nebo SHA-512 s klíčem v textu, hex nebo Base64, získej výstup v hex a Base64 a zkontroluj podpis webhooku v prohlížeči.