Я использую MD5 для хеширования паролей. Когда я должен перейти к следующему этапу? SHA-3?

2 октября NIST решил, что SHA-3 - это новый стандартный алгоритм хеширования.

Следует ли пользователям MD5 переходить на SHA-3? К чему-то другому (см. Ниже, почему не рекомендуется использовать SHA-3)? bcrypt?

Почему бы не использовать {MD5, SHA1, SHA256, SHA512, SHA-3 и т. д.}?

И действительно ли это важно? Даже если ваш пароль соленый?


person John Assymptoth    schedule 09.10.2012    source источник
comment
В любом случае откажитесь от MD5. Это сломано. И я не имею в виду, что в какой-то теоретической статье показано, как снизить сложность столкновения, немного сломанного. Я имею в виду, что вы можете делать вещи, которые криптографические хеш-функции нельзя предотвратить, если готовое оборудование мгновенно сломается. И его слабость использовалась для настоящих, серьезных атак (помните Flame?). Кроме того, были гораздо лучшие варианты задолго до того, как я смог программировать, почему вы используете функцию, которую криптоэксперты сказали вам прекратить использовать еще в 1996 году.   -  person    schedule 09.10.2012
comment
MSDN предлагает SHA-2 (msdn.microsoft.com/en-us /library/92f9ye3s.aspx#hash_values ​​) Также есть статья о криптографической гибкости (msdn.microsoft.com/en-us/magazine/ee321570.aspx), который касается поддержки алгоритмов изменения хэшей паролей.   -  person Peter Ritchie    schedule 09.10.2012
comment
@delnan Это немного разжигание страха, не так ли? Я далек от того, чтобы рекомендовать людям использовать MD5, но мне еще предстоит увидеть практическую атаку на хешированные пароли MD5. Конечно, они могут создать коллизию хэша для произвольного файла, но это отличается от поиска коллизии для данного хэша с целью взлома пароля.   -  person NullUserException    schedule 09.10.2012
comment
@NullUserException Это не так. Да, на самом деле не было эксплойтов MD5, раскрывающих чей-то соленый и MD5-хешированный пароль (насколько мне известно). Но реальные, серьезные атаки были проведены на основе других конфликтов MD5 (снова см. Flame для недавнего громкого и вредоносного примера). Учитывая постоянный рост вычислительной мощности и непрерывный прогресс в криптоанализе MD5, я бы не стал ставить ни копейки на то, что соленые пароли с хешированием MD5 будут непрактичными для взлома, скажем, в следующем десятилетии ...   -  person    schedule 09.10.2012
comment
@delnan Но тогда это было бы не из-за внутренней уязвимости алгоритма. Это было бы похоже на DES, который до сих пор не показал слабых мест, за исключением короткого размера ключа. Время просто отстало, что-то, что обязательно случится с каждой криптографической рутиной.   -  person NullUserException    schedule 09.10.2012
comment
(продолжение) ... Поэтому я считаю безответственным использовать MD5 где угодно рядом с криптографическими предприятиями. Мы должны избавиться от MD5 полностью, сейчас, чтобы убедиться, что ни одна из используемых на тот момент систем не основана на MD5. И я сделаю все хуже, чем они есть, если мне нужно убедить людей в этом. Сломанный не означает, что люди взламывают его прямо сейчас. См. schneier.com/blog/archives/2012/10/when_will_we_se.html для (консервативного! также прочтите комментарии) обратной стороны вычислений конверта, когда можно будет победить гораздо более сильный SHA 1.   -  person    schedule 09.10.2012
comment
@NullUserException MD5 (как и SHA1, кстати) в первую очередь не страдает от короткой длины вывода. Это не (только) компьютеры, которые были несколько быстрее, чем тогда, этого было бы недостаточно для атак, которые публикуются. Криптоанализ дал достаточно информации, чтобы проводить атаки, которые намного эффективнее грубой силы (2 ^ 51 вместо 2 ^ 128, если я правильно прочитал свои источники), с разницей, намного превышающей десятилетие компьютерный прогресс может принести. И нет никаких оснований полагать, что атаки, которые мы знаем сейчас, - лучшее, что мы когда-либо могли предпринять.   -  person    schedule 09.10.2012
comment
@delnan Вы ожидаете, что атака грубой силы на 160-битный хэш, такой как SHA1, обнаружит столкновение в 2 ^ 80, даже если оно в любом случае было совершенно безопасно (или 2 ^ 64 для MD5, если оно было совершенно безопасным). Есть ли источники по этой цифре 2 ^ 51?   -  person NullUserException    schedule 09.10.2012
comment
давайте продолжим обсуждение в чате   -  person    schedule 09.10.2012
comment
@NullUserException & delnan - что, если вы используете механизм, разрешающий только x попыткам входа в систему? Разве это не решает проблему слишком быстрой скорости?   -  person John Assymptoth    schedule 10.10.2012
comment
@JohnAssymptoth Хеширование предназначено для защиты ваших паролей в случае взлома базы данных и кражи указанных хэшей.   -  person NullUserException    schedule 10.10.2012
comment
@delnan Убедить людей использовать хорошие соли (разные для каждого пароля) и медленные конструкции (PBKDF2, scrypt или bcrypt) на несколько порядков важнее, чем убедить их не использовать MD5 для хеширования паролей. И даже при использовании с PBKDF2 SHA-3 - довольно плохой выбор, поскольку он быстрый аппаратно и медленный в программном обеспечении, что прямо противоположно тому, что вы хотите.   -  person CodesInChaos    schedule 01.11.2012
comment
@NullUserException Проблема с MD5 в качестве хэша пароля не в коллизиях. Это скорость. С помощью кластеров GPU злоумышленники могут вычислять миллиарды хэшей в секунду. Это, в сочетании с очень сложной эвристикой паролей, позволяет злоумышленникам обычно раскрывать все 8-символьные пароли или меньше в базе данных, а также любые структурированные более длинные пароли (например, my!l1ttL3,PoNy.)   -  person Stephen Touset    schedule 09.10.2013
comment
@StephenTouset Верно, но это проблема, которая затрагивает все функции хеширования общего назначения (например, MD5 и семейство SHA). Да, я был излишне педантичен, но я просто указывал, что сломанное сопротивление столкновению MD5 здесь не проблема (то есть: ответ Гамбо).   -  person NullUserException    schedule 09.10.2013
comment
@NullUserException Мне еще предстоит увидеть практическую атаку на хешированные пароли MD5. Существует практическая атака, и очевидным примером является взлом базы данных паролей Linkedin (это был SHA-1, но применяется тот же принцип). Ваше заявление будет использоваться людьми для оправдания использования паролей MD5 как достаточно надежных, что, на мой взгляд, является в высшей степени безответственным.   -  person Stephen Touset    schedule 09.10.2013
comment
Возможный дубликат безопасного хеширования пароля   -  person Gilles 'SO- stop being evil'    schedule 31.12.2015


Ответы (1)


Основная причина не использовать MD5 для хеширования паролей заключается не в том, что MD5 серьезно скомпрометирован или даже считается сломанным.

Это правда, MD5 имеет известные уязвимости. Но ни один из них не представляет серьезной угрозы для вашего использования MD5. Потому что в вашем случае единственной угрозой будет атака прообраза, когда злоумышленник попытается найти прообраз известного хэша, например пароль к известному (солёному) хешу пароля. И, вероятно, известная атака прообраза против MD5 является только теоретической и снижает усилие с 2 128 до 2 123,4, что не является большим преимуществом. Еще более перспективной является атака полным перебором со средним значением 2 64.

Нет, основная причина не использовать MD5 заключается в том, что MD5 слишком быстрый. С помощью доступного сегодня компьютера вы можете генерировать и тестировать 7190 млн хэшей MD5 в секунду. Все 8-символьные комбинации буквенно-цифровых символов могут быть подвергнуты перебору примерно за 8,5 часов, независимо от того, с солью или без нее.

В отличие от этого, с помощью хеш-функции, такой как bcrypt $2a$, можно генерировать и тестировать только 4085 хешей в секунду, то есть только 0,00005682% от количества хешей MD5. С bcrypt $2a$ вам понадобится 1694 года для той же попытки.

person Gumbo    schedule 09.10.2012
comment
А как насчет SHA-3? Это тоже слишком быстро? - person John Assymptoth; 09.10.2012
comment
@JohnAssymptoth Алгоритм SHA-3 был анонсирован только неделю назад, и, вероятно, еще не проведено много исследований. Я не знаю, как это работает. Но SHA - это скорее алгоритмы хеширования общего назначения, чем алгоритмы хеширования паролей. - person Gumbo; 09.10.2012
comment
Это быстрее, чем SHA-2. Он был разработан для безопасности, а затем для скорости. Я следил за соревнованиями. bcrypt или PBKDF2 - лучший вариант. - person Maarten Bodewes; 10.10.2012
comment
@owlstead SHA-3 быстрее или медленнее, чем SHA-2? Не уверен, ошиблись вы или нет. Значит ли это, что он даже более уязвим, чем SHA-2 (с грубой силой)? - person John Assymptoth; 10.10.2012
comment
@Gumbo, что, если вы используете механизм, разрешающий только x попыток входа в систему? Разве это не решает проблему слишком быстрой скорости? - person John Assymptoth; 10.10.2012
comment
@JohnAssymptoth Вы должны различать офлайн-атаки и онлайн-атаки. Онлайн-атаки намного медленнее, чем офлайн-атаки. Указанная скорость применима только для офлайн-атак, когда злоумышленник уже имеет хэши паролей. Для сетевых атак грубая сила не подходит. Вы бы предпочли попробовать словарную атаку со словарем наиболее часто используемых паролей. Но вы все равно можете реализовать некоторые функции, которые ограничивают количество попыток конкретного клиента или пользователя. - person Gumbo; 10.10.2012
comment
@JohnAssymptoth Speed ​​не является частью безопасности криптографических хэшей - чем быстрее хеширование, тем лучше. Вот почему вместо этого вам следует использовать функцию деривации ключа (KDF). PBKDF2 и bcrypt являются примерами этого. Они могут использовать хэш внутри, но они используют соль и ряд итераций, чтобы сохранить запас безопасности для атак грубой силы. - person Maarten Bodewes; 10.10.2012