Хеш-функция — это функция, которая превращает произвольные входные данные (строка, файл, транзакция) в короткую «отпечаток» фиксированной длины — хеш. В криптографии под хеш-функцией обычно понимают именно криптографическую хеш-функцию: у неё есть набор строгих свойств по безопасности и устойчивости к взлому.
В блокчейнах и криптовалютах хеш-функции используются буквально везде: в заголовках блоков, адресах, подписях, структурах данных и алгоритмах майнинга.
Что такое хеш и хеш-функция
Интуитивно:
- на вход хеш-функции подаются данные произвольной длины;
- на выходе — последовательность бит фиксированной длины (например, 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-деревья и структуры состояния
Хеш-функции строят компактные «коммитменты к данным»:
- в Bitcoin — 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, они же быстрые»
→ Эти функции считаются криптографически сломанными (коллизии найдены) и не подходят для современных протоколов, особенно в блокчейне.
