MD5 менее безопасный, чем SHA и. al. в практическом смысле?

когда все данные загружены, вам нужно добавить это

infiniteScroll.target.disabled = true;
9
задан Community 23 May 2017 в 12:06
поделиться

11 ответов

Да, на практике стоит побеспокоиться. MD5 настолько сильно сломан, что исследователи смогли подделать поддельные сертификаты, которые соответствовали реальному сертификату, подписанному центром сертификации. Это означало, что они могли создавать свои собственные поддельные центры сертификации и, таким образом, могли выдавать себя за любой банк или бизнес, которые им нравились, с полностью доверяющими им браузерами.

Теперь это заняло у них много времени и усилий с использованием кластера PlayStation. 3 с, и несколько недель, чтобы найти подходящее столкновение. Но после взлома алгоритм хеширования становится только хуже, а не лучше. Если вам абсолютно небезразлична безопасность, было бы лучше выбрать непрерывный алгоритм хеширования, такой как один из семейства SHA-2 (SHA-1 также был ослаблен, хотя и не сломан так же плохо, как MD5 . есть)

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

  1. Как описано, ваш алгоритм предполагает хранение пароля в виде простого текста на сервере. Это означает, что вы уязвимы для любых атак раскрытия информации, которые могут обнаружить пароли на сервере. Вы можете подумать, что если злоумышленник сможет получить доступ к вашей базе данных, игра будет запущена, но ваши пользователи, вероятно, предпочтут, если даже если ваш сервер будет взломан, их пароли не будут. Из-за распространения паролей в сети многие пользователи используют одинаковые или похожие пароли в разных сервисах. Кроме того, атаки раскрытия информации могут быть возможны даже в тех случаях, когда атаки на выполнение кода или повышение привилегий не возможны.

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

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

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

  4. Хотя текущая атака на MD5 может не работать против описанного вами протокола, MD5 имеет был сильно скомпрометирован, и хэш будет только слабее, а не сильнее. Готов поспорить, что вы узнаете о новых атаках, которые могут быть использованы против вас, и у вас будет время обновить алгоритмы хэширования, прежде чем ваши злоумышленники смогут использовать его? Вероятно, было бы легче начать с чего-то, что в настоящее время сильнее, чем MD5, чтобы уменьшить ваши шансы справиться с тем, что MD5 будет разбит дальше.

Теперь, если вы просто делаете это, чтобы никто не подделал сообщение от другого пользователя на форуме или что-то в этом роде, Маловероятно, что кто-то потратит время и усилия, чтобы нарушить протокол, который вы описали. Если кто-то действительно хочет выдать себя за кого-то другого, он может просто создать новое имя пользователя с 0 вместо O или что-то еще более похожее, используя Unicode, и даже не пытаться подделать сообщение и нарушить алгоритмы хэширования.

Если это используется для чего-то, что действительно важно для безопасности, не изобретайте свою собственную систему аутентификации. Просто используйте TLS / SSL . Одним из основных правил криптографии является не изобретать свои собственные . И потом, даже в случае форума, где это, вероятно, не так уж важно, разве не будет проще просто использовать что-то проверенное с полки, чем раскручивать свое собственное?

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

Если это используется для чего-то, что действительно важно для безопасности, не изобретайте свою собственную систему аутентификации. Просто используйте TLS / SSL . Одним из основных правил криптографии является не изобретать свои собственные . И потом, даже в случае форума, где это, вероятно, не так уж важно, разве не будет проще просто использовать что-то проверенное с полки, чем раскручивать свое собственное?

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

Если это используется для чего-то, что действительно важно для безопасности, не изобретайте свою собственную систему аутентификации. Просто используйте TLS / SSL . Одним из основных правил криптографии является не изобретать свои собственные . И потом, даже в случае форума, где это, вероятно, не так уж важно, разве не будет проще просто использовать что-то проверенное с полки, чем раскручивать свое собственное?

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

Если это используется для чего-то где безопасность действительно важна, тогда не изобретайте свою собственную систему аутентификации. Просто используйте TLS / SSL . Одним из основных правил криптографии является не изобретать свои собственные . И потом, даже в случае форума, где это, вероятно, не так уж важно, разве не будет проще просто использовать что-то проверенное с полки, чем раскручивать свое собственное?

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

Если это используется для чего-то где безопасность действительно важна, тогда не изобретайте свою собственную систему аутентификации. Просто используйте TLS / SSL . Одним из основных правил криптографии является не изобретать свои собственные . И потом, даже в случае форума, где это, вероятно, не так уж важно, разве не будет проще просто использовать что-то проверенное с полки, чем раскручивать свое собственное?

не изобретайте свою собственную систему аутентификации. Просто используйте TLS / SSL . Одним из основных правил криптографии является не изобретать свои собственные . И потом, даже в случае форума, где это, вероятно, не так уж важно, разве не будет проще просто использовать что-то проверенное с полки, чем раскручивать свое собственное?

не изобретайте свою собственную систему аутентификации. Просто используйте TLS / SSL . Одним из основных правил криптографии является не изобретать свои собственные . И потом, даже в случае форума, где это, вероятно, не так уж важно, разве не будет проще просто использовать что-то проверенное с полки, чем раскручивать свое собственное?

29
ответ дан 4 December 2019 в 05:56
поделиться

В этом конкретном случае я не думаю, что самое слабое звено вашего приложения использует md5, а чем ша. Способ, которым md5 «ломается», заключается в том, что, учитывая, что md5 (K) = V, можно генерировать K 'таким образом, что md5 (K') = V, потому что выходное пространство ограничено (не потому, что есть какие-либо трюки, чтобы уменьшить пространство поиска). Однако K 'не обязательно является K. Это означает, что если вы знаете md5 (M + T + P) = V, вы можете сгенерировать P' так, чтобы md5 (M + T + P ') = V, это дает действительную запись. Однако в этом случае сообщение остается прежним, и P не был скомпрометирован. Если злоумышленник попытается подделать сообщение M 'с отметкой времени T', маловероятно, что md5 (M '+ T' + P ') = md5 (M' + T '+ P), если только P' = P. В этом случае они бы взломали пароль. Если они взломали пароль, то это означает, что не имеет значения, использовали ли вы sha или md5, поскольку проверка того, что md5 (M + T + P) = V эквивалентна проверке, является ли sha (M + T + P). ) = V. (за исключением того, что вычисление ша может занять постоянное время, что не влияет на сложность грубой силы на P).

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

Во-вторых, вам, вероятно, не следует хранить пароль пользователя в вашей базе данных в виде простого текста. То, что вы должны сохранить, это хеш пароля, а затем использовать его. В вашем примере хеш будет иметь: md5 (сообщение + время + md5 (пароль)), и вы можете безопасно хранить md5 (пароль) в вашей базе данных. Однако злоумышленник, крадущий вашу базу данных (с помощью SQL-инъекции), все равно сможет подделать сообщения. Я не вижу никакого способа обойти это.

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

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

12
ответ дан 4 December 2019 в 05:56
поделиться

, если вы собираетесь генерировать хэш-макинтош не выдумывай свою схему. используйте HMAC . Есть проблемы с выполнением HASH (секретный ключ || message) и HASH (сообщение || секретный ключ). если вы используете пароль в качестве ключа, вы также должны использовать функцию получения ключа. взгляните на pbkdf2 .

1
ответ дан 4 December 2019 в 05:56
поделиться

There is nothing insecure about using MD5 in this manner. MD5 was only broken in the sense that, there are algorithms that, given a bunch of data A additional data B can be generated to create a desired hash. Meaning, if someone knows the hash of a password, they could produce a string that will result with that hash. Though, these generated strings are usually very long so if you limit passwords to 20 or 30 characters you're still probably safe.

The main reason to use SHA1 over MD5 is that MD5 functions are being phased out. For example the Silverlight .Net library does not include the MD5 cryptography provider.

0
ответ дан 4 December 2019 в 05:56
поделиться

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

Насколько это распространено? В 2007 году группа из Нидерландов объявила, что предсказала победителя президентских выборов 2008 года в файле со значением хеш-функции MD5 3D515DEAD7AA16560ABA3E9DF05CBC80 . Затем они создали двенадцать файлов, все идентичные, за исключением имени кандидата и произвольного числа пробелов, которые хэшируются до этого значения. Хэш-значение MD5 бесполезно в качестве контрольной суммы, потому что слишком много разных файлов дают одинаковый результат.

Это тот же сценарий, что и у вас, если я правильно вас понял. Просто замените «имя кандидата» на «секретный пароль». Если вы действительно хотите быть в безопасности,

2
ответ дан 4 December 2019 в 05:56
поделиться

MD5 обеспечивают больше коллизий, чем SHA, что означает, что кто-то может фактически получить тот же хеш из другого слова (но это редко).

Семейство SHA известно своей надежностью, SHA1 был стандартным для ежедневное использование, в то время как SHA256 / SHA512 был стандартом для правительственных и банковских устройств.

Для вашего личного веб-сайта или форума я предлагаю вам рассмотреть вопрос о SHA1, а если вы создаете более серьезный тип торговли, я предлагаю вам использовать SHA256 / SHA512 (семейство SHA2)

Вы можете проверить статью в Википедии о MD5 & SHA

0
ответ дан 4 December 2019 в 05:56
поделиться

Ответ Брайана охватывает вопросы, но я думаю, что его нужно объяснить чуть менее многословно

Вы используете неправильный криптографический алгоритм здесь

MD5 здесь неправильный, Sha1 - это неправильно использовать здесь Sha2xx неправильно использовать, а Skein использовать неправильно.

То, что вы должны использовать, - это что-то , похожее на RSA .

Позвольте мне объяснить:

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

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

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

Ни один человек посередине не сможет сказать, что в сообщениях, и никто не сможет подделать сообщения.

В примечании стороны, MD5 достаточно сильный , большая часть время.

8
ответ дан 4 December 2019 в 05:56
поделиться

Это зависит от того, насколько ценным является содержание сообщений. Семейство SHA явно более безопасно, чем MD5 (где «более безопасный» означает «сложнее подделать»), но если ваши сообщения обновляются в твиттере, то вам, вероятно, все равно

Если эти сообщения являются уровнем IPC распределенной системы, которая обрабатывает финансовые транзакции, то, возможно, вас это волнует.

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

Обновление 2: это гораздо более подробный ответ: http://www.schneier.com/essay-074.html

5
ответ дан 4 December 2019 в 05:56
поделиться

Я не собираюсь комментировать MD5 / SHA1 / и т. Д. вопрос, так что, возможно, вы посчитаете этот вопрос спорным, но кое-что, что меня очень немного удивляет, это всякий раз, когда используется MD5 и соавт. для хеширования паролей в базах данных.

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

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

0
ответ дан 4 December 2019 в 05:56
поделиться

Оба MD5 и SHA-1 имеют криптографические уязвимости. MD4 и SHA-0 также скомпрометированы.

Вероятно, вы можете безопасно использовать MD6, Whirlpool и RIPEMD-160.

См. Следующую презентацию из Принстонского университета, прокрутите вниз до последней страницы.

http: / /gcu.googlecode.com/files/11Hashing.pdf[1223 impression

0
ответ дан 4 December 2019 в 05:56
поделиться

Да, стоит побеспокоиться о том, какой хеш использовать в этом случае. Давайте сначала посмотрим на модель атаки. Злоумышленник может не только попытаться сгенерировать значения md5 (M + T + P), но также может попытаться найти пароль P. В частности, если атакующий может собрать наборы значений M i , T i , и соответствующий md5 (M i , T i , P), то он / она может попытаться найти P. Эта проблема не изучалась как широко используется для хэш-функций, например, для поиска коллизий. Мой подход к этой проблеме состоял бы в том, чтобы попробовать те же типы атак, которые используются против блочных шифров: например, дифференциальные атаки. А поскольку MD5 уже очень уязвим для дифференциальных атак, я могу предположить, что такая атака здесь может быть успешной.

Поэтому я рекомендую вам использовать здесь более сильную хеш-функцию, чем MD5. Я также рекомендую вам использовать HMAC вместо md5 (M + T + P), потому что HMAC был разработан для описываемой вами ситуации и был соответствующим образом проанализирован.

1
ответ дан 4 December 2019 в 05:56
поделиться
Другие вопросы по тегам:

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