“Удваивает хеширование” пароля, менее безопасного, чем просто хеширование его однажды?

Используя эту функцию PHP mysql_escape_string(), вы можете быстро получить хорошую профилактику.

Например:

SELECT * FROM users WHERE name = '".mysql_escape_string($name_from_html_form)."'

mysql_escape_string - Сбрасывает строку для использования в mysql_query

Для большей профилактики вы можете добавить в конце ...

wHERE 1=1   or  LIMIT 1

Наконец вы получаете:

SELECT * FROM users WHERE name = '".mysql_escape_string($name_from_html_form)."' LIMIT 1
286
задан Cole Johnson 25 May 2014 в 11:09
поделиться

10 ответов

Хеширование пароля однажды небезопасно

нет, несколько хешей не менее безопасны; они - основная часть использования безопасного пароля.

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

Простое повторение недостаточно

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

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

, Как повредить пароль

, для Сохраненных паролей нужна защита от офлайнового нападения. Если пароли не посолились, они могут быть повреждены с предварительно вычисленной атакой с подбором по словарю (например, с помощью Таблицы Радуги). Иначе взломщик должен провести время, чтобы вычислить хеш для каждого пароля и видеть, соответствует ли это сохраненному хешу.

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

Скажем, список взломщиков длинен с 10 миллиардами кандидатов; предположите также, что настольная система может вычислить 1 миллион хешей в секунду. Взломщик может протестировать ее целый список, меньше чем три часа, если только одно повторение используется. Но если просто повторения 2000 года используются, то время расширяется почти на 8 месяцев. Побеждать более сложный attacker— одна способная из загрузки программы, которая может коснуться питания их GPU для example— Вам нужно больше повторений.

, Сколько достаточно?

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

можно, вероятно, позволить пользователям ожидать дополнительный ¾ приблизительно второй во время аутентификации. Представьте свою целевую платформу и использование столько повторений, сколько можно предоставить. Платформы, которые я протестировал (один пользователь на мобильном устройстве или многие пользователи на серверной платформе) могут удобно поддерживать PBKDF2 с между 60 000 и 120 000 повторений, или bcrypt с фактором стоимости 12 или 13.

[еще 1115] фон

Чтение PKCS № 5 для достоверной информации о роли соли и повторений в хешировании. Даже при том, что PBKDF2 был предназначен для генерации ключей шифрования от паролей, это работает хорошо односторонним хэшем для аутентификации по паролю. Каждое повторение bcrypt является более дорогим, чем хеш SHA-2, таким образом, можно использовать меньше повторений, но идея является тем же. Bcrypt также делает шаг вне большинства основанных на PBKDF2 решений при помощи полученного ключа для шифрования известного простого текста. Получающийся шифрованный текст хранится как "хеш", наряду с некоторыми метаданными. Однако ничто не мешает Вам делать то же самое с PBKDF2.

Вот другие ответы, которые я записал по этой теме:

260
ответ дан Community 23 November 2019 в 01:48
поделиться

Я собираюсь рискнуть и сказать, что это более безопасно при определенных обстоятельствах... еще не делают downvote меня хотя!

От математического / криптографическая точка зрения, это менее безопасно по причинам, что я уверен, что кто-то еще даст Вам более четкое объяснение того, чем я мог.

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

, Конечно, если Вы используете соль тогда это преимущество (недостаток?) уходит.

-1
ответ дан Cole Johnson 23 November 2019 в 01:48
поделиться

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

-1
ответ дан Sargun Dhillon 23 November 2019 в 01:48
поделиться

Озабоченность по поводу сокращения пространства поиска математически корректна, хотя пространство поиска остается достаточно большим, что во всех практических целях (принимающий Вас используют соли), в 2^128. Однако, так как мы говорим о паролях, количество возможных 16 символьных строк (алфавитно-цифровой, вопрос ограничений, несколько добавленных символов) примерно 2^98, согласно моим быстро и легко определяемым вычислениям. Таким образом, воспринятое уменьшение в пространстве поиска не действительно релевантно.

Кроме этого, действительно нет никакого различия, криптографически говоря.

, Хотя существует crypto примитив, названный "цепочкой хеширования" - техника, которая позволяет Вам делать некоторые прохладные приемы, как раскрытие ключа подписи после того, как это использовалось, не жертвуя целостностью системы - данный минимальную синхронизацию времени, это позволяет Вам чисто обходить проблему начального ключевого распределения. В основном Вы предварительно вычисляете большой набор хешей хешей - h (h (h (h.... (h (k))...))), используйте энное значение для подписания после интервала набора, Вы отсылаете ключ и подписываете его с помощью ключа (n-1). Получатели могут теперь проверить, что Вы отправили все предыдущие сообщения, и никто не может фальсифицировать Вашу подпись начиная с периода времени, для которого это допустимо, передал.

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

0
ответ дан SquareCog 23 November 2019 в 01:48
поделиться

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

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

Это действительно защищает от атак с подбором по словарю, как те "обратные MD5-базы-данных", но, соля - также.

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

1
ответ дан SoapBox 23 November 2019 в 01:48
поделиться

Как несколько ответов в этой статье предполагают, существуют некоторые случаи, где она может улучшать безопасность и других, где она определенно повреждает его. Существует лучшее решение, которое определенно улучшит безопасность. Вместо того, чтобы удвоить количество раз Вы вычисляете хеш, дважды размер Вашей соли, или удваиваетесь, число битов использовало интервал хеш, или сделайте обоих! Вместо SHA-245 подпрыгните к SHA-512.

1
ответ дан Stefan Rusek 23 November 2019 в 01:48
поделиться

Из того, что я читал, можно на самом деле рекомендовать перефразировать пароль сотни или тысячи времен.

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

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

3
ответ дан Bill Karwin 23 November 2019 в 01:48
поделиться

Да - это сокращает количество возможно строк, которые соответствуют строке.

, Как Вы уже упомянули, соленые хеши намного лучше.

статья здесь: http://websecurity.ro/blog/2007/11/02/md5md5-vs-md5/ , делает попытку доказательства в том, почему это эквивалентно, но я не уверен с логикой. Частично они предполагают, что нет программного обеспечения, доступного для анализа md5 (md5 (текст)), но очевидно это довольно тривиально для создания таблиц радуги.

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

10
ответ дан Rich Bradshaw 23 November 2019 в 01:48
поделиться

Да, перефразирование уменьшает пространство поиска, но не, это не имеет значения - эффективное сокращение незначительно.

Перефразирование увеличивает время, которое требуется к "в лоб", но выполнение поэтому только дважды является также субоптимальным.

то, Что Вы действительно хотите, должно хешировать пароль с PBKDF2 - испытанный метод использования безопасного хеша с солью и повторениями. Выезд это ТАК ответ .

РЕДАКТИРОВАНИЕ : Я почти забыл - , не ИСПОЛЬЗУЮТ MD5!!!! Использование современный криптографический хеш, такой как семья SHA 2 (SHA-256, SHA-384 и SHA-512).

50
ответ дан Community 23 November 2019 в 01:48
поделиться

Лично я не обеспокоился бы несколькими hashses, но я удостоверюсь к , также хешируют UserName (или другое поле идентификатора пользователя), а также пароль , таким образом, два пользователя с тем же паролем не закончат с тем же хешем. Также я, вероятно, бросил бы некоторую другую постоянную строку во входную строку слишком в придачу.

$hashed_password = md5( "xxx" + "|" + user_name + "|" + plaintext_password);
2
ответ дан CodeAndCats 23 November 2019 в 01:48
поделиться
Другие вопросы по тегам:

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