Bcrypt hash generátor és ellenőrző
Alakíts egy jelszót $2b$ bcrypt hash-sé, vagy ellenőrizz egy jelszót egy már meglévő hash-hez képest. A hashelés egy Web Workerben fut a böngésződben — semmi, amit beírsz, nem kerül elküldésre sehova.
Soha ne illessz be valódi éles jelszót semmilyen online eszközbe — ebbe sem.
Bemenet
Jelszó és cost
Minden hash-hez egy friss, 16 bájtos salt jön létre, így ugyanaz a jelszó minden alkalommal más hash-t ad. Ez a salt lényege, nem hiba.
A(z) 10 cost azt jelenti, hogy 2^10 = 1,024 kulcsbeállítási kör fut le. Minden egyes lépés megduplázza a munkát — annak is, aki egy ellopott jelszófájlt tör, és a saját szerverednek is minden egyes bejelentkezésnél. A legtöbb éles rendszer 10 és 12 között van.
A három prefix azonos hash-bájtokat ad 72 bájt alatti jelszavaknál; csak a címke különbözik. A PHP beépített crypt() függvénye nem ismeri fel a $2b$-t, így egy $2b$ hash csendben elbukik a password_verify()-nál. PHP-hez válaszd a $2y$-t.
A hashelés egy Web Workerben fut, ebben a lapon belül. A jelszó soha nem kerül elküldésre a Wespnernek vagy bárki másnak — nincs is olyan kérés, ami elküldené.
Eredmény
bcrypt hash
Nyomd meg a „Hash generálása” gombot.
Cost, itt lemérve
Mibe kerül neked ez a beállítás
Becslés: egy hash időzítve van ebben a lapban cost 8-nál, minden más cost ebből van extrapolálva duplázással. A saját hardvered és böngésződ dönti el a végső számot.
Ezek a számok egyetlen JavaScript szálra vonatkoznak. Egy valódi támadó natív kódot futtat egy rack GPU-n, és nagyságrendekkel gyorsabb — pontosan ezért kell a cost factornak kényelmetlennek lennie, nem kényelmesnek. Ugyanez a csúszka dönti el azt is, mennyi CPU-t éget el minden egyes saját bejelentkezésed.
A string felépítése
Mit jelent a 60 karakter
$2b$12$LQv3c1yqBWVHxkd0LHAkCOYUtYgBuLIjrsGrDUgYqZbY7d0RfPbtq
Mindkét blokk a bcrypt saját base64 ábécéjét használja, amely ./ -vel kezdődik, és a számjegyeket a végére teszi — ez nem szabványos base64, és ha úgy dekódolod, mintha az lenne, rossz bájtokat kapsz. Ez, valamint a 22/31 felosztás, egy gyors módja annak ellenőrzésére, hogy egy string valóban bcrypt hash-e, nem csak annak látszik.
Algoritmus választása
bcrypt, scrypt vagy Argon2?
Ez az eszköz szándékosan csak bcryptet kezel. Íme, mikor jó választás, és mikor nem.
Tervezésénél fogva lassú, de csak CPU-időre és egy fix 4 KB memóriára támaszkodik. A GPU-k és FPGA-k sokkal jobban tudják párhuzamosítani, mint az újabb terveket. Ettől még teljesen elfogadható választás, szó szerint mindenhol támogatott, és a legmeglepőbb buktatója a 72 bájtos jelszókorlát.
Hangolható memóriaköltséget ad hozzá, így egy támadónak RAM-ra is szüksége van próbálkozásonként, nemcsak magokra. Nehezebb olcsón párhuzamosítani, mint a bcryptet.
A 2015-ös Password Hashing Competition győztese, és amit az OWASP jelenleg új rendszerekhez javasol: külön idő-, memória- és párhuzamossági csúszkák, az id variáns pedig ellenáll a GPU- és a side-channel támadásoknak is. Ha teljesen újat építesz, és a platformodon elérhető, használd. Ha egy már $2y$ hasheket tároló rendszert tartasz karban, egy ésszerű costtal futó bcrypt nem sürgős probléma — inkább hasheld újra a következő bejelentkezéskor.
Bizonyíték
Ellenőrizd ezt az oldalt a publikált tesztvektorok alapján
Egy hashelő eszköznek, amely bizalmat kér, ellenőrizhetőnek kell lennie. Ezek az OpenBSD-alapú implementációk által használt referencia bcrypt vektorok; az oldal mindegyiket újraszámolja a saját saltjából, és karakterről karakterre összehasonlítja, majd egy eldobható jelszót hashel és ellenőriz újra két cost factornál.
A teszt 6 publikált vektort futtat le, plusz két oda-vissza tesztet.
Saját játékszervert üzemeltetsz?
Wespner játékszerverek DDoS-védelemmel, NVMe lemezekkel és néhány perc alatti aktiválással.