Cout << "hash_function";

Cout << "hash_function";

staziss

Что такое хэш?

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

Условия необходимые для идеальной хэш-функции.

  • Детерминированность, иными словами одни и те же входные данные хэшируются одной и той же строкой.
  • Отсутствие коллизий.
  • Быстродействие функции.

Что такое коллизия?

Это такое явление при котором два различных входных блока(x, y) дают один хэш: H(x) = H(y). Коллизии существуют для большинства хеш-функций, но для хороших хеш-функций частота их возникновения близка к теоретическому минимуму. Но почему же существуют коллизии? Так как входные блоки бесконечны, а выходная строка имеет конечную длину.  Хеш-функция считается устойчивой к коллизиям, когда вероятность обнаружения коллизии настолько мала, что для этого потребуются миллионы лет вычислений. Различают коллизии двух родов:

Коллизия первого рода.

У нас имеется сообщение(X), и мы хотим подобрать такое сообщение(Y), что H(X) = H(Y). Т.е. при этой коллизии злоумышленник пытается подобрать такой файл, хэш которого будет равен хэшу существующего файла.

Коллизия второго рода.

Исходное сообщение не задано, нужно подобрать X и Y, такие что H(X) = H(Y). Злоумышленник генерирует сразу два файла, предоставляет жертве изначально "нормальный" файл, а когда жертва собирается подписать этот договор, то заменяет его на вредоносный.

Как работает хэш?

Например, захэшируем мой никнейм — staziss — хэш функцией MD5 при помощи генератора: 1a019572cd43ebd76bfce40b03ef3523. Допустим пользователь случайно ввёл первый символ с капсом, тогда хэш превратиться в dcd2cace66fde8f3a8e34740ebaced8c. Разница только в регистре одного из символом, но хэш изменился до неузнаваемости. Можно заметить, что и длинна двух хэшей совпадает, но вы можете мне сказать, что я захешировал строки одной длины, но если я захэшурую гимн СССР(803 символа), то я всё равно получу строку длины 32: 2e64b33bc94c17fbeea592d06b61986f.

Для чего используется хэш?

Верификация пароля.

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

Цифровая подпись.

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

Защита от пиратства.

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

Проверка целостности файлов.

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

Защита от вирусов.

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


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

С ув. ваш TechMentor.

Report Page