Что такое криптографическая хэш-функция?

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

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

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

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

Криптографические хэш-функции: вариант использования

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

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

Могут ли криптографические хеш-функции быть обращены вспять?

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

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

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

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

Пример Радужного Стола
Простой текстКонтрольная сумма SHA-1
123458cb2237d0679ca88db6464eac60da96345513964
password1e38ad214943daad1d64c102faec29de4afe9da3d
я люблю мою собакуa25fb3505406c9ac761c8428692fbf5d5ddf1316
Jenny4007d5eb0173008fe55275d12e9629eef8bdb408c1f
dallas1984c1ebe6d80f4c7c087ad29d2c0dc3e059fc919da2

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

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

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

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

Пароли и криптографические хеш-функции

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

Учитывая, что криптографическая хеш-функция создает необратимую контрольную сумму, безопасно ли сделать свой пароль таким простым, как 12345, вместо 12 @ 34 $ 5, просто потому, что сами контрольные суммы не могут быть поняты? Нет, и вот почему.

Эти два пароля невозможно расшифровать, просто взглянув на контрольные суммы:

MD5 для 12345: 827ccb0eea8a706c4c34a16891f84e7b

MD5 за 12 @ 34 $ 5: a4d3cc004f487b18b2ccd4853053818b

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

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

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

Дополнительная информация о криптографических хэш-функциях

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

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

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

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

Столкновения могут произойти из-за того, что каждая криптографическая хеш-функция выдает значение фиксированной длины независимо от входных данных. Например, криптографическая хэш-функция MD5 генерирует 827ccb0eea8a706c4c34a16891f84e7b, 1f633b2909b9c1addf32302c7a497983 и e10adc3949ba59abbe56e057f20f883e для трех совершенно разных блоков данных.

Первая контрольная сумма от 12345. Второй был создан из более чем 700 букв и цифр, а третий из 123456. Все три ввода имеют разную длину, но результаты всегда имеют длину всего 32 символа с момента использования контрольной суммы MD5.

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

Вот почему были созданы другие криптографические хеш-функции. В то время как MD5 генерирует 32-символьное значение, SHA-1 генерирует 40 символов, а SHA-2 (512) генерирует 128. Чем больше символов в контрольной сумме, тем меньше вероятность возникновения коллизии.

Ссылка на основную публикацию