2011-07-03 5 views
2

Можно создать дубликат:
Is “double hashing” a password less secure than just hashing it once?Стоит ли снова хешировать пароль снова и снова?

Что я получаю, делая это? Он замедляет хеширование ... автоматически ли он позволяет каким-то образом узнать пароль из хэша?

$password = '123456'; 

$iterations = 8; 

$is_first = true; 
for ($i = 0; $i < $iterations; ++$i) { 
    if ($is_first === true) { 

     $hashed_password = hash('sha256', $password); 

    } else { 

     $hashed_password = hash('sha256', $hashed_password); 

    } 

    $is_first = false; 
} 

Если да, то сколько итераций было бы необязательным?

Какие еще варианты улучшения безопасности паролей вы бы рекомендовали (кроме соли и арахиса)?

+1

Вы можете упростить этот код, просто установив '$ hashed_password = $ password' в начале, а затем оставив большой блок if/else ... – Amber

+1

Голосовать, чтобы закрыть:« Какие еще варианты улучшения безопасности паролей » * слишком * слишком широк, чтобы отвечать как вопрос SO. –

+0

@Amber: В любом случае вы что-то дублируете. Я предпочитаю это так, так как вся логика тогда лексически рядом. –

ответ

1

Замедленное хеширование хорошее.

Если враг получает ваши хэши паролей, вы хотите, чтобы он был вынужден потратить много времени, чтобы попробовать каждый хэш.

+1

Это верно даже в сценарии, когда злоумышленник не имеет ваших хэшей и просто грубо заставляя ваш механизм безопасности. –

+1

@ Oli: У вас должна быть лучшая защита от этого. – SLaks

+0

Я всегда предлагал несколько методов хэширования. Например, 'hash ('md5', $ salt. $ Password) .hash ('sha256', $ salt. $ Password)'. Это, в общем, затрудняет поиск дублирующего пароля, который соответствует хешу. Мы также заставляем наших пользователей использовать «пароль» вместо пароля. «Мой день рождения - 1 января» - это гораздо более сложный пароль для грубой силы и намного проще запомнить для пользователя. – Rahly

Смежные вопросы