Írjon a támogatásnak

E-mailben válaszolunk, általában két napon belül.

A Google reCAPTCHA visszaélés elleni védelemként ellenőrzi ezt a beküldést; ennek során adatok jutnak el a Google-hoz. A szkript csak az űrlap megnyitásakor töltődik be.

← Összes bejegyzés

Mennyibe kerül egy jelszó szerény hardveren

Az itteni statisztikaoldalak jelszóval védhetők. Ennek a jelszónak a hash-elése a szolgáltatás egyetlen olyan művelete, amelynek lassúnak kell lennie — ettől lesz drága egy ellopott hash feltörése. A kérdés az, hogy mennyire lassúnak, ezen a hardveren.

Az ezt a weboldalt futtató gépen mérve, PHP 8 alatt:

PASSWORD_DEFAULT560 ms(12-es költségnek felel meg)
12-es költség595 ms
11-es költség277 ms
10-es költség138 ms
10-es költség138 ms11-es költség277 ms12-es költség595 msPASSWORD_DEFAULT

A bcrypt költségparamétere kitevő: minden lépés megduplázza a munkát. A mérések pontosan ezt a duplázódást mutatják, ami jó jel arra, hogy semmi más nem zavar bele.

Miért rossz itt az alapértelmezés

A PHP a bcrypt alapértelmezett költségét 10-ről 12-re emelte. Egy átlagos szerveren ez észszerű fejlesztés — néhány tíz milliszekundumról van szó. Szerény hardveren viszont több mint fél másodpercnyi tiszta processzoridő, olyan gépen, amely közben mindenki más számára is rajzolja a számlálóképeket.

Bejelentkezésenként fél másodperc már önmagában is rossz. Még rosszabb, hogy felhívás a támadásra: a bejelentkezési végpontot bárki meghívhatja, és minden hívás 560 ms-ot költ el annak a processzornak az idejéből, amely az egész weboldalt kiszolgálja. Ez a jelszó-ellenőrzést a legolcsóbb elérhető felületté teszi egy szolgáltatásmegtagadásos támadáshoz.

Ezért a költséget 10-re rögzítettük, ahelyett hogy az alapértelmezésre hagynánk. Ez szándékosan gyengébb annál, amit a PHP most választ, és ezt nyíltan ki kell mondani, nem eldugni: egy 10-es költségű hash-t négyszer olcsóbb támadni, mint egy 12-est. Amit ezzel szemben nyerünk vissza, az abban rejlik, amit a jelszó valójában véd — egy látogatásszámokat mutató oldal láthatóságát, nem egy fiókot, nem pénzt, nem személyazonosságot. Nincs mögötte semmi, amit át lehetne venni.

A könnyen elsikló rész

PASSWORD_DEFAULT szándékosan változó érték. Az évekkel ezelőtt írt kód, amely ezt használja, minden PHP-frissítéssel csendben lassabb lesz — ugyanaz a forrás, ugyanaz a bemenet, többszörös futásidő. Ez a szándékolt viselkedés, és a legtöbb szoftvernél helyes is.

Csak akkor rossz, ha a gép nem bírja el, és erre semmi sem figyelmeztet. A frissítés sikeres, a tesztek lefutnak, az oldal továbbra is működik. Csak fél másodperccel tovább tart, és erre a számra senki sem néz rá, hacsak meg nem méri.

Hirdetés