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

Почему я должен хэшировать пароли пользователей в моем приложении?

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

Дамп паролей с помощью Volume Shadow Copy Service

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

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

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

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

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

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

Почему популярные хэширующие функции, такие как md5() и sha1() не подходят для паролей?

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

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

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

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

Если популярные хэширующие функции не подходят, как же я тогда должен хэшировать свои пароли?

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

PHP 5.5 предоставляет , которое безопасно работает и с хэшированием и с проверкой паролей . Также есть » PHP библиотека совместимости , доступная с PHP 5.3.7.

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

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

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

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

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

Учтите, что, если вы используете функцию crypt() для проверки пароля, то вам нужно предостеречь себя от атак по времени, применяя сравнение строк, которое занимает постоянное время. Ни операторы PHP == и === , ни функция strcmp() не являются таковыми. Функция же password_verify() как раз делает то, что нужно. Настоятельно рекомендуется использовать встроенное API хэширования паролей , если есть такая возможность.

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

Что такое соль?

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

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

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

Защищенные хеши предназначены для защиты от несанкционированного доступа

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

password_hash() создает случайную соль в случае, если она не была передана, и чаще всего это наилучший и безопасный выбор.

Как я должен хранить свою соль?

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

Защищенные хэши рассчитаны на медленные

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

Понятие хэш-функции пароля

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

Следующая диаграмма показывает формат возвращаемого значения функциями crypt() или password_hash() . Как можно видеть, они содержат полную информацию об алгоритме и соли, требуемых для будущей проверки пароля.

3 years ago

I feel like I should comment some of the clams being posted as replies here.

Почему небезопасны хэши с применением соли

Если закон Мура предполагает удвоение вычислительной мощности каждые 18 месяцев, это похоже на то, что 10 лет в будущем. Довольно удивительный материал, правда? Давайте поговорим о паролях, так как хэширование и пароли тесно связаны. Если вы неправильно храните пароли, вы всегда храните пароль пользователя как соленый хэш, а не как обычный текст. Правильно? Это означает, что если ваша база данных содержащий все эти хеши, скомпрометирован или просочился, пользователи все еще защищены - никто не может понять, что их пароль на самом деле основан на хеше, хранящемся в базе данных.

For starters, speed IS an issue with MD5 in particular and also SHA1. I"ve written my own MD5 bruteforce application just for the fun of it, and using only my CPU I can easily check a hash against about 200mill. hash per second. The main reason for this speed is that you for most attempts can bypass 19 out of 64 steps in the algorithm. For longer input (> 16 characters) it won"t apply, but I"m sure there"s some ways around it.

If you search online you"ll see people claiming to be able to check against billions of hashes per second using GPUs. I wouldn"t be surprised if it"s possible to reach 100 billion per second on a single computer alone these days, and it"s only going to get worse. It would require a watt monster with 4 dual high-end GPUs or something, but still possible.

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

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

Here"s why 100 billion per second is an issue:
Assume most passwords contain a selection of 96 characters. A password with 8 characters would then have 96^8 = 7,21389578984e+15 combinations.
With 100 billion per second it would then take 7,21389578984e+15 / 3600 = ~20 hours to figure out what it actually says. Keep in mind that you"ll need to add the numbers for 1-7 characters as well. 20 hours is not a lot if you want to target a single user.

So on essence:
There"s a reason why newer hash algorithms are specifically designed not to be easily implemented on GPUs.

Oh, and I can see there"s someone mentioning MD5 and rainbow tables. If you read the numbers here, I hope you realize how incredibly stupid and useless rainbow tables have become in terms of MD5. Unless the input to MD5 is really huge, you"re just not going to be able to compete with GPUs here. By the time a storage media is able to produce far beyond 3TB/s, the CPUs and GPUs will have reached much higher speeds.

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

As for SHA1, my belief is that it"s about a third slower than MD5. I can"t verify this myself, but it seems to be the case judging the numbers presented for MD5 and SHA1. The issue with speeds is basically very much the same here as well.

The moral here:
Please do as told. Don"t every use MD5 and SHA1 for hasing passwords ever again. We all know passwords aren"t going to be that long for most people, and that"s a major disadvantage. Adding long salts will help for sure, but unless you want to add some hundred bytes of salt, there"s going to be fast bruteforce applications out there ready to reverse engineer your passwords or your users" passwords.

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

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

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

InsidePro Hash Verifier


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

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

Hash Verifier (верификатор хешей) - это бесплатный сервис для автоматической верификации хешей и найденных к ним паролей.

Особенности сервиса:

  • не требует регистрации;
  • поддерживает более 30 алгоритмов хеширования, включая все самые популярные виды хешей;
  • поддерживает верификацию списка хешей (до 1000 строк за один запрос);
  • поддерживает имена пользователей и соль в шестнадцатеричном формате;
  • хранит ссылку на успешную верификацию в течение указанного времени;
  • данные для верификации отправляются в виде единого списка (хеш:пароль или хеш:соль:пароль).

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

Это значение затем может быть сохранено в репозитории, таком как база данных. Соль и параметр стоимости также могут быть указаны во время конструктора класса, ниже приведен пример. Ниже приведен пример со всеми форматами. Вы также можете указать формат пароля во время конструктора класса.

Версия 4 Версия 3 Версия 2 Версия 1 Версия 0 Версия 12 Версия 11 Версия 10 Версия 9 Версия 8 Версия 7 Версия 6 Версия 5 Версия 0. Создает хэш обычного текстового пароля. Для интеграции с другими приложениями эту функцию можно перезаписать, чтобы вместо этого использовать другой алгоритм проверки пароля пакета.

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

InsidePro Hash Finder


Hash Finder - это бесплатный сервис для поиска хешей по огромной базе данных.

Особенности сервиса:

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

Главные отличия от аналогов:

  1. Данный сервис содержит только реальные хеши и пароли (около 500 миллионов записей), в отличие от других сервисов, где основная масса паролей сгенерирована искусственно. По этой причине процент успешного пробива на данном сервисе гораздо выше.
  2. Сервис накапливает все хеши, которые не были найдены при первом поиске. Затем они ставятся в очередь на брут, и пароли к таким хешам могут быть найдены в дальнейшем - например, при повторном пробиве оставшихся хешей спустя нескoлько дней.

InsidePro Hash Manager

Автор: InsidePro Software
URL: www.insidepro.com/download/HM.zip
Система: Win


Hash Manager - это бeсплатная программа для восстановления паролей к хешам.

Особенности программы:

  • заточена под работу с огромными списками хешей (можно загружать списки на сотни миллионов хешей и комфортно их брутить);
  • поддерживает более 400 алгоритмов хеширования;
  • содержит более 70 дополнительных утилит для работы с хешами, паролями и словарями (сортировка файлов, удаление дубликатов, слияние списков, парсинг баз данных SQL, конвертеры из разных форматов и так далее);
  • имеется 64-битная версия, которая гораздо быстрее на многих алгоритмах;
  • поддерживает неограниченное количество загружаемых хешей, а также словарей, правил и масок;
  • поддерживает все самые эффективные атаки на хеши;
  • поддерживает многопоточность;
  • восстанавливает пароли в кодировке Unicode;
  • имеет модульную архитектуру.

Last updated by at Ноябрь 18, 2016 .



Эта статья также доступна на следующих языках: Тайский

  • Next

    Огромное Вам СПАСИБО за очень полезную информацию в статье. Очень понятно все изложено. Чувствуется, что проделана большая работа по анализу работы магазина eBay

    • Спасибо вам и другим постоянным читателям моего блога. Без вас у меня не было бы достаточной мотивации, чтобы посвящать много времени ведению этого сайта. У меня мозги так устроены: люблю копнуть вглубь, систематизировать разрозненные данные, пробовать то, что раньше до меня никто не делал, либо не смотрел под таким углом зрения. Жаль, что только нашим соотечественникам из-за кризиса в России отнюдь не до шоппинга на eBay. Покупают на Алиэкспрессе из Китая, так как там в разы дешевле товары (часто в ущерб качеству). Но онлайн-аукционы eBay, Amazon, ETSY легко дадут китайцам фору по ассортименту брендовых вещей, винтажных вещей, ручной работы и разных этнических товаров.

      • Next

        В ваших статьях ценно именно ваше личное отношение и анализ темы. Вы этот блог не бросайте, я сюда часто заглядываю. Нас таких много должно быть. Мне на эл. почту пришло недавно предложение о том, что научат торговать на Амазоне и eBay. И я вспомнила про ваши подробные статьи об этих торг. площ. Перечитала все заново и сделала вывод, что курсы- это лохотрон. Сама на eBay еще ничего не покупала. Я не из России , а из Казахстана (г. Алматы). Но нам тоже лишних трат пока не надо. Желаю вам удачи и берегите себя в азиатских краях.

  • Еще приятно, что попытки eBay по руссификации интерфейса для пользователей из России и стран СНГ, начали приносить плоды. Ведь подавляющая часть граждан стран бывшего СССР не сильна познаниями иностранных языков. Английский язык знают не более 5% населения. Среди молодежи — побольше. Поэтому хотя бы интерфейс на русском языке — это большая помощь для онлайн-шоппинга на этой торговой площадке. Ебей не пошел по пути китайского собрата Алиэкспресс, где совершается машинный (очень корявый и непонятный, местами вызывающий смех) перевод описания товаров. Надеюсь, что на более продвинутом этапе развития искусственного интеллекта станет реальностью качественный машинный перевод с любого языка на любой за считанные доли секунды. Пока имеем вот что (профиль одного из продавцов на ебей с русским интерфейсом, но англоязычным описанием):
    https://uploads.disquscdn.com/images/7a52c9a89108b922159a4fad35de0ab0bee0c8804b9731f56d8a1dc659655d60.png