Почему CRYPT_BLOWFISH в PHP считается лучше, когда он производит более короткие хэши, чем SHA

Почему CRYPT_BLOWFISH в PHP считается лучшим для хеширования паролей, когда он производит более короткие хэши, чем CRYPT_SHA-256/512? Разве не проще найти другое слово, которое вычисляет тот же хэш BLOWFISH, чем хеш SHA256/512?

Примеры хэшей взяты из руководства php.net:

Blowfish: $2a$07$usesomesillystringfore2uDLvp1Ii2e./U9C8sBjqp8I90dH6hi
SHA-256:  $5$rounds=5000$usesomesillystri$KqJWpanXZHKq2BOB43TSaYhEWsQ1Lr5QNyPCDH/Tp.6
SHA-512:  $6$rounds=5000$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21

person d-ph    schedule 15.04.2013    source источник
comment
Потому что это гораздо более медленный алгоритм. Это то, что вы хотите для хеширования пароля.   -  person PeeHaa    schedule 15.04.2013


Ответы (1)


Что делает bcrypt безопасным, так это то, что он намного медленнее вычисляется, чем любой другой алгоритм.

С любой версией SHA вы можете получить более совершенные компьютеры и создать радужную таблицу в кратчайшие сроки. С bcrypt это все равно займет целую вечность, этот алгоритм требует много времени. Таким образом, практически невозможно восстановить исходные пароли из хэша.

Вы можете увидеть эту ссылку для получения дополнительной информации. Вы также можете просмотреть эту ветку из Безопасность StackExchange, которая полностью покрывает это!


Что касается того факта, что хэш получается меньше, ну, это вообще не имеет значения, потому что, как я уже сказал, если вы хотите узнать, от какого пароля исходит хэш, это займет целую вечность.

См. эту тестовую среду. Если просто установить коэффициент загрузки более 15, выполнение займет более 3 секунд. Попробуйте поиграть с ним, и вы поймете, почему он безопасен.

Код в песочнице:

$time = microtime(true);
$pass =  crypt('myNewPassword', '$2y$15$usesomesillystringforsalt$');
$end_time = microtime(true);

$diff = $end_time - $time;
echo "$pass\n$diff"

Выход:

$2y$15$usesomesillystringforTfp6/FuUgyb1HKFA36V9tf6Go5xlv/a
2,4688489437103

1 хэш занимает 2,5 секунды! Представьте, что вы пытаетесь взломать миллионы паролей!

person Hugo Dozois    schedule 15.04.2013