
Учитывая огромный рост объема данных, обрабатываемых локальными и глобальными сетями передачи данных, компьютерные ученые постоянно ищут способы ускорить доступ к данным и обеспечить их безопасный обмен. Одним из решений, которое они используют наряду с другими технологиями безопасности, является хэш-функция. В этой статье рассказывается о свойствах хэш-функций и о том, как они используются.
Значение глагола «to hash» — измельчать или скремблировать что-либо — дает представление о том, что хэш-функции делают с данными. Верно, они «скремблируют» данные и преобразуют их в числовое значение. И независимо от длины входных данных, выходное значение всегда имеет одинаковую длину. Хэш-функции также называют алгоритмами хэширования или функциями дайджеста сообщений. Они используются во многих областях информатики, например:
- Для шифрования связи между веб-серверами и браузерами, а также для генерации идентификаторов сеансов в интернет-приложениях и кэширования данных.
- Для защиты конфиденциальных данных, таких как пароли, данные веб-аналитики и платежные реквизиты.
- добавление цифровых подписей к электронным письмам
- Для поиска идентичных или похожих наборов данных с помощью функций поиска.
Хэш-функция преобразует строки разной длины в строки фиксированной длины, известные как хэш-значения или дайджесты. Например, хэширование можно использовать для шифрования паролей в строки разрешенных символов. Выходные значения не могут быть инвертированы для получения исходных входных данных.

Каковы свойства хэш-функций?
Хеш-функции разрабатываются таким образом, чтобы они обладали следующими свойствами:
Односторонняя
После того как хэш-значение сгенерировано, его невозможно преобразовать обратно в исходные данные. Например, в приведенном выше примере не должно быть возможности преобразовать «$P$Hv8rpLanTSYSA/2bP1xN.S6Mdk32.Z3» обратно в «susi_562#alone».
Без коллизий
Чтобы хэш-функция была свободна от коллизий, никакие две строки не могут соответствовать одному и тому же выходному хэшу. Другими словами, каждая входная строка должна генерировать уникальную выходную строку. Этот тип хэш-функции также называют криптографической хэш-функцией. В приведенном выше примере хэш-функции нет одинаковых хэш-значений, поэтому нет «коллизий» между выходными строками. Программисты используют передовые технологии для предотвращения таких коллизий.
Молниеносный
Если хэш-функции требуется слишком много времени для вычисления хэш-значений, толку от такой процедуры будет мало. Поэтому хэш-функции должны быть очень быстрыми. В базах данных хэш-значения хранятся в так называемых хэш-таблицах для обеспечения быстрого доступа.
Что такое хэш-значение?
Хэш-значение — это выходная строка, генерируемая хэш-функцией. Независимо от входных данных, все выходные строки, генерируемые определенной хэш-функцией, имеют одинаковую длину. Длина определяется типом используемой технологии хэширования. Выходные строки создаются из набора разрешенных символов, определенных в хэш-функции.

Хэш-значение — это результат, вычисленный хэш-функцией и алгоритмом. Поскольку хэш-значения уникальны, подобно отпечаткам пальцев человека, их также называют «отпечатками пальцев». Если взять строчные буквы от «a» до «f» и цифры от «0» до «9» и определить длину хэш-значения в 64 символа, то возможные выходные значения составят 1,1579209e+77 — это 70 и 24 нуля! Это показывает, что даже при использовании более коротких строк можно генерировать приемлемые отпечатки пальцев.
Хеш-значения в приведенном выше примере могут быть сгенерированы с помощью всего нескольких строк PHP-кода:
<?php
echo hash('sha256', 'apple');
?>
Здесь для хэширования входного значения «apple» используется алгоритм шифрования «sha256». Соответствующее хэш-значение или отпечаток пальца всегда имеет вид «3a42c503953909637f78dd8c99b3b85ddde362415585afc11901bdefe8349102».
Хэш-функции и веб-сайты
При SSL-шифрованной передаче данных, когда веб-сервер получает запрос, он отправляет сертификат сервера в браузер пользователя. Затем с помощью хэш-функции генерируется идентификатор сессии, который отправляется на сервер, где он расшифровывается и проверяется. Если сервер одобряет идентификатор сессии, устанавливается зашифрованное HTTPS-соединение и начинается обмен данными. Все пакеты данных, которыми обмениваются пользователи, также шифруются, поэтому хакерам практически невозможно получить к ним доступ.

Идентификаторы сеанса генерируются на основе данных о посещении сайта, таких как IP-адрес и отметка времени, и передаются вместе с URL-адресом. Одно из распространенных применений идентификаторов сеанса — присвоение уникальных идентификаторов людям, совершающим покупки на сайте. В настоящее время идентификаторы сеансов редко передаются в качестве параметра URL (например, в виде www.domain.tld/index?sid=d4ccaf2627557c756a0762419a4b6695). Вместо этого они хранятся в виде cookie в заголовке сайта.
Хеш-значения также используются для шифрования кэшированных данных, чтобы предотвратить использование кэша неавторизованными пользователями для доступа к регистрационным и платежным данным или другой информации о сайте.
Аналогичным образом происходит обмен данными между FTP-сервером и клиентом, использующим протокол SFTP.
Защита конфиденциальных данных
Данные для входа в онлайн-аккаунты часто становятся целью кибератак. Хакеры либо хотят нарушить работу сайта (например, уменьшить доход от рекламы, основанной на трафике), либо получить доступ к информации о способах оплаты.

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

Отправка электронного письма с цифровой подписью происходит следующим образом:
- Алиса (отправитель) преобразует свое сообщение в хэш-значение и шифрует его с помощью своего закрытого ключа. Это зашифрованное хэш-значение и есть цифровая подпись.
- Алиса отправляет электронное письмо и цифровую подпись получателю Бобу.
- Боб генерирует хэш-значение сообщения, используя ту же хэш-функцию. Он также расшифровывает хэш-значение с помощью открытого ключа Алисы и сравнивает два хэша.
- Если два хэш-значения совпадают, Боб знает, что сообщение Алисы не было подделано во время передачи.
Обратите внимание, что цифровая подпись подтверждает целостность сообщения, но не шифрует его. Поэтому, если вы отправляете конфиденциальные данные, лучше всего зашифровать их, а также использовать цифровую подпись.
Как хэш-функции можно использовать для поиска?
Поиск в больших объемах данных — это очень ресурсоемкий процесс. Представьте, что у вас есть таблица со списком всех жителей большого города, с множеством различных полей для каждой записи (имя, фамилия, адрес и т.д.). Поиск только одного термина занял бы много времени и потребовал бы больших вычислительных мощностей. Чтобы упростить процесс, каждую запись в таблице можно преобразовать в уникальное хэш-значение. Затем поисковый термин преобразуется в хэш-значение. Это ограничивает количество букв, цифр и символов, которые необходимо сравнивать, что гораздо эффективнее, чем поиск по каждому полю, существующему в таблице данных, например, по всем именам, начинающимся на «Ann».
Хэш-функции используются для повышения безопасности электронных коммуникаций, и в настоящее время разработано множество сложнейших стандартов. Однако хакеры знают об этом и постоянно придумывают более совершенные методы взлома.