Открыть сервисСервис

Передача хеша

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

История

Концепция хеширования восходит к 1950-м годам, когда появились первые алгоритмы для организации данных (например, хеш-таблицы). Однако криптографические хеш-функции начали активно развиваться в 1970–1980-х годах с появлением алгоритмов MD2, MD4, MD5 (Ronald Rivest, 1989–1991). Передача хеша как самостоятельный протокольный шаг стала актуальной с развитием сетевых технологий: в 1990-х годах в протоколах аутентификации (например, CHAP — Challenge-Handshake Authentication Protocol) начали использовать передачу хеша пароля вместо самого пароля. В 2000-х годах с распространением блокчейна (биткойн, 2009) передача хеша стала ключевым элементом для подтверждения целостности блоков и работы proof-of-work.

Принцип работы

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

Ключевые свойства хеш-функций

  • Однонаправленность: по хешу невозможно (вычислительно неэффективно) восстановить исходные данные.
  • Коллизионная стойкость: практически невозможно найти два разных набора данных с одинаковым хешем.
  • Лавинный эффект: изменение одного бита входных данных приводит к кардинальному изменению хеша (в среднем 50% битов).

Виды передачи хеша

1. Передача хеша для проверки целостности

Наиболее распространённый случай. Хеш вычисляется для файла, сообщения или набора данных и передаётся отдельно. Получатель загружает данные, вычисляет хеш и сравнивает. Примеры: контрольные суммы (MD5, SHA-1, SHA-256) при скачивании файлов из интернета; хеши в протоколах BitTorrent (инфо-хеш торрент-файла); хеши в системах контроля версий (Git — коммиты идентифицируются хешем SHA-1).

2. Передача хеша для аутентификации

Используется для подтверждения знания пароля или секретного ключа без его раскрытия. Например, в протоколе HTTP Digest Access Authentication (RFC 7616) клиент вычисляет хеш от пароля и случайного числа (nonce) и отправляет серверу. Сервер, зная пароль и nonce, вычисляет хеш и сравнивает. Аналогично работает аутентификация в CHAP (PPP) и в некоторых реализациях протокола RADIUS.

3. Передача хеша в блокчейне

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

4. Передача хеша в цифровых подписях

В схемах цифровой подписи (RSA, DSA, ECDSA) сначала вычисляется хеш сообщения, а затем подписывается именно хеш, а не само сообщение. Это уменьшает размер подписи и повышает эффективность. Передача хеша (в составе подписи) позволяет верифицировать подлинность и целостность.

5. Передача хеша в протоколах доказательства с нулевым разглашением

В некоторых протоколах (например, zk-SNARKs) хеш используется для фиксации секрета без его раскрытия. Участник передаёт хеш секрета, а затем доказывает знание секрета, не раскрывая его.

Применение

Информационная безопасность

  • Защита паролей: серверы хранят не пароли, а их хеши (с солью). При аутентификации клиент передаёт хеш пароля (или хеш от пароля с nonce). Это предотвращает компрометацию паролей при утечке базы данных.
  • Целостность программного обеспечения: дистрибутивы операционных систем (Linux, FreeBSD) публикуют хеши (SHA-256) для проверки скачанных образов. Пользователь может сверить хеш локально.
  • Антивирусные базы: хеши вредоносных файлов передаются для быстрого обнаружения без сканирования содержимого.

Сетевые протоколы

  • HTTP Digest Authentication: передача хеша пароля и nonce для защиты от перехвата.
  • IPsec (IKE): хеши используются для аутентификации ключей и целостности пакетов.
  • SSH (Secure Shell): при первом подключении сервер передаёт хеш своего открытого ключа (fingerprint), который пользователь проверяет вручную.

Системы контроля версий

  • Git: каждый коммит идентифицируется хешем SHA-1 от содержимого дерева, родительского коммита и метаданных. Передача хеша между репозиториями позволяет синхронизировать историю изменений.

Блокчейн и криптовалюты

  • Биткойн: хеш блока (SHA-256) является результатом майнинга. Передача хеша между узлами сети подтверждает включение блока в цепочку.
  • Смарт-контракты: хеши данных (например, IPFS) используются для хранения больших объёмов информации вне блокчейна.

Электронная почта

  • DKIM (DomainKeys Identified Mail): отправитель вычисляет хеш письма и подписывает его закрытым ключом. Получатель проверяет подпись, сравнивая хеш с вычисленным.

Уязвимости и ограничения

Коллизии

Если хеш-функция не является коллизионно-стойкой, злоумышленник может подобрать два разных набора данных с одинаковым хешем. Это позволяет подменить данные без изменения хеша. Примеры: коллизии в MD5 (2004, Wang et al.) и SHA-1 (2017, Google). В результате эти алгоритмы считаются небезопасными для криптографических приложений. Рекомендуется использовать SHA-256 или SHA-3.

Атаки «человек посередине»

При передаче хеша без шифрования злоумышленник может перехватить хеш и подменить его. Для защиты необходимо шифрование канала (TLS/SSL) или использование цифровых подписей.

Атаки на парольные хеши

Если хеш пароля перехвачен, злоумышленник может попытаться восстановить пароль методом перебора (brute-force) или с помощью радужных таблиц. Для защиты применяются соль (случайная строка, добавляемая к паролю перед хешированием) и медленные хеш-функции (bcrypt, scrypt, Argon2).

Проблемы с длиной хеша

Короткие хеши (например, MD5 — 128 бит) более подвержены коллизиям и атакам дня рождения. Рекомендуемая длина — не менее 256 бит.

Примеры

Пример 1: Проверка целостности файла

Пользователь скачивает файл ubuntu-22.04-desktop-amd64.iso с сайта Ubuntu. На сайте опубликован хеш SHA-256: a4b8c9.... После скачивания пользователь вычисляет хеш локально (команда sha256sum ubuntu-22.04-desktop-amd64.iso) и сравнивает с опубликованным. Совпадение подтверждает, что файл не был повреждён или изменён.

Пример 2: HTTP Digest Authentication

Клиент запрашивает ресурс. Сервер отвечает с кодом 401 и nonce (случайное число). Клиент вычисляет хеш: MD5(MD5(username:realm:password):nonce:MD5(method:uri)). Отправляет серверу. Сервер, зная пароль, повторяет вычисление и сравнивает. Если хеши совпадают — аутентификация успешна.

Пример 3: Git-коммит

При выполнении git commit Git вычисляет хеш SHA-1 от содержимого коммита. Хеш становится идентификатором коммита. При git push хеш передаётся на удалённый репозиторий. Другие разработчики могут проверить целостность истории, сравнивая хеши.

Интересные факты

  • В 2017 году Google и CWI Amsterdam продемонстрировали коллизию SHA-1 (атака SHAttered), создав два разных PDF-файла с одинаковым хешем. Это привело к ускоренному переходу на SHA-256.
  • В протоколе BitTorrent инфо-хеш (20 байт) используется для идентификации торрент-файла. Передача хеша между трекерами и пирами позволяет находить раздающих.
  • В криптовалюте биткойн сложность майнинга регулируется так, чтобы среднее время нахождения хеша блока составляло около 10 минут. Передача хеша нового блока всем узлам сети занимает секунды.

Источники

  • Menezes, A. J., van Oorschot, P. C., Vanstone, S. A. (1996). «Handbook of Applied Cryptography». CRC Press.
  • Stallings, W. (2017). «Cryptography and Network Security: Principles and Practice». Pearson.
  • RFC 7616 — HTTP Digest Access Authentication.
  • RFC 1321 — The MD5 Message-Digest Algorithm.
  • Nakamoto, S. (2008). «Bitcoin: A Peer-to-Peer Electronic Cash System».
  • Chacon, S., Straub, B. (2014). «Pro Git». Apress.
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru