Kontaktovať podporu

Odpovedáme e-mailom, zvyčajne do dvoch dní.

Google reCAPTCHA kontroluje toto podanie na ochranu pred zneužitím; údaje sa prenášajú spoločnosti Google. Skript sa načíta až pri otvorení tohto formulára.

← Všetky príspevky

Čo stojí heslo na skromnom hardvéri

O obsahu a jeho overovaní

V tomto článku

Tunajšie stránky so štatistikami možno chrániť heslom. Hashovanie tohto hesla je jediná operácia v tejto službe, ktorá má zámerne byť pomalá — práve to predražuje útok na ukradnutý hash. Otázkou je, ako pomalá na tomto hardvéri.

Zmerané na stroji, na ktorom beží tento web, PHP 8:

PASSWORD_DEFAULT560 ms(zodpovedá náročnosti 12)
náročnosť 12595 ms
náročnosť 11277 ms
náročnosť 10138 ms
náročnosť 10138 msnáročnosť 11277 msnáročnosť 12595 msPASSWORD_DEFAULT

Parameter náročnosti algoritmu bcrypt je exponent: každý krok zdvojnásobuje prácu. Merania ukazujú presne toto zdvojnásobenie, čo je dobrým znamením, že do toho nič iné nezasahuje.

Prečo je tu predvolená hodnota nesprávnou voľbou

PHP zvýšil predvolenú náročnosť algoritmu bcrypt z 10 na 12. Na serveri s výkonom bežného počítača je to rozumné vylepšenie — ide o niekoľko desiatok milisekúnd. Na skromnom hardvéri je to viac než pol sekundy čistého času procesora, na stroji, ktorý zároveň vykresľuje obrázky počítadiel pre všetkých ostatných.

Pol sekundy na prihlásenie je zlé samo osebe. Ešte horšie je to ako pozvánka: prihlasovací koncový bod môže zavolať ktokoľvek a každé zavolanie minie 560 ms procesora, ktorý obsluhuje celý web. Overovanie hesla sa tak mení na najlacnejšiu dostupnú plochu pre útok odmietnutím služby.

Náročnosť je preto pevne nastavená na 10 namiesto ponechania predvolenej hodnoty. Je to zámerne slabšie, než dnes vyberá PHP, a malo by to zaznieť jasne namiesto ukrývania: útok na hash s náročnosťou 10 je štyrikrát lacnejší než na hash s náročnosťou 12. Vyvažuje to, čo heslo naozaj chráni — viditeľnosť stránky s počtami návštev, nie účet, peniaze ani identitu. Nie je za ním nič, čo by sa dalo prevziať.

Časť, ktorú možno ľahko prehliadnuť

PASSWORD_DEFAULT je zámerne pohyblivá hodnota. Kód napísaný pred rokmi, ktorý ju používa, sa bude pri každej aktualizácii PHP potichu spomaľovať — rovnaký zdroj, rovnaký vstup, niekoľkonásobný čas behu. Je to zamýšľané správanie a pre väčšinu softvéru správne.

Nesprávne je iba vtedy, keď to stroj nezvláda, a nič nevaruje, keď to nezvláda. Aktualizácia sa podarí, testy prejdú, stránka stále funguje. Len trvá o pol sekundy dlhšie a nikto sa na toto číslo nepozrie, pokiaľ ho nejde zmerať.

Reklama