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

Учитывая известные слабые места MD5 и недавнего слабые места (мая 2009) обсудили в SHA1, как новые программы должны солить и хешировать свои пароли?

Я видел SHA-256 и предложенный SHA-512.

Программированию преимущественно в Ruby on Rails и использованию PostgreSQL - но другие языки и среды, возможно, также придется вычислить хэши пароля.

18
задан Hissohathair 31 March 2010 в 02:06
поделиться

4 ответа

SHA-256 и SHA-512 безопасны в обозримом будущем. Они принадлежат к семейству SHA-2, атак против которого пока не выявлено. На этой странице в википедии говорится, что поставщики Unix и Linux только сейчас переходят на SHA-2 для безопасного хеширования паролей. Семейство SHA-3 с еще более сильными алгоритмами находится в стадии разработки, но будет готово не раньше 2012 года.

P.S: Если вы не скрываете имена секретных агентов от правительств, вы также будете в безопасности с SHA-1, но если нет проблем с реализацией SHA-2, просто используйте его.

21
ответ дан 30 November 2019 в 06:59
поделиться

Используйте медленную функцию, например bcrypt. Вот пост от ребят из Phusion.

17
ответ дан 30 November 2019 в 06:59
поделиться

Вы должны использовать хеш-имя пользователя, пароль и соль вместе, например:

hash(length(username)+"_veryuniquesalt4rtLMAO"+username+password)

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

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

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

Независимо от того, что вы выберете, немного медленного хеширования лучше, чем ничего. Используйте 1 миллисекунду вместо 1 микросекунды, и ваша защита станет в 1000 раз сильнее.

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

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

-4
ответ дан 30 November 2019 в 06:59
поделиться

В качестве результата uid / pwd следует использовать функцию получения ключа на основе пароля; наиболее известным является PBKDF2 http://en.wikipedia.org/wiki/PBKDF2 , также определяемый как RFC 2898 http://tools.ietf.org/html/rfc2898 . PKBDF2 принимает ваши секретные данные, а также соль и счетчик итераций. Это стандартный способ решения вашей проблемы.

Если вы программируете в .NET, используйте Rfc2898DeriveBytes http://msdn.microsoft.com/en-us/library/system.security.cryptography.rfc2898derivebytes.aspx

8
ответ дан 30 November 2019 в 06:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: