Найти в Дзене
Deep & Surface

HASH-функция: пароль или каша с маслом

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

Вы любите поэзию Есенина? Тогда вы точно должны узнать эти строки:

MD5-HASH: Последнее четверостишие стихотворения Есенина
MD5-HASH: Последнее четверостишие стихотворения Есенина

Не вспомнили? Это ведь его знаменитое произведение «Гой ты, Русь, моя родная...». Ничего, всякое бывает. Но ведь вы наверняка узнаете президента нашей страны:

MD5-HASH: «Владимир Владимирович Путин»
MD5-HASH: «Владимир Владимирович Путин»

Опять промах, может быть попробуете это?

MD5-HASH: «1234»
MD5-HASH: «1234»

Ладно, да, это все чушь. Но для некоторых это может показаться узнаваемой кашей.

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

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

MD5 - 128-битный алгоритм хеширования, разработанный профессором Рональдом Л. Ривестом из Массачусетского технологического института (Massachusetts Institute of Technology, MIT) в 1991 году.
MD5 - 128-битный алгоритм хеширования, разработанный профессором Рональдом Л. Ривестом из Массачусетского технологического института (Massachusetts Institute of Technology, MIT) в 1991 году.

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

Мы можем создавать хэши практически любого цифрового контента: документа, изображения, песни, чего угодно. Это может быть легче понять, если вспомнить, что любой цифровой контент на самом низком уровне представляет собой всего лишь цепочку нулей и единиц. Все можно представить в двоичном формате: «привет!» в двоичном коде UTF-8 01001000 01100101 01101100 01101100 01101111 00100001. Именно этот двоичный код трансформирует хэш-функция.

Существует множество различных математических формул, которые можно использовать для создания хэшей. На самом деле, хэши не обязательно должны быть длинными. Каждая хэш-функция разбивает и микширует по-разному, что дает разные результаты. В примерах выше использован метод MD5, создающий хэш длиной 32 символа. Некоторые хэш-функции создают очень длинные хэш-коды: SHA3–512 (алгоритм безопасного хэширования) создает хэш длиной 128 символов.

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

«Казнить нельзя, помиловать»: cbbe1e3d02e3d40f4c90badf9463926d

«Казнить, нельзя помиловать»: a472d298396e77c6a6af5a3b8f460cf7

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

Цифровые отпечатки пальцев

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

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

Проблема дня рождения

-5

Возможно, вы заметили недостаток в хэшах, которые использовались до сих пор.

Если мы можем взять любой цифровой контент любой длины, у нас будет почти бесконечное количество возможностей (с правильной машиной это было бы бесконечно, поскольку мы могли бы просто продолжать делать контент длиннее). С 32-символьным шестнадцатеричным хэшем у нас есть конечное количество возможностей от 00000000000000000000000000000000 до ffffffffffffffffffffffffffffff. Это все еще очень большое число, 1 208 925 819 614 629 174 706 176 возможных комбинаций, если быть точным (это септиллион, если вы хотите знать - 1 с 24 нулями после него). Но это не бесконечно, так что у нас будут дубликаты.

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