2009-11-17 2 views
2

Я не эксперт по безопасности ... так что, возможно, я ошибаюсь.Есть ли точки шифрования паролей с более чем md5?

Правильно ли я имею в виду, что единственное преимущество использования более сильного алгоритма заключается в замедлении взлома пароля?

В каком случае они должны иметь хеш-пароль и поэтому уже будут содержать мою базу данных?

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

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

Я реализовал SHA256 ... но я интересно, стоит ли это

+16

MD5 - это * не * алгоритм шифрования. Это криптографический алгоритм хеширования. – Gumbo

+0

Похоже на ситуацию «это зависит» от меня ... –

+0

Какую платформу вы используете? Это обычная задача. У вашей платформы, похоже, уже есть все это на месте. Может ли он лучше использовать экспертов по безопасности? –

ответ

12

MD5 не шифрование, это односторонний хеш.

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

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

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

SHA-256 должно быть более чем достаточно, но убедитесь, что вы также засовываете passowrd. Ваши функции должны выглядеть следующим образом (псевдо-код):

fun store_password(plaintext): 
    salt = random_alphanumeric(40) # maybe put 40 in a config, or #define somewhere 
    hashed = sha256_digest(salt + plaintext) 
    return "sha256!" + salt + "!" + hashed 

fun check_password(plaintext, stored): 
    algo, salt, hashed = stored.split("!") 
    if algo == "sha256" 
     return (sha256_digest(salt + plaintext) == hashed) 
    else if ... # other supported password schemes here 

Комментатор ниже указаны, что с достаточно мощным атакующими (или, слабыми паролями), хранение полной соли может позволить незашифрованному быть грубыми вынуждены , Если вас это беспокоит, используйте соль из двух частей. Сгенерируйте ее часть каждый раз (saltA) и сохраните ее в файле конфигурации (saltB).Затем объединить их для создания/проверки паролей:

import my_config 

fun store_password(plaintext): 
    saltA = random_alphanumeric(40) 
    hashed = sha256_digest(saltA + my_config.saltB + plaintext) 
    return "sha256!" + saltA + "!" + hashed 

fun check_password(plaintext, stored): 
    algo, saltA, hashed = stored.split("!") 
    if algo == "sha256" 
     return (sha256_digest(saltA + my_config.saltB + plaintext) == hashed) 
    # ... 

Обратите внимание, что если вы выбираете эту систему, изменив saltB будет аннулирует каждый сохраненный пароль.

+1

Просто, чтобы бросить это, Джон, вы говорите, что цель соления заключается в защите пароля в случае компрометации БД, но, похоже, ваш пример хранит соль в БД в том же поле, что и хэширование, пароль .... так что в этом случае соление не поможет вам вообще. Единственный способ, помогающий вам использовать пароли в случае компрометации БД, заключается в том, что соли хранятся на внешней стороне взломанной БД (например, в самом приложении или в другом постоянном источнике). – delfuego

+0

+1 Рекомендовать SHA256 также – Xeoncross

+8

delfuego: это неправда - соли защищают от предварительно вычисленных таблиц хешей (иначе называемых «радужными столами»). Соливая пароль с достаточно длинной солью перед хранением, он заставляет атакующего использовать атаку грубой силы. Предполагая, что пользователь не использовал «123» или «пароль» для своего пароля, он должен быть достаточно безопасным. –

0

Если пароль пересекает провод любым незашифрованным способом (например, это пароль для веб-приложения, работающего на сервере, отличном от SSL), тогда у них не обязательно будет доступ к вашей БД, только для проводного трафика. Поэтому в этом случае вы должны убедиться, что пароль был защищен, так как вы можете получить его в разумных пределах, следовательно, используя что-то более сильное, чем MD5.

+0

Если вы не используете SSL-соединение в поле пароля, то, если вы не используете какое-то шифрование на основе javascript, я не вижу, как выбор серверной части MD5 сделает разница? Если вы не имеете в виду, что хеш хранится в файле cookie? – Mark

2

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

В основном вы должны прочитать все, что подходит к тому, что вы пытаетесь сделать в http://www.owasp.org, и следовать за ним до Т, если только вы не считаете себя исследователем безопасности.

2

Don't use MD5 для криптографических целей - это broken! Используйте SHA256, который вы внедрили, или, лучше, тестировали библиотеку (я уверен, вы упустили многие проблемы безопасности в своей реализации).

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

+0

Не могли бы вы порекомендовать такую ​​библиотеку? – Mark

+2

Атаки на столкновение с MD5, как правило, не применимы к использованию хэширования паролем. Но он никогда не боится быть параноиком :) – bdonlan

+0

Речь идет не о столкновениях. Пожалуйста, проверьте en.wikipedia.org/wiki/Rainbow_table. Я был на нескольких семинарах по безопасности, и все они начинались с: MD5 нарушен. @Mark: какой язык программирования? Python уже предоставляет их как часть стандартной библиотеки. Я считаю, что Perl также предоставляет их. – Alexandru

0

Если вы применяете более совершенные пароли, он будет выполнять задание без изменения алгоритма. md5 не должен быть обратимым, по крайней мере, не для начинающего «хакера». использование хороших паролей (длиной более 12 символов и использование обоих чисел, капитала и маленькой буквы) будет лучше, чем изменение алгоритма.

@ У Джона Милликина была хорошая мысль о том, чтобы солить пароль - что даже лучше, чем просто соблюдение хорошего пароля.

+2

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

+0

Я фактически редактирую сообщение, прежде чем вы разместили этот комментарий, я согласен с вами в этом. – Dani

2

Использование более сильного алгоритма, вероятно, стоит того.

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

Таким образом, «стоимость» использования SHA-1 или SHA-256, вероятно, будет очень маленькой.

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

Я думаю, что стоит перейти на лучший алгоритм хеширования.

Кроме того, мотивация для канавки MD5 в пользу SHA-1 или SHA-256 будет заключаться в том, что MD5 «сломан». Есть ярлыки для поиска хеш-коллизий, так что грубая сила не требуется. Чтобы замедлить атаку грубой силы, вам также необходимо использовать технику усиления ключей. Обычно это означает повторение операции хэша несколько тысяч раз. Вам также понадобится использовать случайную соль, чтобы сорвать предварительно вычисленные таблицы поиска, например, таблицы радуги.

Конечно, алгоритмы, подобные алгоритмам деривации ключей в PKCS # 5, подробно описывают безопасный способ «хэш-паролей» для таблиц аутентификации. Используя такой стандарт, вы получите доступ к высококачественному анализу выбранной вами техники и предупредите вас о потенциальных уязвимостях. Вы также с большей вероятностью найдете реализации, которые уже были широко рассмотрены и протестированы.

+0

Несомненно, я не думал, что я буду рассматривать SHA256 для md5. Извините, я не сделал этого ясно, это было более гипотетическим. Моя точка зрения заключалась в том, что большая проблема в алгоритме ... если у них есть доступ к хэшу, то они уже находятся в вашей базе данных. Вы правы, хотя по причинам, которые я изложил, достаточно оснований для использования более сильного алгоритма, но мы говорим больше об ущербе, контролирующем эту безопасность, если мы говорим о риске пароля пользователей, который заключается в том, что они используют в другом месте. – Mark

4

У Джефф есть отличный пост под названием You're Probably Storing Passwords Incorrectly, в котором рассматриваются проблемы, связанные с хранением этого типа паролей. Очень рекомендуемое чтение.

+0

Это было информативно .. спасибо – Mark

1

Да, SHA-256 рекомендуется для паролей. Фактически для безопасного программного обеспечения правительства США это mandated от NIST, начиная с 2010 года.

См. http://www.openssl.org/ для бесплатной криптографической библиотеки с открытым исходным кодом, которая проверена FIPS. Он реализует алгоритмы дайджеста сообщений, включая семейство SHA-2.

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

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