Что такое хеш-функция в криптографии? Руководство для начинающих.

Carding 4 Carders

Professional
Messages
2,731
Reputation
13
Reaction score
1,367
Points
113

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

Что за четыре буквы, и это одновременно и вкусный продукт для завтрака, и растение с заостренными листьями? Если вы угадали «хэш», то вы правы! Но у хеша есть и другое значение, связанное с криптографией, и это то, что мы собираемся здесь обсудить.
Хеш-функция - это серьезный математический процесс, который играет важную роль в криптографии с открытым ключом. Зачем? Потому что это то, что помогает вам:
  • Надежно хранить пароли в базе данных,
  • Обеспечьте целостность данных (во множестве различных приложений), указав, когда данные были изменены,
  • Сделать возможной безопасную аутентификацию и
  • Организуйте контент и файлы таким образом, чтобы повысить эффективность.
Вы можете найти хэш-функции, которые используются практически повсюду - от подписания программных приложений, которые вы используете на своем телефоне, до защиты подключений к веб-сайтам, которые вы используете для передачи конфиденциальной информации в Интернете. Но что такое хеш-функция в криптографии? Что именно он делает для защиты данных вашего бизнеса? А как работает хеширование?

Что такое хеш-функция?​

Такой термин, как «хеш-функция», может означать несколько вещей для разных людей в зависимости от контекста. Для хэш-функций в криптографии определение немного более прямое. Хэш-функция - это уникальный идентификатор для любой части контента. Это также процесс, который принимает данные открытого текста любого размера и преобразует их в уникальный зашифрованный текст определенной длины.
Первая часть определения говорит вам, что никакие две части контента не будут иметь одинаковый хеш-дайджест, и если контент изменяется, хеш-дайджест также изменяется. По сути, хеширование - это способ гарантировать, что любые данные, которые вы отправляете, доходят до получателя в том же состоянии, в котором он оставил вас, полностью нетронутым и неизменным.
Но подождите, разве это не похоже на шифрование? Конечно, они похожи, но шифрование и хеширование - это не одно и то же. Это две отдельные криптографические функции, которые помогают в обеспечении безопасного и законного обмена данными. Итак, если вы слышите, как кто-то говорит о «расшифровке» хеш-значения, то вы знаете, что они не знают, о чем говорят, потому что, ну, хеши изначально не зашифрованы.
Мы поговорим подробнее о разнице между этими двумя процессами чуть позже. Но пока остановимся на теме хеширования. Итак, как выглядит хеширование?
Вот отличное видео, которое помогает сломать хэш-функции:
Итак, как вы определяете хеш в более техническом смысле? Хеш-функция - это универсальный односторонний криптографический алгоритм, который сопоставляет вход любого размера с уникальным выходом фиксированной длины бит. Результирующий вывод, известный как хеш-дайджест, хеш-значение или хеш-код, является уникальным идентификатором, который мы упоминали ранее.
Итак, почему мы называем это односторонней функцией? Честно говоря, это из-за вычислительной мощности, времени и затрат, которые потребуются для его грубой силы. Пробовать все возможные комбинации, приводящие к хеш-значению, совершенно непрактично. Итак, для всех намерений и целей хеш-функция - это односторонняя функция.
Когда вы хешируете данные, результирующий дайджест обычно меньше, чем ввод, с которого он был начат. (Вероятно, исключение составляет случай, когда вы хешируете пароли.) При хешировании не имеет значения, есть ли у вас сообщение из одного предложения или целая книга - результатом все равно будет кусок битов фиксированной длины (единицы и 0 с). Это предотвращает возможность непреднамеренных сторон выяснить, насколько большим (или маленьким) было исходное входное сообщение.
Хеш-функции в основном используются для аутентификации, но имеют и другие применения.

Свойства алгоритма сильного хеширования​

Итак, что делает алгоритм хеширования сильным? У всех хороших людей есть несколько ключевых черт:
  • Детерминизм. Алгоритм хеширования должен быть детерминированным , что означает, что он всегда дает результат одинакового размера, независимо от размера ввода, с которого вы начали. Это означает, что если вы хешируете одно предложение, результирующий результат должен быть того же размера, что и при хешировании всей книги.
  • Устойчивость к предварительному изображению . Идея заключается в том, что сильный алгоритм хеширования - это алгоритм сопротивления прообразу, а это означает, что невозможно изменить значение хеш-функции, чтобы восстановить исходное входное сообщение с открытым текстом. Следовательно, концепция хэшей является необратимой, односторонней функцией.
  • Сопротивление столкновению - столкновение происходит при столкновении двух объектов. Что ж, эта концепция перенесена в криптографию с хеш-значениями. Если два уникальных образца входных данных приводят к одинаковым выходным данным, это называется коллизией. Это плохая новость и означает, что алгоритм, который вы используете для хеширования данных, сломан и, следовательно, небезопасен. По сути, проблема заключается в том, что кто-то может создать вредоносный файл с искусственным значением хэша, который соответствует подлинному (безопасному) файлу, и выдать его за настоящий, потому что подпись будет соответствовать. Итак, хороший и надежный алгоритм хеширования - это тот, который устойчив к этим коллизиям.
  • Эффект лавины - это означает, что любое изменение, внесенное во вход, независимо от того, насколько оно незначительно, приведет к значительному изменению выхода. По сути, небольшое изменение (например, добавление запятой) превращается в снежный ком в нечто гораздо большее, отсюда и термин «лавинный эффект».
  • Скорость хеширования - алгоритмы хеширования должны работать с разумной скоростью. Во многих ситуациях алгоритмы хеширования должны быстро вычислять хеш-значения; это считается идеальным свойством криптографической хеш-функции. Однако это свойство немного более субъективно. Видите ли, быстрее не всегда лучше, потому что скорость должна зависеть от того, как будет использоваться алгоритм хеширования. Иногда вам нужен более быстрый алгоритм хеширования, а в других случаях лучше использовать более медленный, для выполнения которого требуется больше времени. Первый лучше подходит для соединений с веб-сайтами, а второй - для хеширования паролей.

Что делает хеш-функция?​

Одна из целей хеш-функции в криптографии состоит в том, чтобы принимать входной открытый текст и генерировать выходные данные хешированного значения определенного размера таким образом, чтобы их нельзя было отменить. Но с высоты 10 000 футов они делают больше. Видите ли, в мире криптографии хэш-функции имеют тенденцию носить несколько шляп. Вкратце, сильные хеш-функции:
  • Обеспечить целостность данных,
  • Защищать от несанкционированных изменений,
  • Защитите сохраненные пароли и
  • Работайте с разной скоростью для разных целей.

Обеспечьте целостность данных​

Хеш-функции - это способ обеспечить целостность данных в криптографии с открытым ключом. Я имею в виду, что хэш-функции служат контрольной суммой или способом для кого-то определить, были ли данные изменены после их подписания. Он также служит средством проверки личности.
Например, предположим, что вы вошли в общедоступный Wi-Fi, чтобы отправить мне электронное письмо. (Кстати, не делайте этого. Это очень небезопасно.) Итак, вы записываете сообщение, подписываете его, используя свой цифровой сертификат, и отправляете его по пути через Интернет. Это то, что вы могли бы назвать основной территорией атаки «человек посередине» - это означает, что кто-то может легко перехватить ваше сообщение (опять же, потому что общественные беспроводные сети заведомо небезопасны) и изменить его в соответствии со своими злыми целями.
Хэш-дайджест полностью изменяется, когда какое-либо содержимое электронной почты изменяется после цифровой подписи, что свидетельствует о том, что ему нельзя доверять.
Итак, теперь я получил сообщение и хочу знать, что оно законное. Что я могу сделать, так это использовать хеш-значение, которое предоставляет ваша цифровая подпись (вместе с алгоритмом, который, по его словам, вы использовали), чтобы самостоятельно повторно сгенерировать хеш, чтобы проверить, совпадает ли созданное мной значение хеш-функции с тем, которое вы отправили. Если он совпадает - отлично, значит, никто с ним не связывался. Но если это не так… ну, звучат метафорические клаксоны, поднимаются красные флажки, и я знаю, что нельзя этому доверять.
Даже если что-то крошечное изменилось в сообщении - вы пишете заглавную букву вместо строчной или меняете восклицательный знак вместо точки - это приведет к генерации совершенно нового хеш-значения. Но в этом вся идея - независимо от того, насколько велико или мало изменение, разница в значениях хэша скажет вам, что это незаконно.

Защита от несанкционированных изменений​

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

Позволяет проверять и надежно хранить пароли​

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

Работайте с разной скоростью для разных целей​

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

Где вы найдете используемые хэши​

Но где найти хеш-функции? Не смотрите дальше, чем окружающие вас технологии. Хеширование полезно для всего, от подписания нового программного обеспечения и проверки цифровых подписей до защиты подключений к веб-сайтам на вашем компьютере и мобильных веб-браузерах. Он также отлично подходит для индексирования и получения элементов в онлайн-базах данных. Например, хеширование используется для проверки:
  • Блоки данных в криптовалютах и других технологиях блокчейн.
  • Целостность данных программного обеспечения, электронной почты и документов.
  • Пароли и хранение хэшей паролей (а не самих паролей) в онлайн-базах данных. (Примечание: этот процесс требует небольшого «рывка» чего-то особенного, чтобы сделать эти хэши более безопасными - соль).
Хеш-функции можно найти в криптографии с открытым ключом. Например, вы обнаружите, что хеш-функции облегчаются за счет использования:
  • SSL / TLS-сертификаты (т.е Сертификаты безопасности веб-сайтов ),
  • Сертификаты подписи кода
  • Сертификаты подписи документов
  • Сертификаты подписи электронной почты .

Как работает хеширование?​

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

Примеры хеширования с разными алгоритмами​

Хорошо, теперь, когда мы знаем, что такое хеш-функция и что она делает в теоретическом контексте, давайте рассмотрим, как она работает с точки зрения логистики, на нескольких примерах. Скажем, у вас есть следующая загадка от Голлум в Хоббите, как ваш вклад:
«Его нельзя увидеть, нельзя почувствовать,
нельзя услышать, нельзя почувствовать запах.
Он лежит за звездами и под холмами,
И пустые дыры он заполняет.
Оно выходит первым, а затем следует.
Заканчивает жизнь, убивает смех ».
Нет, я не собираюсь давать вам ответ на загадку, если вы еще не разгадали ее. Но если бы вам пришлось запустить эту загадку с помощью алгоритма хеширования SHA-256, результат на экране выглядел бы так:
49FCA16A2271B34066DAA46492C226C4D4F61D56452A1E1A01A3201B234509A2
Это простая иллюстрация того, как алгоритм хеширования принимает входные данные и генерирует уникальный шестнадцатеричный выходной сигнал фиксированной длины.
Что, если вы также решите хешировать меньшее сообщение? Скажите, например, «Властелин колец». Тогда ваш результат будет выглядеть одинаково с точки зрения размера (как показано ниже), если вы используете тот же алгоритм хеширования:
01912B8E8425CFF006F430C15DBC4991F1799401F7B6BEB0633E56529FE148B9
Это потому, что обе строки примера имеют 256 бит, которые отображаются на экране как 64 шестнадцатеричных символа в строке. Независимо от того, насколько велико или мало сообщение, оно всегда будет возвращать вывод того же размера. Помните, что хеш-алгоритмы детерминированы , поэтому это означает, что они всегда приводят к выходу одного и того же размера независимо от размера входных данных.
Теперь, если вы возьмете тот же ввод загадки из шести строк и прогоните его через хеш-функцию MD5, тогда вы получите хеш-значение, которое вместо этого будет выглядеть примерно так:
B53CE8A3139752B10AAE878A15216598
Как видите, результат немного короче. Это потому, что MD5 дает вам хеш-дайджест длиной всего 32 шестнадцатеричных символа. Это буквально половина размера дайджестов, полученных в результате алгоритма хеширования SHA-256. Но каждый раз, когда вы запускаете алгоритм хеширования MD5 для сообщения с открытым текстом, результирующий результат будет того же размера.
Что, если вы решили разгадать загадку с помощью алгоритма хеширования SHA-512? Затем мы переходим к противоположному концу спектра с точки зрения длины, и ваш дайджест будет выглядеть примерно так (512-битная шестнадцатеричная строка):
6DC1AAE5D80E8F72E5AF3E88A5C0FA8A71604739D4C0618182303EEEB1F02A0DBA319987D5B5F717E771B9DA1EAD7F3F92DC8BA48C064D41DD790B44D7D98

Хеш против шифрования​

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

Примеры распространенных алгоритмов хеширования и семейств алгоритмов​

Хорошо, теперь мы знаем, что такое хэш-функции и как работают алгоритмы хеширования. Пришло время узнать, какие из наиболее распространенных хеш-алгоритмов. NIST предоставляет руководство по хэш-функциям, как и несколько федеральных стандартов обработки информации (FIPS).
Вот несколько примеров распространенных алгоритмов хеширования:
  • Алгоритм безопасного хеширования (SHA) - это семейство хешей содержит SHA-1, SHA-2 (семейство внутри семейства, которое включает SHA-224, SHA-256, SHA-384 и SHA-512) и SHA-3 ( SHA3-224, SHA3-256, SHA3-384 и SHA3-512). SHA-1 устарел, и сейчас наиболее распространенным алгоритмом хеширования является SHA-256.
  • Дайджест сообщения (MD) - это семейство хэшей содержит множество хеш-функций, включая MD2, MD4, MD5 и MD6. MD5 долгое время считался стандартным алгоритмом хеширования, но теперь он считается сломанным, поскольку приводит к конфликтам в дикой природе.
  • Windows NTHash - также известный как хэш Unicode или NTLM, этот хеш обычно используется в системах Windows, поскольку он более безопасен, чем его предшественник, LM-хеш. Тем не менее, у NTHash также есть уязвимости, о которых нужно беспокоиться, но этот конкретный алгоритм является неотъемлемой частью систем Windows. Хотя использование NTLMv1 в настоящее время в значительной степени осуждается, NTLM2 все еще используется.
Другие примеры хеш-алгоритмов включают, среди прочего, BLAKE 2 и BLAKE 3, RIPEMD-160 и WHIRLPOOL.

Что мы хэшировали​

О хэш-функциях и хешировании в целом нужно много знать. Что они собой представляют, что они делают, как работают и где вы найдете их использование в компьютерных коммуникациях и технологиях.
  • Хеширование полезно в структуре данных для индексации и извлечения элементов набора данных. Он также позволяет осуществлять проверку путем обнаружения модификаций.
  • В криптографии хеширование принимает данные в виде открытого текста (входные данные) и выполняет математический процесс, известный как алгоритм хеширования. Этот процесс генерирует вывод фиксированной длины, называемый хеш-значением.
  • Хеш-функция является детерминированной, что означает, что независимо от размера ввода, вывод всегда будет одного размера. Он также устойчив к столкновениям и прорисовкам.
    • Устойчивость к столкновениям означает, что у вас не может быть двух уникальных входов, приводящих к одному и тому же выходу, и
    • Сопротивление прообразу относится к хешу, который является односторонней функцией, которую нельзя отменить, чтобы раскрыть исходное текстовое сообщение.
  • Вы не можете манипулировать данными или вносить даже крошечные изменения без полного изменения результирующего значения хеш-функции. Это известно как лавинный эффект.
  • Различные алгоритмы хеширования, которых существует множество семейств и отдельных алгоритмов, работают с разной скоростью и работают с разными размерами данных. Например, SHA-256 имеет на выходе 256 бит (или что соответствует строке из 64 шестнадцатеричных символов).
 
Top