Шифрование, хеширование и засоление – все связанные методы, но у каждого из этих процессов есть свойства, которые дают им различные цели..
Короче говоря, Шифрование включает в себя кодирование данных, чтобы к ним могли получить доступ только те, у кого есть ключ. Это защищает его от посторонних лиц.
Криптографическое хеширование включает в себя вычисления, которые нельзя отменить. Эти функции имеют некоторые специальные свойства, которые делают их полезными для цифровых подписей и других форм аутентификации..
Соль включает в себя добавление случайных данных перед их передачей через криптографическую хеш-функцию. Он в основном используется для обеспечения безопасности паролей во время хранения, но также может использоваться с другими типами данных.
Что такое шифрование?
Проще говоря, Шифрование – это процесс использования кода для предотвращения доступа других сторон к информации.. Когда данные зашифрованы, доступ к ним могут получить только те, у кого есть ключ. Пока используется достаточно сложная система, и она используется правильно, злоумышленники не смогут увидеть данные.
Данные шифруются с помощью алгоритмов шифрования, которые также известны как шифры. Одно из наиболее важных различий между шифрованием и хэшированием (о котором мы поговорим позже) заключается в том, что шифрование предназначено для использования в обоих направлениях. Это означает, что после того, как что-то было зашифровано ключом, оно также может быть расшифровано.
Это делает шифрование полезным в ряде ситуаций, например, для безопасного хранения или передачи информации.. Как только данные зашифрованы должным образом, они считаются безопасными и доступны только тем, у кого есть ключ. Наиболее известным типом является шифрование с симметричным ключом, которое включает использование одного и того же ключа в процессах шифрования и дешифрования..
Шифрование с открытым ключом немного сложнее, потому что один общедоступный ключ используется для шифрования данных, в то время как соответствующий секретный ключ используется для его расшифровки. Эта функция позволяет людям, которые никогда не встречались, безопасно общаться. Шифрование с открытым ключом также является важной частью цифровых подписей, которые используются для проверки подлинности и целостности данных и сообщений..
Смотрите также: Общие типы шифрования объяснены
Общие алгоритмы шифрования
- Цезарь Шифр - Это простой код, который включает в себя смещение каждой буквы на фиксированное число мест. Если шифр Цезаря имеет сдвиг три, каждое «а» станет «d», каждый «b» станет «e», каждый «c» станет «f» и так далее. Он назван в честь Юлия Цезаря, который был первым, кто записал использовать схему.
- AES – Расширенный стандарт шифрования – это сложный алгоритм с симметричным ключом, который обеспечивает значительную часть наших современных коммуникаций. Он включает в себя ряд сложных шагов и часто используется для шифрования данных в TLS, приложениях обмена сообщениями, в покое и во многих других ситуациях. Мы углубимся в шифрование AES здесь.
- 3DES – Тройной DES основан на алгоритме DES. Когда растущая мощность компьютера делала DES небезопасным, 3DES разрабатывался как усиленный алгоритм. В 3DES данные запускаются по алгоритму DES три раза, а не один раз, что усложняет взлом. 3DES может использоваться для многих из тех же вещей, что и AES, но только определенные реализации считаются безопасными.
- RSA – Шифр Ривеста-Шамира-Адлемана был первой формой широко используемой криптографии с открытым ключом. Это позволяет организациям безопасно общаться, даже если они не встречались или имели возможность обмениваться ключами. Он может использоваться в ряде различных протоколов безопасности, таких как PGP и TLS. У нас есть подробное руководство по шифрованию RSA здесь.
- ECDSA – Алгоритм цифровой подписи эллиптической кривой – это вариант DSA, в котором используется криптография с эллиптической кривой. Как алгоритм с открытым ключом, он может применяться в аналогичных ситуациях с RSA, хотя он реже применяется из-за некоторых проблем безопасности.
Шифрование в действии
Чтобы дать вам представление о том, как работает шифрование на практике, мы будем использовать в качестве примера шифр Цезаря. Если мы хотим зашифровать сообщение “Давайте естьСо сдвигом три,LСтал быО«еСтал бычас” и так далее. Это дает нам зашифрованное сообщение:
Ohw’v hdw
Чтобы расшифровать сообщение, получатель должен знать, что алгоритм шифрования предусматривает сдвиг в три, а затем откатывать каждую букву на три позиции. Если бы мы хотели, мы могли бы изменить код, сдвигая каждую букву на другое число. Мы могли бы даже использовать гораздо более сложный алгоритм.
Одним из примеров является AES. Если мы используем 128-битный онлайн-калькулятор AES для шифрования:Давайте естьС ключом «1234», Это дает нам:
FeiUVFnIpb9d0cbXP / Ybrw ==
Этот зашифрованный текст можно расшифровать только ключом «1234». Если бы мы использовали более сложный ключ и держали его в секрете, мы могли бы считать данные защищенными от злоумышленников..
Что такое хеширование?
Криптографические хеш-функции – это особый тип одностороннего вычисления. Они берут строку данных любого размера и всегда выдают заданную длину. Этот вывод называется гашиш, хэш-значение или Дайджест сообщения. Поскольку эти функции не используют клавиши, результат для данного ввода всегда одинаков.
Неважно, является ли ваш вклад Война и мир или просто две буквы, результат хеш-функции всегда будет одинаковой длины. Хэш-функции имеют несколько различных свойств, которые делают их полезными:
- Они односторонние функции – Это означает, что не существует практического способа выяснить, какой исходный ввод был из заданного хеш-значения.
- Маловероятно, что два входа имеют одинаковое хеш-значение – Несмотря на то, что два разных входа могут давать одно и то же значение хеш-функции, шансы на это настолько малы, что мы не будем об этом беспокоиться. Для практических целей хеш-значения можно считать уникальными.
- Один и тот же вход всегда дает один и тот же результат – Каждый раз, когда вы помещаете одну и ту же информацию в данную хеш-функцию, она всегда будет выдавать один и тот же результат.
- Даже малейшее изменение дает совершенно другой результат – Если даже один символ изменяется, значение хеша будет сильно отличаться.
Для чего используются хэши?
Хэш-функции могут иметь некоторые интересные свойства, но что мы можем на самом деле делать с ними? Возможность выплевывать уникальный вывод фиксированного размера для входных данных любой длины может показаться не более чем непонятным приемом сторонних разработчиков, но хэш-функции на самом деле имеют ряд применений..
Они являются основным компонентом цифровые подписи, которые являются важным аспектом проверки подлинности и целостности в Интернете. Коды аутентификации хеш-сообщения (HMAC) также используют хеш-функции для достижения аналогичных результатов.
Криптографические хеш-функции также могут использоваться как обычные хеш-функции. В этих сценариях они могут выступать в качестве контрольных сумм для проверки целостности данных, в качестве алгоритмов снятия отпечатков, которые устраняют дублирующиеся данные, или для создания хеш-таблиц для индексации данных..
Общие криптографические хеш-функции
- MD5 – Это хеш-функция, впервые опубликованная в 1991 году Роном Ривестом. В настоящее время он считается небезопасным и не должен использоваться в криптографических целях. Несмотря на это, он все еще может быть использован для проверки целостности данных.
- SHA-1 – Безопасный алгоритм хеширования 1 используется с 1995 года, но не считается безопасным с 2005 года, когда имел место ряд успешных атак на столкновения. Теперь рекомендуется использовать либо SHA-2, либо SHA-3..
- SHA-2 – Это семейство хеш-функций, которые являются преемниками SHA-1. Эти функции содержат многочисленные улучшения, которые делают их безопасными в самых разных приложениях. Несмотря на это, SHA-256 и SHA-512 уязвимы для атак с удлинением длины, поэтому в определенных ситуациях лучше всего реализовать SHA-3..
- SHA-3 – SHA-3 – самый новый член семейства Secure Hash Algorithm, но он построен совсем не так, как его предшественники. На данном этапе он еще не заменил SHA-2, а просто предоставляет криптографам еще один вариант, который может обеспечить повышенную безопасность в определенных ситуациях..
- RIPEMD – RIPEMD – это еще одно семейство функций, разработанное академическим сообществом. Он основан на многих идеях MD4 (предшественника MD5) и не ограничен никакими патентами. RIPEMD-160 все еще считается относительно безопасным, но он не получил широкого распространения.
- джакузи – Whirlpool – это хеш-функция из семейства квадратных блоков. Он основан на модификации AES и не подпадает под действие каких-либо патентов. Он считается безопасным, но несколько медленнее, чем некоторые из его альтернатив, что привело к ограниченному принятию.
Хеширование в действии
Теперь, когда вы понимаете, что такое хэш-функции, пришло время применить их на практике. Если мы поместим тот же текст «Давайте есть”В онлайн-калькулятор SHA-256, он дает нам:
5c79ab8b36c4c0f8566cee2c8e47135f2536d4f715a22c99fa099a04edbbb6f2
Если мы изменим хотя бы один символ на одну позицию, это резко изменит весь хэш. Опечатка типа «Встретил есть»Дает совершенно другой результат:
4be9316a71efc7c152f4856261efb3836d09f611726783bd1fef085bc81b1342
В отличие от шифрования, мы не можем поместить это значение хеша через функцию в обратном направлении, чтобы получить наш ввод еще раз. Хотя эти хэш-функции нельзя использовать так же, как шифрование, их свойства делают их важной частью цифровых подписей и многих других приложений..
Хеш-функции и пароли
Хэш-функции имеют еще одно распространенное применение, которое мы еще не обсуждали. Они также являются ключевым компонентом хранить наши пароли в безопасности во время хранения.
Вероятно, у вас есть десятки онлайн-аккаунтов с паролями. Для каждой из этих учетных записей ваш пароль должен храниться где-то. Как проверить ваш логин, если на сайте не было собственной копии вашего пароля??
Такие компании, как Facebook или Google, хранят миллиарды паролей пользователей. Если эти компании хранят пароли в виде открытого текста, то любой злоумышленник, который сможет проникнуть в базу паролей, сможет получить доступ к каждой учетной записи, которую они найдут..
Это было бы серьезной катастрофой для безопасности, как для компании, так и для ее пользователей. Если каждый пароль был раскрыт злоумышленникам, то все их учетные записи и пользовательские данные были бы в опасности.
Лучший способ предотвратить это не хранить сами пароли, а вместо этого использовать хеш-значения для паролей. Как мы обсуждали в предыдущем разделе, криптографические хеш-функции работают в одном направлении, создавая выходные данные фиксированного размера, которые невозможно реверсировать.
Если организация хранит хеш пароля вместо самого пароля, она может проверить, совпадают ли эти два хеша, когда пользователь входит в систему. Пользователи вводят свои пароли, которые затем хешируются. Затем этот хеш сравнивается с хешем пароля, который хранится в базе данных. Если два хэша совпадают, то введен правильный пароль и пользователю предоставлен доступ.
Эта настройка означает, что пароль никогда не должен храниться. Если злоумышленник проникнет в базу данных, он найдет только хеши паролей, а не пароли..
Хотя хеширование паролей для хранилища не мешает злоумышленникам использовать хеши для определения паролей, это значительно усложняет их работу и отнимает много времени. Это поднимает нашу последнюю тему, соление.
Что такое соление?
Соление по существу добавление случайных данных перед их передачей через хеш-функцию, и они чаще всего используются с паролями.
Лучший способ объяснить использование солей – это обсудить, зачем они нам нужны. Вы могли подумать, что хранение хэшей паролей решило бы все наши проблемы, но, к сожалению, все немного сложнее, чем это..
Слабые пароли
У многих людей действительно плохие пароли, может быть, вы тоже. Проблема в том, что люди склонны мыслить предсказуемо и выбирать пароли, которые легко запомнить. Эти пароли уязвимы для атак по словарю, которые каждую секунду просматривают тысячи или миллионы наиболее распространенных комбинаций паролей, пытаясь найти правильный пароль для учетной записи..
Если вместо этого хранятся хэши паролей, все немного по-другому. Когда злоумышленник сталкивается с базой данных хэшей паролей, он может использовать либо хеш-таблицы или радуга столы искать подходящие хэши, которые они могут использовать, чтобы узнать пароли.
Хеш-таблица – это предварительно вычисленный список хэшей для общих паролей, который хранится в базе данных. Они требуют больше работы заблаговременно, но после того, как таблица заполнена, поиск хешей в таблице происходит намного быстрее, чем вычисление хеша для каждого возможного пароля. Еще одним преимуществом является то, что эти таблицы могут использоваться повторно.
Радужные таблицы аналогичны хеш-таблицам, за исключением того, что они занимают меньше места за счет большей вычислительной мощности.
Оба этих метода атаки становятся гораздо более практичными, если используются слабые пароли. Если у пользователя общий пароль, то, скорее всего, хеш для пароля будет в хеш-таблице или радужной таблице. Если это так, то злоумышленник может получить доступ к паролю пользователя только в течение времени..
Пользователи могут помочь предотвратить эти атаки, выбрав более длинные и сложные пароли, которые с меньшей вероятностью будут храниться в таблицах. На практике это происходит не так часто, как следовало бы, потому что пользователи, как правило, выбирают пароли, которые легко запомнить. Как простое правило, злоумышленникам часто легко найти вещи, которые легко запомнить.
Соли предлагают еще один способ обойти эту проблему. Добавляя случайную строку данных к паролю перед его хэшированием, это существенно усложняет его, что снижает вероятность успеха этих атак..
Как засолка работает на практике
Например, предположим, у вас есть учетная запись электронной почты и ваш пароль «1234». Когда мы используем онлайн-калькулятор SHA-256, в качестве значения хеш-функции мы получаем следующее:
03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4
Этот хэш будет храниться в базе данных для вашей учетной записи. Когда вы вводите свой пароль «1234”, Он хэшируется, а затем значение сравнивается с сохраненным значением. Поскольку эти два значения одинаковы, вам будет предоставлен доступ.
Если злоумышленник проникнет в базу данных, он получит доступ к этому значению, а также ко всем другим хэшам паролей, которые были там. Затем злоумышленник примет это хеш-значение и найдет его в своей предварительно вычисленной хеш-таблице или радужной таблице. поскольку «1234”Является одним из самых распространенных паролей, они быстро найдут соответствующий хеш.
Хеш-таблица скажет им, что:
03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4
Соответствует:
1234
Злоумышленник узнает, что ваш пароль «1234». Затем они могут использовать этот пароль для входа в свою учетную запись.
Как видите, для злоумышленника это не было большой работой. Чтобы усложнить задачу, мы добавляем соль случайных данных в пароль перед его хэшированием. Соление помогает значительно снизить шансы хеш-таблиц и радужных таблиц на получение положительного результата..
Давайте возьмем 16-символьную соль случайных данных:
H82BV63KG9SBD93B
Мы добавляем его к нашему простому паролю «1234” вот так:
1234H82BV63KG9SBD93B
Только теперь, когда мы его солили, мы выполняем ту же хеш-функцию, что и раньше, которая возвращает:
91147f7666dc80ab5902bde8b426aecdb1cbebf8603a58d79182b750c10f1303
Конечно, это хеш-значение не длиннее и не сложнее, чем предыдущее, но это не главное. Хотя они оба одинаковой длины,1234H82BV63KG9SBD93B”Является гораздо менее распространенным паролем, поэтому гораздо менее вероятно, что его хеш будет храниться в хеш-таблице.
Чем менее вероятно, что пароль будет храниться в хэш-таблице, тем меньше вероятность успеха атаки. Вот как добавление солей помогает повысить безопасность паролей.
Взломать целые базы данных
Когда у злоумышленника есть доступ ко всей базе данных хэшей паролей, ему не нужно проверять каждый хеш с каждой записью. Вместо этого они могут искать во всей базе данных совпадения, которые совпадают с их хэш-таблицей.. Если база данных достаточно велика, злоумышленник может поставить под угрозу огромное количество учетных записей, даже если они имеют только пять процентов успеха.
Если перед хэшированием паролям присваиваются уникальные соли, то это значительно усложняет процесс. Если соли достаточно длинные, шансы на успех становятся намного ниже, что потребовало бы Хеш-таблицы и радужные таблицы должны быть слишком большими, чтобы можно было найти совпадающие хэши.
Другое преимущество солей возникает, когда несколько пользователей в одной и той же базе данных имеют один и тот же пароль или если один и тот же пароль для нескольких учетных записей у одного пользователя. Если хэши паролей не передаются заранее, злоумышленники могут сравнить хэши и определить, что любые учетные записи с одинаковым хэш-значением также имеют один и тот же пароль.
Это облегчает хакерам поиск наиболее распространенных хеш-значений, которые дадут им наибольшее вознаграждение. Если пароли предварительно засолены, то значения хеш-функции будут отличаться, даже если используются те же пароли.
Потенциальные недостатки соли
Соление теряет свою эффективность, если оно сделано неправильно. Две наиболее распространенные проблемы возникают, когда соли слишком короткие, или если они не уникальны для каждого пароля. Короткие соли по-прежнему уязвимы для атак радужного стола, потому что они не делают получающийся хэш достаточно редким.
Если соли используются повторно для каждого хешированного пароля, и соль обнаруживается, это значительно упрощает определение каждого пароля в базе данных. Использование той же соли также означает, что любой с тем же паролем будет иметь тот же хеш.
Общие алгоритмы посола
Не рекомендуется использовать обычные функции хеширования для хранения паролей. Вместо этого был разработан ряд функций со специальными функциями, которые помогают повысить безопасность. К ним относятся Argon2, scrypt, bcrypt и PBKDF2.
Argon 2
Argon2 стал победителем конкурса хэширования паролей 2015 года. Он все еще относительно нов в отношении алгоритмов, но быстро стал одной из самых надежных функций для хэширования паролей..
Несмотря на свою молодость, до сих пор он держался в ряде исследовательских работ, которые исследовали его на наличие слабых мест. Argon2 более гибок, чем другие алгоритмы хеширования паролей, и может быть реализован различными способами.
Scrypt
Произносится «склеп”, Это второй самый молодой алгоритм хеширования паролей, который широко используется. Разработанный в 2009 году, Scrypt использует большой, но регулируемый объем памяти в своих вычислениях. Его регулируемая природа означает, что он все еще может быть устойчивым к атакам, даже если вычислительная мощность растет со временем.
Bcrypt
bcrypt был разработан в 1999 году и основан на шифре Blowfish. Это был один из наиболее часто используемых алгоритмов, используемых в хешировании паролей в течение многих лет, но теперь он более уязвим к программируемым полевым массивам шлюзов (FPGA). Вот почему Argon2 часто предпочтительнее в новых реализациях.
PKFD2
Эта функция получения ключа была разработана для замены PBKDF1, который имел более короткую и менее безопасную длину ключа. Рекомендации NIST от [year] года по-прежнему рекомендуют PKFD2 для хэширования паролей, но Argon2 решает некоторые из его проблем безопасности и может быть лучшим вариантом во многих ситуациях..
Шифрование, перемешивание и посол: резюме
Теперь, когда мы ознакомились с деталями шифрования, хэширования и соления, пришло время быстро вернуться к рассмотрению ключевых различий, чтобы они впитались. Хотя каждый из этих процессов связан, каждый из них служит своей цели.
Шифрование – это процесс кодирования информации для ее защиты.. Когда данные зашифрованы, они могут быть расшифрованы и доступны только тем, у кого есть правильный ключ. Алгоритмы шифрования являются обратимыми, что дает нам возможность держать наши данные подальше от злоумышленников, но при этом иметь доступ к ним, когда они нам нужны. Он широко используется для обеспечения нашей безопасности в Интернете, выполняя важную роль во многих наших протоколах безопасности, которые обеспечивают безопасность наших данных при их хранении и передаче..
Напротив, хеширование – это односторонний процесс. Когда мы что-то хешируем, мы не хотим, чтобы это вернулось в исходную форму. Криптографические хеш-функции имеют ряд уникальных свойств, которые позволяют нам доказать подлинность и целостность данных, например, с помощью цифровых подписей и кодов аутентификации сообщений.
Определенные типы криптографических хеш-функций также используются для хранения наших паролей. Хранение хэша пароля вместо самого пароля обеспечивает дополнительный уровень безопасности. Это означает, что если злоумышленник получает доступ к базе данных, он не может сразу получить доступ к паролям.
Несмотря на то, что хэширование паролей делает жизнь хакеров более сложной, ее все же можно обойти. Это где соление приходит. Соление добавляет дополнительные данные к паролям до их хэширования, что делает атаки более трудоемкими и ресурсоемкими. Если соли и пароли используются правильно, они делают хеш-таблицы и радужные таблицы непрактичным средством атаки.
Вместе шифрование, хеширование и засоление являются важными аспектами обеспечения нашей безопасности в Интернете. Если бы этих процессов не было, злоумышленники получили бы доступ ко всем вашим учетным записям и данным, оставив вас в безопасности в Интернете..
Технологии-1 от tec_estromberg под СС0
зациям и людям безопасно обмениваться информацией, используя общедоступный ключ для шифрования и секретный ключ для расшифровки. RSA также используется для создания цифровых подписей и других форм аутентификации.
Хеширование, с другой стороны, является процессом преобразования данных в непонятный хеш-код, который нельзя обратить. Это делает хеширование полезным для проверки целостности данных и паролей. Криптографические хеш-функции, такие как SHA-256 и MD5, используются для создания хеш-кодов, которые сложно подделать.
Соление – это процесс добавления случайных данных к паролю перед хешированием. Это усложняет взлом пароля, потому что злоумышленник должен знать не только сам пароль, но и случайные данные, которые были добавлены.
В целом, шифрование, хеширование и соление – это важные методы для обеспечения безопасности данных и паролей. Каждый из них имеет свои уникальные свойства и применения, и их использование в сочетании может усилить защиту данных.
зациям и людям безопасно обмениваться информацией, используя общедоступный ключ для шифрования и секретный ключ для расшифровки. RSA также используется для создания цифровых подписей и других форм аутентификации.
Хеширование, с другой стороны, является процессом преобразования данных в непонятный хеш-код, который нельзя обратить. Это делает хеширование полезным для проверки целостности данных и паролей. Криптографические хеш-функции, такие как SHA-256 и MD5, используются для создания хеш-кодов, которые сложно подделать.
Соление – это процесс добавления случайных данных к паролю перед хешированием. Это усложняет взлом пароля, потому что злоумышленник должен знать не только сам пароль, но и случайные данные, которые были добавлены.
В целом, шифрование, хеширование и соление – это важные методы для обеспечения безопасности данных и паролей. Каждый из них имеет свои уникальные свойства и применения, и их использование в сочетании может усилить защиту данных.
зациям и людям безопасно обмениваться информацией, используя общедоступный ключ для шифрования и секретный ключ для расшифровки. RSA также используется для создания цифровых подписей и других форм аутентификации.
Хеширование, с другой стороны, является процессом преобразования данных в непонятный хеш-код, который нельзя обратить. Это делает хеширование полезным для проверки целостности данных и паролей. Криптографические хеш-функции, такие как SHA-256 и MD5, используются для создания хеш-кодов, которые сложно подделать.
Соление – это процесс добавления случайных данных к паролю перед хешированием. Это усложняет взлом пароля, потому что злоумышленник должен знать не только сам пароль, но и случайные данные, которые были добавлены к нему.
В целом, шифрование, хеширование и соление – это важные методы для обеспечения безопасности данных и паролей. Каждый из них имеет свои уникальные свойства и применения, и их правильное использование может помочь защитить ваши данные от несанкционированного доступа.