Криптографическая хеш-функция (CHF) - это алгоритм, который можно запускать с такими данными, как отдельный файл или пароль, для получения значения, называемого контрольной суммой.
Основное использование CHF - проверка подлинности части данных. Два файла можно считать идентичными только в том случае, если контрольные суммы, сгенерированные из каждого файла с использованием одной и той же криптографической хеш-функции, идентичны.
Некоторые часто используемые криптографические хэш-функции включают MD5 и SHA-1, хотя существуют и многие другие. Их часто называют «хеш-функциями», но это технически неверно. Хеш-функция - это общий термин, который включает в себя CHF наряду с другими типами алгоритмов, такими как проверки циклическим избыточным кодом.
Криптографические хеш-функции: вариант использования
Скажем, вы загружаете последнюю версию браузера Firefox. По какой-то причине вам нужно было загрузить его с сайта, отличного от сайта Mozilla. Поскольку он не размещается на сайте, которому вы научились доверять, вы хотели бы убедиться, что установочный файл, который вы только что загрузили, точно такой же, как тот, который предлагает Mozilla.
Используя калькулятор контрольной суммы, вы вычисляете контрольную сумму, используя определенную криптографическую хеш-функцию, такую как SHA-2, а затем сравниваете ее с той, что опубликована на сайте Mozilla. Если они равны, вы можете быть уверены, что загрузка, которую вы имеете, является той, которую Mozilla предполагала для вас.
Можно ли отменить криптографические хэш-функции?
Криптографические хеш-функции предназначены для предотвращения возможности обращения контрольных сумм, которые они создают, к исходным текстам. Однако, несмотря на то, что их практически невозможно отменить, они не гарантируют 100-процентную защиту данных.
Хакеры могут использовать радужную таблицу, чтобы определить простой текст контрольной суммы. Радужные таблицы - это словари, в которых перечислены тысячи, миллионы или даже миллиарды контрольных сумм вместе с соответствующими значениями в виде обычного текста.
Хотя технически это не реверсирование алгоритма криптографического хеширования, вполне может быть, учитывая, что это так просто сделать. На самом деле, поскольку ни одна радужная таблица не может перечислить все возможные существующие контрольные суммы, они обычно полезны только для простых фраз, таких как слабые пароли.
Вот упрощенная версия радужной таблицы, показывающая, как она будет работать при использовании криптографической хеш-функции SHA-1:
Пример радужного стола | |
---|---|
Обычный текст | SHA-1 Контрольная сумма |
12345 | 8cb2237d0679ca88db6464eac60da96345513964 |
пароль1 | e38ad214943daad1d64c102faec29de4afe9da3d |
ilovemydog | a25fb3505406c9ac761c8428692fbf5d5ddf1316 |
Дженни400 | 7d5eb0173008fe55275d12e9629eef8bdb408c1f |
dallas1984 | c1ebe6d80f4c7c087ad29d2c0dc3e059fc919da2 |
Хакер должен знать, какой криптографический хеш-алгоритм использовался для генерации контрольных сумм для определения значений.
Для дополнительной защиты некоторые веб-сайты, на которых хранятся пароли пользователей, выполняют дополнительные функции алгоритма криптографического хеширования после создания значения, но до его сохранения. Этот процесс создает новое значение, которое понимает только веб-сервер и которое не соответствует исходной контрольной сумме.
Например, после ввода пароля и формирования контрольной суммы он может быть разделен на несколько частей и переупорядочен перед сохранением в базе паролей, или некоторые символы могут быть заменены другими. При попытке аутентификации в следующий раз, когда пользователь входит в систему, сервер отменяет эту дополнительную функцию, и исходная контрольная сумма генерируется снова, чтобы убедиться, что пароль пользователя действителен.
Выполнение этих шагов ограничивает полезность взлома, при котором украдены все контрольные суммы. Идея состоит в том, чтобы выполнить неизвестную функцию, поэтому, если хакер знает криптографический алгоритм хэширования, но не знает пользовательский алгоритм, то знание контрольных сумм пароля бесполезно.
Пароли и криптографические хеш-функции
База данных сохраняет пароли пользователей аналогично радужной таблице. При вводе пароля генерируется контрольная сумма, которая сравнивается с той, что записана под вашим именем пользователя. Затем вам предоставляется доступ, если они идентичны.
Учитывая, что CHF создает необратимую контрольную сумму, безопасно ли для вас сделать свой пароль таким простым, как 12345 вместо 12@34 $5 просто потому, что сами контрольные суммы непонятны? Нет, и вот почему.
Эти два пароля невозможно расшифровать, просто взглянув на контрольные суммы:
MD5 для 12345: 827ccb0eea8a706c4c34a16891f84e7b
MD5 для 12@34$5: a4d3cc004f487b18b2ccd4853053818b
На первый взгляд может показаться, что можно использовать любой из этих паролей. Это верно, если злоумышленник пытался вычислить ваш пароль, угадывая контрольную сумму MD5, чего никто не делает, но это неверно, если выполняется атака полным перебором или атака по словарю, что является распространенной тактикой.
Атака грубой силы происходит, когда несколько случайных ударов предпринимаются при подборе пароля. В этом случае было бы легко угадать 12345, но довольно сложно случайно вычислить другой. Атака по словарю похожа на то, что злоумышленник может попробовать каждое слово, число или фразу из списка распространенных (и не очень распространенных) паролей, и 12345 является одним из таких распространенных паролей. пароли.
Несмотря на то, что криптографические хэш-функции создают контрольные суммы, которые сложно или даже невозможно угадать, вам все равно следует использовать сложные пароли для всех ваших сетевых и локальных учетных записей пользователей.
Дополнительная информация о криптографических хеш-функциях
Может показаться, что криптографические хеш-функции связаны с шифрованием, но они работают по-разному.
Шифрование - это двусторонний процесс, когда что-то шифруется, чтобы стать нечитаемым, а затем расшифровывается позже, чтобы снова нормально использоваться. Вы можете зашифровать файлы, которые вы сохранили, чтобы любой, кто получит к ним доступ, не смог их использовать, или вы можете использовать шифрование при передаче файлов, чтобы зашифровать файлы, которые перемещаются по сети, например те, которые вы загружаете или скачиваете онлайн.
Криптографические хэш-функции работают по-другому, поскольку контрольные суммы не предназначены для обращения с помощью специального пароля дехеширования. Единственная цель, которую выполняют CHF, - это сравнение двух частей данных, например, при загрузке файлов, сохранении паролей и извлечении данных из базы данных.
Криптографическая хэш-функция может выдавать одну и ту же контрольную сумму для разных фрагментов данных. Когда это происходит, это называется коллизией, что является огромной проблемой, учитывая, что вся суть функции состоит в том, чтобы создавать уникальные контрольные суммы для каждого ввода данных.
Коллизии могут возникать из-за того, что каждый CHF выдает значение фиксированной длины независимо от входных данных. Например, криптографическая хэш-функция MD5 генерирует 827ccb0eea8a706c4c34a16891f84e7b, 1f633b2909b9c1addf32302c7a497983 и e10adc3949ba59abbe56e057f20f883e для трех совершенно разных блоков данных.
Первая контрольная сумма взята из 12345. Второй был сгенерирован из более чем 700 букв и цифр, а третий - из 123456. Все три ввода имеют разную длину, но результаты всегда имеют длину всего 32 символа, поскольку использовалась контрольная сумма MD5.
Нет ограничений на количество контрольных сумм, которые могут быть созданы, потому что каждое крошечное изменение во входных данных должно создавать совершенно другую контрольную сумму. Поскольку существует ограничение на количество контрольных сумм, которые может создать один CHF, всегда есть вероятность, что вы столкнетесь с коллизией.
Вот почему были созданы другие криптографические хеш-функции. В то время как MD5 генерирует 32-символьное значение, SHA-1 генерирует 40 символов, а SHA-2 (512) генерирует 128 символов. Чем больше символов в контрольной сумме, тем меньше вероятность возникновения коллизии.