Найти тему
Наша жизнь и IT

Что такое хэш-функции и для чего они нужны?

Оглавление

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

Photo by Luca Bravo on Unsplash
Photo by Luca Bravo on Unsplash

Для начала разберемся, что вообще делает хэш-функция. Она получает на вход некоторый массив данных и на выходе выдает строку фиксированной длины с зашифрованными данными. Например, алгоритм md5 хэширует сообщение "Hello" как "8b1a9953c4611296a827abf8c47804d7", а вот "Hell" как "1824e8e0307cbfdd1993511ab040075c". Можно заметить, что зашифрованные сообщения очень сильно отличаются друг от друга, чего обычно не бывает при применении других алгоритмов шифрования. Это одно из свойств хэш функции, о которых мы сейчас поговорим.

Свойства

  • Минимальное количество коллизий. Это значит, что почти невозможно подобрать такое сообщение, которое закодируется точно так же, как и, например, наш пароль. Почему это важно? Все дело в том, что при сравнении различных сообщений сравниваются их хэши, а не собственно сами сообщения. Зачем так делать, скоро узнаете.
  • Любой объем данных шифруется в строку определенной длины.
  • Хэш-функция должна работать достаточно быстро.
  • При минимальном изменении сообщения хэш полностью меняется. Это то самое свойство, упомянутое в самом начале. Сделано это для того, чтобы сообщение нельзя было угадать по составным частям. Например, если шифром Виженера зашифровать сообщение "hello, friend" по ключу "goodbye", то получим сообщение "nszop, dvosbg", а если зашифруем просто "hello" ─ "nszop". Совпадение очевидно, а значит шифрованное сообщение можно угадывать по его частям. Хэш такого не позволяет.
  • Невозможность расшифровки. Вот мы и дошли до, если можно так сказать, главного свойства. Запомните ─ хэш не расшифровывается. В интернете можно найти достаточно много сайтов, обещающих "взлом" хэша, но на самом деле они работают так ─ хранят огромное количество заранее зашифрованных сообщений, и если вдруг ваш хэш совпал с хранящимся в их базе данных, то хэш "взломан". Но так можно расшифровать только самые простые сообщения, ни о каких паролях речи быть не может. Поэтому сравниваются всегда хэши, оригинальные сообщения попросту невозможно получить.

Контроль целостности

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

Хранение паролей

Photo by NeONBRAND on Unsplash
Photo by NeONBRAND on Unsplash

Каждый раз при регистрации ваш пароль хэшируется и отправляется в таком виде в базу данных. Оригинальный пароль нигде не используется. А когда вы хотите зайти на сайт, введенный вами пароль снова хэшируется и сравнивается с хранящимся в базе данных. Если хэши совпали ─ пароль верный.

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

На этом все. Не дайте себя обмануть и изучайте IT!