Хеширование
Хеши́рование (хэширование) (от англ. hash – мешанина, фарш), преобразование цифрового информационного объекта в кодовую последовательность фиксированной длины. Цифровым информационным объектом может быть, например, отдельная запись в базе данных, пароль пользователя в информационной системе, сообщение электронной почты и др. Сущность этого понятия заключается в создании достаточно небольшого, не подлежащего расшифровке цифрового «отпечатка» фиксированной длины для произвольного информационного объекта. Как правило, этот отпечаток должен однозначно идентифицировать исходный объект, а восстановление исходной информации по этому отпечатку должно быть затруднено или невозможно.
Первоначально понятие хеширования возникло в 1960-х гг. как способ индексации больших информационных массивов. Впоследствии хеширование применялось гораздо обширнее, став одним из ключевых элементов в таких направлениях, как аутентификация, проверка целостности данных, электронная подпись, криптовалюты и др. К хешированию относят также некоторые способы помехоустойчивого кодирования дискретных сообщений.
Алгоритм, с помощью которого производится хеширование, называется хеш-функцией, или функцией свёртки. Результат работы алгоритма называется хешем (хеш-кодом, хеш-суммой, дайджестом, сводкой сообщения). Простейшим примером хеширования можно считать вычисление бита чётности передаваемых данных. В произвольной исходной последовательности, состоящей из 0 и 1, подсчитывается число единиц. Если получившееся значение – чётное число, то хеш-сумма длиной 1 бит, принимает значение 1 и 0 – в противном случае.
Основные направления развития хеширования сосредоточены, главным образом, в области построения баз данных и в области защиты информации.
В области баз данных хеширование используется для построения ассоциативных массивов на хеш-таблицах, формирования уникальных идентификаторов наборов данных, поиска дубликатов, при кешировании и др. При использовании хеширования можно добиться существенного снижения временны́х затрат на выполнение определённых операций с базами данных. Снижение достигается за счёт того, что хеширование производится быстро и с минимальными вычислительными затратами, а хеш, как правило, значительно меньше исходного информационного объекта.
В области защиты информации хеширование широко применяется в криптографии: при обнаружении ошибок в хранимых и передаваемых данных, при формировании электронной подписи, для обеспечения безопасности пользовательских паролей, в смарт-контрактах, блокчейне, криптовалютах и др. Например, хеширование является одним из наиболее эффективных средств подтверждения целостности данных. Отправитель хеширует своё предварительно зашифрованное сообщение с помощью известного алгоритма и посылает получателю шифр вместе с хешем. Получатель самостоятельно вычисляет хеш и сравнивает с принятым. При совпадении делается вывод о том, что в исходное сообщение не внесены случайные или преднамеренные искажения во время передачи, поскольку при любом изменении сообщения, значение хеша будет иным. Другим примером применения хеширования является работа с паролями в большинстве информационных систем. Для повышения безопасности пароли пользователей не сохраняются и не пересылаются по каналам связи в явном виде. Пересылке и сохранению подлежит хеш, который автоматически формируется на основе вводимого пользователем пароля. Если этот хеш будет дискредитирован злоумышленником, восстановить по нему пароль будет весьма затруднительно из-за необратимости хеш-функции.
Хеширование широко применяется в области защиты информации от непреднамеренных воздействий. Для обнаружения непреднамеренных ошибок, возникающих при обработке, хранении и передаче информации используются помехоустойчивые коды на основе контрольных сумм, представляющие собой с математической точки зрения хеш-функции. В отличие от криптографических хеш-функций контрольные суммы достаточно просто реализуются аппаратно и имеют намного более высокое быстродействие. Помехоустойчивое кодирование на основе контрольных сумм применяется в системах хранения данных, системах цифровой связи, включая сетевые протоколы различных уровней.