Хеширование - соление и растяжение

Возможные дубликаты:
хэш (хэш()) против соленого хэша
Много итераций хеширования: добавлять соль каждый раз?

Читая недавний ответ, я пришел к этот пикантный пост в блоге о хешировании паролей, и хотя я уже был знаком с большинством объясненных там методов, у меня возникли некоторые сомнения - самые уместным из них является почему важна соль, если мы растягиваем (многократно хэшируем) наш хэш?

Например, если мы возьмем строку «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).

Дополнительные вопросы по засолке:

  1. Используете ли вы статические или динамические соли (одноразовые номера)? И почему?
  2. Если вы используете одноразовые номера, какого размера вы их делаете и где вы их храните (префикс, столбец, ...)?

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

Кроме того, почему так много людей используют реализации SHA > 1? Разве SHA-1 все еще не безопасен? Должны ли новостные приложения использовать новейшую реализацию SHA, доступную для хеширования конфиденциальных данных? Что происходит, когда «старым» приложениям, все еще использующим MD5/SHA-1, необходимо перенести свои хэши на более новую реализацию?


person Alix Axel    schedule 02.01.2011    source источник
comment
Вы должны попытаться разбить это на множество отдельных вопросов.   -  person Andy    schedule 02.01.2011