2012-06-23 2 views
5

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

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

Альтернативы подобны SHA-1 и т. Д., Которые сильнее и менее подвержены трещинам. Это имеет смысл.

Чтобы добраться до точки:

  1. Почему md5 до сих пор широко используется для хэширования
  2. Должен ли я автоматически обесценить md5 для хэширования паролей, или есть конкретные случаи использования, где его использование было бы на самом деле лучше, чем другие механизмы хэширования?
+0

Возможный дубликат [PHP может обрабатывать 40+ алгоритмов хеширования. Итак, почему md5 является стандартом de facto?] (Http://stackoverflow.com/questions/11062597/php-can-handle-40-hashing-algorithms-so-why-is-md5-the-de-facto-standard) – hakre

ответ

8

Ни один из MD5 и SHA-1 не должен использоваться для хэширования паролей. Они рассчитаны на быстрое вычисление, что именно то, чего вы не хотите. Если люди используют эти алгоритмы хеширования для хеширования паролей, это, вероятно, потому, что они не знают об альтернативах.

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

Связанные

+0

Спасибо, Марк. Похоже, что между ответами стоит вопрос о том, что bcrypt - лучшее решение. Я исследую это как вариант. Знаете ли вы, будут ли проблемы с производительностью на веб-сайтах большого трафика, используя это как метод проверки подлинности для своих пользователей? –

+0

@JohnMoore: на сайтах большого трафика всегда могут возникать проблемы с производительностью, независимо от того, какой метод аутентификации вы используете.Аутентификация обычно будет лишь малой частью общей загрузки сервера. –

+0

Это не полный ответ. если это так же просто, как вы заявляете, почему приложения, которые широко используются в качестве wordpress и joomla, используют прямое хеширование md5 для пользовательских паролей? Я не знаю ответа, но мне очень любопытно! – giorgio

0

Почему md5 до сих пор широко используется для хэширования

Это совершенно нормально, если вы хотите, например, проверьте программу на достоверность (md5 ваш ISO). То, что некоторые люди используют это для вещей, которые он не должен использовать (больше), не должен вас беспокоить и невозможен :)

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

Да. Скидка, если вы используете его для паролей. Вы уже нашли недостатки, но посмотрите, что говорит @markbyers о том, что вы используете , например,. bcrypt

+0

Фактически для проверки больших кусков данных (то есть ISO), где злоумышленник также имеет доступ к исходному ISO, MD5 не является хорошим выбором. Это точно правильные условия для известной второй предварительной атаки на MD5 и позволяют злоумышленнику включать дополнительный контент в ISO и, тем не менее, его проверить. – Alnitak

+1

Конечно, проверка ISO из неизвестного источника требует большей безопасности. С другой стороны, если у меня есть программа на моем сайте, я добавляю MD5, чтобы избежать проблем с загрузкой. Если злоумышленник изменил мою ISO, они также могут изменить упомянутый хэш MD5 на том же сайте, так зачем же беспокоиться? Во всяком случае, это был всего лишь пример, чтобы дать одну из причин, почему люди используют это, потому что это был вопрос. Никогда не говорил, что с ним не было никаких проблем ... – Nanne

+0

Это не главное - хэши MD5 часто размещаются отдельно через другой канал, поэтому хакеру обычно не удается изменить как файл _and_ опубликованный дайджест. То, что я пытался сделать, это то, что MD5 по-прежнему (в чистом смысле криптоанализа) так же хорош, как когда-либо, для паролей, но _isn't_ для проверки файлов. Единственное, что изменилось w.r.t. проверка пароля заключается в том, что закон Мура теперь позволяет выполнить проверку грубой силы миллионами паролей в секунду. – Alnitak

1

По этой же причине используются функции mysql_*, большинство ресурсов и учебных пособий в Интернете устарели с информацией, в результате чего программисты-новички используют их вслепую (потому что в учебнике сказано так!).

Я не обвиняю новых программистов, я обвиняю разработчиков, не обновляющих их учебники. Алгоритм поиска Google также обычно учитывает возраст, и отображает более ранние записи, более высокие в результатах поиска.

Что касается альтернатив, я считаю, что Марк Байерс сказал это лучше, чем я могу.

0

Почему md5 все еще широко используется для хеширования?

Это не так. Даже Wordpress оставил его много лет назад. И Wordpress широко используется.

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

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

0

MD5 еще достаточно безопасным для использования в большинстве случаев [*], до тех пор, пока вы используете хороший «соль», чтобы смешать с фактическим паролем, прежде чем он зашифрован.

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

«Соль», упомянутая выше, необходима для того, чтобы ваши зашифрованные пароли не могли быть тривиально просмотрены в «таблице радуги» или других существующих списках «строка для переваривания».

Недавняя утечка паролей Linked-In является хорошим примером того, почему соль важна. Они не смогли солить пароли своих пользователей, поэтому многие пароли были тривиально отменены, потому что хэши этих паролей уже вычислены (и во многих случаях найдены через Google).

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

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

Все, что сказано, если имеется лучший алгоритм (SHA-2, bcrypt), вы можете его использовать!

[*] Я бы не использовал MD5 для чего-либо, связанного с электронной коммерцией!

+0

MD5 не безопасен ни для чего связанного с безопасностью. Особенно не пароли. Даже если в MD5 не обнаружены недостатки, это все равно не подходит для паролей, потому что это слишком быстро. [Соль ** не ** сохранила LinkedIn] (http://security.stackexchange.com/q/15910/1472). В эти дни быстрее скопировать пароль MD5 (или SHA1), чем читать таблицу радуги с диска. Хеши LinkedIn уже были обнулены перед утечкой, которые не могли произойти, если соль была использована. Семейство SHA2 слишком быстро. Используйте bcrypt, scrypt или PBKDF2. – Ladadadada

+0

@Ladadadada Конечно, используйте bcrypt, scrypt, что угодно, я согласен, что все это лучшая практика. Но факт остается фактом: при правильной случайной соли (скажем, в 256 бит), где каждый пароль имеет разную соль и неизвестен хакеру, он должен будет дольше, чем срок жизни Вселенной, переходить в режим MD5 даже с каждой карточкой NVidia, когда-либо сделанной , Было бы намного быстрее перевести пароль в логин с 1 попыткой в ​​секунду, чем перевести хэш. И большинство комментариев по ответу, с которым вы связаны, похоже, согласны с этим. – Alnitak

+0

Проверка всего пространства ключей MD5, конечно, дольше, чем срок службы юниверса. Проверка 8 символов всего ASCII для печати, заданного как MD5? 35 дней с одним Radeon HD 5830 за 170 долларов США [с использованием этой таблицы] (http://golubev.com/gpuest.htm). И, вероятно, половина этого в среднем, чтобы найти пароль. Соль не изменяет время, затрачиваемое на проверку одного пароля (если только он не является достаточно большим, чтобы доступ к диску был узким местом). Это только заставляет каждый пароль разбиваться по отдельности. И, пожалуйста, объясните, как 1 попытка в секунду может быть быстрее 3,3 миллиарда в секунду? – Ladadadada

Смежные вопросы