Возможные дубликаты:
хэш (хэш()) против соленого хэша
Много итераций хеширования: добавлять соль каждый раз?
Читая недавний ответ, я пришел к этот пикантный пост в блоге о хешировании паролей, и хотя я уже был знаком с большинством объясненных там методов, у меня возникли некоторые сомнения - самые уместным из них является почему важна соль, если мы растягиваем (многократно хэшируем) наш хэш?
Например, если мы возьмем строку «password
» и применим 1000 итераций хеширования SHA-1, мы получим «862e52b42b26c0f7e2b6ef5f635226bf0fd3f7fb
» в качестве нашего окончательного хэша, сильно отличающегося от «5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8
», если бы мы хешировали его только один раз. Разве эти итерации не считаются средством засолки? На второй итерации мы уже хэшируем 40-символьную строку, а это значит, что злоумышленнику нужно либо точно знать, сколько итераций мы использовали (аналогично злоумышленник может угадать и нашу секретную соль), либо сгенерировать радужная таблица всех 1 461 501 637 330 902 918 203 684 832 716 283 019 655 932 542 976 комбинаций (16^40
).
Дополнительные вопросы по засолке:
- Используете ли вы статические или динамические соли (одноразовые номера)? И почему?
- Если вы используете одноразовые номера, какого размера вы их делаете и где вы их храните (префикс, столбец, ...)?
Я понимаю дополнительное преимущество использования одноразовых номеров по сравнению со статическим (длинным) солением, но я не могу представить себе сценарий, в котором злоумышленник мог бы приложить усилия, необходимые для успешного совпадения грубой силы (я думаю, что более вероятно, что они найдут хеш-коллизию до этого). Кроме того, если мы хэшируем с использованием одноразовых номеров, нам нужно выполнить два запроса к базе данных вместо одного (один для получения одноразового номера, чтобы мы могли вычислить хэш, и еще один для его проверки). Честно говоря, я не понимаю, почему растяжка сама по себе не считается «безопасной».
Кроме того, почему так много людей используют реализации SHA > 1? Разве SHA-1 все еще не безопасен? Должны ли новостные приложения использовать новейшую реализацию SHA, доступную для хеширования конфиденциальных данных? Что происходит, когда «старым» приложениям, все еще использующим MD5/SHA-1, необходимо перенести свои хэши на более новую реализацию?