Повторное хеширование хешированного пароля - PullRequest
4 голосов
/ 19 августа 2011

Предполагаемые знания
Перемешивание, соление, PBKDF [1-2]

Проблема
Я храню пароли в своей базе данных, используя масштабированный алгоритм хеширования / посола, такой как PBKDF2. Я подумал: «Эй, если я хеширую свои пароли 20000 раз, это должно быть достаточно безопасно против атак грубой силы, верно?» и это правда. до следующего года, когда появятся лучшие компьютеры.

Возможное решение

Оставляя в стороне вопрос о длине ключа шифрования и длине соли (который также может быть включен в это решение), я подумал, что если каждые N дней я повторно хэширую все пароли в базе данных. Таким образом, они хэшируются 20 000 раз, затем неделю спустя, я хеширую их еще 500 раз, в результате чего их получается 20 500 раз. Сохраните количество раз, когда оно было где-то хешировано в базе данных. Идея состоит в том, чтобы увеличить количество хэшей по мере развития технологий.

Существующие аналогичные реализации
BCrypt вводит рабочий фактор для увеличения времени, необходимого для хеширования пароля:
PBKDF2 использует несколько итераций, чтобы сделать то же самое. Это используется Mac OS-X, Windows и Linux для шифрования на уровне файлов. Сети Wi-Fi также используют его реализации.

Кто-нибудь может увидеть проблему с этим? Это уже пробовали? Существует ли алгоритм, который принимает предварительно хешированный пароль и повторно хэширует его «N» раз?

Редактировать
Вопрос не в том, безопасно ли многократное хеширование (это было опробовано и проверено). Вопрос заключается в повторном хешировании для повышения безопасности без необходимости заставлять пользователей переустанавливать свои пароли

Решение: вежливость обсуждения с JVestry

Так что повторное хеширование всех паролей каждые 'N' дней - пустая трата времени, поскольку хакер может просто взломать его, используя старую копию базы данных. Однако , если объединить концепцию увеличения числа хэшей с течением времени с политикой обновления пароля, концепция будет разумной.

Осуществление
Срок действия всех паролей истекает каждые 30 дней. Когда они обновляются, их счетчик хешей увеличивается. Таким образом, сброс пароля вчера будет сложнее взломать, чем тот, который был установлен 20 дней назад. Хеш-счетчик может быть сохранен или получен из алгоритма с использованием даты последнего изменения.

Спасибо!

TTD

Ответы [ 2 ]

3 голосов
/ 19 августа 2011
Can anyone see a problem with this?

Да. Если предположить, что вы будете еженедельно перефразировать с солью (что, я думаю, вы имеете в виду), проблема все еще остается. Если кому-то удастся получить доступ к хешированному паролю на неделе x, то дальнейшее хеширование на неделе x + n не обеспечит дополнительной безопасности.

Хакеру нужно работать над такой итерацией только на неделе x. Как только ключ сломан, он / она просто должен хэшировать его немного больше, чем вы делаете каждую неделю. Это очень легко и совершенно незаметно.

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

2 голосов
/ 19 августа 2011

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

Вам лучше использовать больше соли.

...