Что лучше для хранения данных шифрование или хеширование

Хеширование и шифрование: в чем разница?

Что лучше для хранения данных шифрование или хеширование. Смотреть фото Что лучше для хранения данных шифрование или хеширование. Смотреть картинку Что лучше для хранения данных шифрование или хеширование. Картинка про Что лучше для хранения данных шифрование или хеширование. Фото Что лучше для хранения данных шифрование или хеширование

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

В среднем каждые 39 секунд компьютеры с доступом в Интернет подвергаются попыткам взлома, а каждая успешная утечка данных обходится компаниям в среднем примерно в 4,24 миллиона долларов США. Компании могут использовать различные технологии для предотвращения утечки данных. Один из них состоит в хешировании передаваемых сообщений. Но что этот процесс из себя представляет, и в чем его польза? Мы обсудим разницу между хешированием и шифрованием более подробно в этой статье.

Что такое хеширование?

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

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

Что лучше для хранения данных шифрование или хеширование. Смотреть фото Что лучше для хранения данных шифрование или хеширование. Смотреть картинку Что лучше для хранения данных шифрование или хеширование. Картинка про Что лучше для хранения данных шифрование или хеширование. Фото Что лучше для хранения данных шифрование или хеширование

Хеширование представляет собой односторонний процесс, в котором по определенному алгоритму исходные данные трансформируются с строку фиксированной длины

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

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

Популярные технологии хеширования

В алгоритме хеширования MD5 хеш содержит 128 бит (16 байт) и обычно представляет собой последовательность из 32 шестнадцатеричных цифр. MD5-хеши обычно используются с небольшой строкой. Его также можно использовать для хеширования данных в базах данных. Алгоритм проверяет идентичность двух наборов данных, сопоставляя и сравнивая контрольные суммы обоих наборов. Алгоритм хеширования MD5 получил широкое распространение в 90-х годах прошлого века, однако, на данный момент он не рекомендуем к использованию и практически не используется из-за связанных с ним уязвимостей.

Безопасный алгоритм хеширования (Secure Hash Algorithm Version, SHA) — это семейство из шести функций хеширования. Они могут принимать в качестве входных данных строку переменной длины и превращать их в выходные данные фиксированной длины. Так, например, SHA 0, SHA 1, SHA 224 и SHA 256 работают с 512-битным сообщением, которое разделено на блоки по 32 бита каждый. SHA 384 и SHA 512 работают с 1024-битными блоками, разделенными на 64 бита каждый.

Что такое шифрование?

Что лучше для хранения данных шифрование или хеширование. Смотреть фото Что лучше для хранения данных шифрование или хеширование. Смотреть картинку Что лучше для хранения данных шифрование или хеширование. Картинка про Что лучше для хранения данных шифрование или хеширование. Фото Что лучше для хранения данных шифрование или хеширование

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

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

Есть два типа шифрования:

Ключевые элементы шифрования:

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

Популярные технологии шифрования

Разница между хешированием и шифрованием

Что лучше для хранения данных шифрование или хеширование. Смотреть фото Что лучше для хранения данных шифрование или хеширование. Смотреть картинку Что лучше для хранения данных шифрование или хеширование. Картинка про Что лучше для хранения данных шифрование или хеширование. Фото Что лучше для хранения данных шифрование или хеширование

Наглядная разница между хешированием и шифрованием приведена в следующей таблице:

ХешированиеШифрование
ПроцессПроцесс хеширование включает в себя преобразование информации в более короткое значение фиксированной длины. Это значение и является ключом к исходному сообщению.Процесс шифрования включает в себя кодировку данных таким образом, чтобы только авторизированный клиент смог расшифровать сообщение. Это предполагает широкое использование Инфраструктуры открытых ключей (PKI).
СимволыПосле хеширования символы становятся нечитаемыми и имеют фиксированную длину.После шифрования символы становятся нечитаемыми и не имеют фиксированной длины.
БезопасностьБолее безопасный.Также безопасный, но закрытый ключ должен всегда оставаться конфиденциальным.
ДлинаХешированная информация имеет фиксированную длину и, как правило, небольшого размера. Ее длина не будет расти даже при увеличении длины исходной информации.Длина зашифрованной информации никогда не фиксируется. Если длина исходного сообщения увеличивается, увеличивается и длина зашифрованных данных.
Обратное преобразованиеХэш-код не может быть преобразован назад вообще.Исходное сообщение можно получить с помощью специального ключа.

Заключение

Что лучше для хранения данных шифрование или хеширование. Смотреть фото Что лучше для хранения данных шифрование или хеширование. Смотреть картинку Что лучше для хранения данных шифрование или хеширование. Картинка про Что лучше для хранения данных шифрование или хеширование. Фото Что лучше для хранения данных шифрование или хеширование

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

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

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

Источник

Шифрование, хеширование, соление – какая разница?

Что лучше для хранения данных шифрование или хеширование. Смотреть фото Что лучше для хранения данных шифрование или хеширование. Смотреть картинку Что лучше для хранения данных шифрование или хеширование. Картинка про Что лучше для хранения данных шифрование или хеширование. Фото Что лучше для хранения данных шифрование или хеширование

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

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

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

Что такое шифрование?

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

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

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

Смотрите также: Общие типы шифрования объяснены

Общие алгоритмы шифрования

Шифрование в действии

Чтобы дать вам представление о том, как работает шифрование на практике, мы будем использовать в качестве примера шифр Цезаря. Если мы хотим зашифровать сообщение «Давайте естьСо сдвигом три,LСтал быО«еСтал бычас» и так далее. Это дает нам зашифрованное сообщение:

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

Одним из примеров является AES. Если мы используем 128-битный онлайн-калькулятор AES для шифрования:Давайте естьС ключом «1234», Это дает нам:

Этот зашифрованный текст можно расшифровать только ключом «1234». Если бы мы использовали более сложный ключ и держали его в секрете, мы могли бы считать данные защищенными от злоумышленников..

Что такое хеширование?

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

Для чего используются хэши?

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

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

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

Общие криптографические хеш-функции

Хеширование в действии

Теперь, когда вы понимаете, что такое хэш-функции, пришло время применить их на практике. Если мы поместим тот же текст «Давайте есть”В онлайн-калькулятор SHA-256, он дает нам:

Если мы изменим хотя бы один символ на одну позицию, это резко изменит весь хэш. Опечатка типа «Встретил есть»Дает совершенно другой результат:

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

Хеш-функции и пароли

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

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

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

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

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

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

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

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

Что такое соление?

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

Слабые пароли

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

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

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

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

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

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

Как засолка работает на практике

Например, предположим, у вас есть учетная запись электронной почты и ваш пароль «1234». Когда мы используем онлайн-калькулятор SHA-256, в качестве значения хеш-функции мы получаем следующее:

Этот хэш будет храниться в базе данных для вашей учетной записи. Когда вы вводите свой пароль «1234”, Он хэшируется, а затем значение сравнивается с сохраненным значением. Поскольку эти два значения одинаковы, вам будет предоставлен доступ.

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

Хеш-таблица скажет им, что:

Злоумышленник узнает, что ваш пароль «1234». Затем они могут использовать этот пароль для входа в свою учетную запись.

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

Давайте возьмем 16-символьную соль случайных данных:

Мы добавляем его к нашему простому паролю «1234» вот так:

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

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

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

Взломать целые базы данных

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

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

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

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

Потенциальные недостатки соли

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

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

Общие алгоритмы посола

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

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

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

Произносится «склеп”, Это второй самый молодой алгоритм хеширования паролей, который широко используется. Разработанный в 2009 году, Scrypt использует большой, но регулируемый объем памяти в своих вычислениях. Его регулируемая природа означает, что он все еще может быть устойчивым к атакам, даже если вычислительная мощность растет со временем.

bcrypt был разработан в 1999 году и основан на шифре Blowfish. Это был один из наиболее часто используемых алгоритмов, используемых в хешировании паролей в течение многих лет, но теперь он более уязвим к программируемым полевым массивам шлюзов (FPGA). Вот почему Argon2 часто предпочтительнее в новых реализациях.

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

Шифрование, перемешивание и посол: резюме

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

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

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

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

Технологии-1 от tec_estromberg под СС0

Источник

Как надо хешировать пароли и как не надо

Что лучше для хранения данных шифрование или хеширование. Смотреть фото Что лучше для хранения данных шифрование или хеширование. Смотреть картинку Что лучше для хранения данных шифрование или хеширование. Картинка про Что лучше для хранения данных шифрование или хеширование. Фото Что лучше для хранения данных шифрование или хеширование

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

Постараюсь очень лаконично и быстро обрисовать ситуацию с хэшами.

Сразу определю какую задачу применения хешей буду рассматривать — аутентификация пользователей. Не токены восстановления паролей, не аутентификация запросов, не что-то еще. Это также не статья про защиту канала передачи данных, так что комментарии по challenge-response и SSL неуместны!

Матчасть (короткая)

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

Вникать в тонкости криптографии прикладному разработчику не обязательно, достаточно запомнить какие хэш-функции (алгоритмы по названию) можно сейчас использовать, а какие уже нет. MD5 — уже нельзя, коллеги, — используйте bcrypt/scrypt.

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

Для выполнения первого требования нужно использовать стойкие в настоящее время (а не в 90х годах!) хеш-функции.
Для выполнения второго — к паролю перед хешированием добавляется случайная строка (соль). Таким образом, у двух пользователей с паролем «123456» будут разные соли «соль1» и «соль2», а соответственно и хеш-функции от «123456соль1» и «123456соль2» в базе тоже будут разные.

Теперь немного про систему хранения — и соль и сам хеш хранятся в базе данных.
То есть получив доступ к СУБД, злоумышленник получает и значения хешей и соли.

Используйте локальный параметр!

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

Для того чтобы еще усложнить жизнь атакующему, Solar Designer www.openwall.com/presentations/YaC2012-Password-Hashing-At-Scale/mgp00005.html предлагает ввести еще одну штуку, под названием локальный параметр.

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

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

Единственный раз мы (ONsec) ломали хеши с локальным параметром, выработав при этом тактику атаки на сам локальный параметр (регистрируемся в приложении, затем ищем в базе свой хеш, соль (свой пароль мы и так знаем) и перебираем ЛП). И тщетно. На длинах 16+ байт для современных функций хеширования — это очень дорого по железу. В итоге проще оказалось скомпрометировать систему аутентификации (проставить себе role=admin в базе через UPDATE 😉 )

Защищайте свои хранилища надежно и грамотно!

Заключение

Буду реалистом — естественно, никто не станет переписывать свои проекты ради «каких-то» хешей. Но новые проекты можно писать на scrypt/bcrypt. А также — внедряйте локальный параметр даже на слабых MD5 — он правда помогает, проверено 🙂

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *