Zadejte hledaný výraz...

[N] Bezpečnější nativní API pro hashování hesel v PHP 5.5 (bcrypt, load 10)

PHP 5.5 představí bezpečnější metodu pro hashování hesel:
password_hash($password, PASSWORD_DEFAULT);
a
password_verify($password, $hash);
V defaultním nastavení password_hash() použije bcrypt s work faktorem 10 (tedy 2^10 iterací, adekvátní pro dnešní hardware).
Výstup z password_hash() obsahuje vše nutné k budoucímu ověření hesla - algoritmus, work factor, salt i samotný hash.
Výstup může vypadat např. takto:
password_verify() všechny potřebné informace vyčte z tohoto řetězce, proto nepotřebuje žádné další informace než heslo a hash k porovnání. Stejně tak není potřeba měnit kód při změně algoritmu ani loadu (!).
Povídání je tu
https://gist.github.com/3707231
Technický popis tu
https://wiki.php.net/rfc/password_hash
A implementace pro starší verze PHP tu
https://github.com/ircmaxell/password_compat
12. 9. 2012 21:27:38
https://webtrh.cz/diskuse/n-bezpecnejsi-nativni-api-pro-hashovani-hesel-v-php-5-5-bcrypt-load-10#reply807552
Dolphi
verified
rating uzivatele
(28 hodnocení)
12. 9. 2012 22:05:35
Super!
12. 9. 2012 22:05:35
https://webtrh.cz/diskuse/n-bezpecnejsi-nativni-api-pro-hashovani-hesel-v-php-5-5-bcrypt-load-10#reply807551
Zajímavý detail z komentářů pod gistem: Funkce password_verify() používá srovnání s konstantním časem, takže není zranitelná proti časovacím útokům.
Další bod plus.
13. 9. 2012 10:50:46
https://webtrh.cz/diskuse/n-bezpecnejsi-nativni-api-pro-hashovani-hesel-v-php-5-5-bcrypt-load-10#reply807550
Ondřej Švec
verified
rating uzivatele
13. 9. 2012 12:27:29
Napsal Martin Schlemmer;843924
Zajímavý detail z komentářů pod gistem: Funkce password_verify() používá srovnání s konstantním časem, takže není zranitelná proti časovacím útokům.
Další bod plus.
Můžeš trochu přiblížit pojem "konstatní čas"? To slyším prvně. Díky
13. 9. 2012 12:27:29
https://webtrh.cz/diskuse/n-bezpecnejsi-nativni-api-pro-hashovani-hesel-v-php-5-5-bcrypt-load-10#reply807549
Porovnávání řetězce znak po znaku trvá na tomtéž HW různou dobu podle toho, na kterém znaku dojde k neshodě. Na tom jsou založené tzv. timing attacks, které dokáží brute forcovat hesla jen za pomocí rozdílného časování a odpovědi ano/ne.
Timing attacks fungují v kombinaci se statistikou i přes internet.
Proto se používají metody, které porovnávají dva různé řetězce vždy za stejnou dobu, nezávisle na místě první neshody.
Viz třeba právě password_verify()
https://github.com/ircmaxell/password_compat/blob/master/lib/password.php
V případě neshody se nezastaví a nevrátí hned výsledek, ale pokračuje ve srovnávání až do konce, přestože už zná výsledek.
13. 9. 2012 12:58:38
https://webtrh.cz/diskuse/n-bezpecnejsi-nativni-api-pro-hashovani-hesel-v-php-5-5-bcrypt-load-10#reply807548
Pro odpověď se přihlašte.
Přihlásit