Хеш-функция: основа адресов, подписей и Proof-of-Work

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

В блокчейнах и криптовалютах хеш-функции используются буквально везде: в заголовках блоков, адресах, подписях, структурах данных и алгоритмах майнинга.

Хеш-функция: как «отпечатки данных» защищают блокчейн-инфраструктуру

Что такое хеш и хеш-функция

Интуитивно:

  • на вход хеш-функции подаются данные произвольной длины;
  • на выходе — последовательность бит фиксированной длины (например, 256 бит);
  • небольшое изменение входа полностью меняет хеш.

Формально:

  • h = H(m), где m — сообщение (данные), H — хеш-функция, h — хеш (digest).

Важно отличие:

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

В блокчейнах используются именно криптографические хеш-функции.

Свойства криптографической хеш-функции

Основные свойства, которые делают хеш-функцию пригодной для криптографии и блокчейна:

  • Детерминизм.

Одни и те же входные данные → всегда один и тот же хеш.

  • Фиксированная длина вывода.

Не важно, хешируем 10 байт или 10 МБ — длина результата (например, 256 бит) всегда одна и та же. Это удобно для протоколов и структур данных.

  • Эффективность.

Хеш должен считаться быстро даже для больших объёмов данных.

  • Лавинный эффект (avalanche).

Малейшее изменение входа (один бит) должно радикально менять выход. Визуально хеш выглядит «случайным».

  • Стойкость к поиску прообраза.

По известному хешу практически невозможно подобрать исходные данные m, такие что H(m) = h.

  • Стойкость ко второму прообразу.

Зная сообщение m1, практически невозможно найти другое m2, для которого H(m1) = H(m2).

  • Устойчивость к коллизиям.

Практически невозможно найти две произвольные строки m1 и m2 с одинаковым хешем. Теоретически коллизии существуют всегда (пространство входов больше), но вероятность подобрать их должна быть пренебрежимо мала.

Без этих свойств блокчейн-протокол легко ломается: злоумышленник мог бы подменять данные без изменения хеша, подделывать подписи или «переписывать» историю.

Где хеш-функции используются в блокчейнах

Хеш-функции — «клей» для большинства криптопримитивов в блокчейне.

1. Связь блоков в цепочку

Каждый блок содержит хеш предыдущего:

  • в Bitcoin заголовок блока включает prev_block_hash и merkle_root;
  • изменение любого старого блока меняет все последующие хеши — это даёт неизменяемость цепочки.

2. Merkle-деревья и структуры состояния

Хеш-функции строят компактные «коммитменты к данным»:

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

3. Адреса и ключи

Адреса кошельков в большинстве сетей — производные от публичных ключей:

  • публичный ключ → хеш (или последовательность нескольких хешей) → укороченный адрес;
  • пример: в Ethereum адрес — последние 20 байт Keccak-256 от публичного ключа.

Это снижает размер адреса и добавляет защиту к схеме «приватный/публичный ключ» (см. Приватный ключ и Адрес кошелька).

4. Подписи и сообщения

Криптографические подписи делаются не по «сырым» данным, а по их хешу:

  • сообщение → H(message) → подпись Sign(sk, H(message));
  • так протокол не зависит от размера сообщения, а свойства хеша наследуются подписью.

См. также Транзакция и страницы о цифровых подписях.

5. Proof-of-Work и хешрейт

В сетях на Proof-of-Work майнеры:

  • многократно вычисляют хеш заголовка блока с разными nonce;
  • ищут значение ниже целевого порога сложности.

Скорость таких вычислений измеряют в хешрейте (hashes per second). Устойчивость хеш-функции критична: если кто-то сможет считать «особые» хеши сильно быстрее остальных, баланс безопасности нарушится.

Примеры хеш-функций в крипте

Наиболее часто встречающиеся:

  • SHA-256.

Стандартная функция из семейства SHA-2 (256-битный вывод):

  • основа для Bitcoin (хеш блоков, части адресной схемы);
  • базовый кирпич многих протоколов первого поколения.
  • Keccak-256 (SHA-3-подобная).

Вариант sponge-функции Keccak:

  • используется в Ethereum для адресов и многих внутренних операций;
  • часто обозначается как keccak256 в EVM и смарт-контрактах.
  • BLAKE2, BLAKE3 и др.

Современные быстрые хеш-функции с хорошими свойствами, реже выступают «центральными» в блокчейнах, но активно применяются в протоколах и приложениях.

  • ZK-дружественные хеши (Poseidon, Rescue и др.).

Специальные конструкции, оптимизированные под zk-доказательства (zkEVM и zkVM): их сложнее реализовать как общую хеш-функцию, но они сильно ускоряют генерацию доказательств.

Как читать и интерпретировать хеш

На практике хеш записывают как шестнадцатеричную строку:

  • пример: 0x4e3f…9b1c;
  • префикс 0x обозначает «hex-формат»;
  • длина строки зависит от длины хеша (для 256 бит — 64 hex-символа, без 0x).

Важно понимать:

  • хеш ≠ шифрование.

Хеширование одностороннее: «расшифровать хеш» невозможно. Чтобы «узнать исходник», нужно тупо перебирать входы (brute force) и сравнивать хеши.

  • часто отображают только часть хеша.

Интерфейсы могут показывать первые/последние 6–10 символов для компактности. Полное значение хранится в системе.

  • коллизии теоретически возможны, но практический поиск — нереален при корректном выборе функции и размера.

Распространённые заблуждения

  • «Хеш можно расшифровать, если знать алгоритм»

→ Нет. Алгоритм всегда открыт; безопасность строится на вычислительной сложности подбора.

  • «Если изменить один байт, хеш немного поменяется»

→ В нормальной крипто-хеш-функции даже один бит входа радикально меняет весь хеш.

  • «Если два хеша близки визуально, данные тоже похожи»

→ Никакой «близости» в смысле похожести данных здесь нет: изменение выходных бит не коррелирует с семантикой входа.

  • «Достаточно MD5/SHA-1, они же быстрые»

→ Эти функции считаются криптографически сломанными (коллизии найдены) и не подходят для современных протоколов, особенно в блокчейне.

См. также

Task Runner