Хеш-функции простыми словами: отпечаток данных, который нельзя подделать
Что такое хеш-функция, какими свойствами она обладает, зачем нужна в блокчейне, чем keccak256 отличается от SHA-256 и где вы встречаетесь с хешами каждый день.
В этой статье
Хеш-функция - один из «кирпичиков», на которых стоит весь блокчейн. Она превращает любые данные - слово, письмо, файл на гигабайт - в короткую строку фиксированной длины. Эта строка называется хешем или «отпечатком» данных.
Пример, который можно проверить
Возьмём функцию keccak256, которую использует Ethereum, и применим к двум почти одинаковым словам:
keccak256("hello") = 0x1c8aff950685c2ed4bc3174f3472287b56d9517b9c948127319a09a7a36deac8
keccak256("Hello") = 0x06b3dfaec148fb1bb2b066f10ec285e7c9bf402ab32aa78a5d38e34566810cd2Разница - одна заглавная буква, а результаты не имеют ничего общего. Длина хеша при этом всегда одинакова: 32 байта, то есть 64 шестнадцатеричных символа (плюс 0x в начале). Что на входе - «привет» или «Война и мир» целиком, - не важно.
Четыре свойства хорошего хеша
- Детерминированность. Одни и те же данные всегда дают один и тот же хеш. Вы и ваш собеседник, независимо друг от друга, получите одинаковый результат.
- Лавинный эффект. Малейшее изменение входа меняет хеш до неузнаваемости. Поэтому правка даже одной запятой в договоре сразу видна.
- Односторонность. По хешу нельзя восстановить исходные данные. Единственный способ - перебирать варианты, пока хеш не совпадёт.
- Устойчивость к коллизиям. Практически невозможно найти два разных набора данных с одним хешем и невозможно «подогнать» документ под нужный хеш.
Где хеши работают в блокчейне
- Связь блоков. Каждый блок содержит хеш предыдущего (как устроен блокчейн). Изменить старый блок значит изменить его хеш и сломать всю цепочку после него.
- Адреса. Адрес в Ethereum - последние 20 байт хеша от открытого ключа (подробнее).
- Идентификаторы. Номер функции в ABI и идентификатор события - первые байты хеша от их сигнатуры.
- Дерево Меркла. Хеши объединяются в одно «корневое» значение, по которому можно проверить принадлежность элемента набору (Merkle-деревья).
- Условия сделки. Мы записываем в контракт хеш документа, а не сам документ (хеш-обязательство).
SHA-256 и keccak256
Хеш-функций много. В блокчейне чаще всего встречаются две:
- SHA-256 - используется в Bitcoin.
- keccak256 - используется в Ethereum.
Они похожи по свойствам, но дают разные результаты для одного и того же входа. Путаница между keccak256 и стандартизированным SHA-3 - частая ошибка: у них один «родоначальник», но разные детали, поэтому хеши не совпадают. Если вы проверяете хеш «вручную» в онлайн-калькуляторе, убедитесь, что выбран именно keccak256.
Повседневные примеры
- Скачивание файла. На странице загрузки указывают хеш файла. Вы считаете хеш у себя и сравниваете: совпал - файл не подменили.
- Пароли. Сайты хранят не пароль, а его хеш (с добавкой - «солью»): утечка базы не раскрывает пароли напрямую.
- Git. Номер коммита - хеш его содержимого.
- Подпись документов. Подписывают не весь документ, а его хеш: быстрее и надёжнее (подписи).
Ограничения и тонкости
Короткие предсказуемые данные уязвимы к перебору. Хеш слова «123456» злоумышленник посчитает за секунду и сравнит со списком. Для коротких или угадываемых текстов к ним добавляют случайную строку, соль.
Хеш не доказывает, что данные правдивы. Он доказывает только, что они те же самые.
Нормализация имеет значение. «Тот же» текст с разными переводами строк даст разные хеши. Поэтому для условий сделки текст приводят к каноническому виду до хеширования.
Что почитать дальше
Хеш защищает данные от подмены, а чем доказывают, что действие совершил именно владелец? Ответ - в статье про криптографию с открытым ключом.
Читайте также
- 1 · Основы
Криптография с открытым ключом: как подпись доказывает, что это вы
Как работают закрытый и открытый ключи, откуда берётся адрес, что такое цифровая подпись ECDSA и почему кошельку не нужен пароль. С наглядным примером.
3 мин чтения - 3 · Под капотом
Деревья Меркла и доказательства: как проверять миллионы данных одним хешем
Как строится дерево Меркла, что такое корень и доказательство, как контракт проверяет вхождение элемента, где это применяется и какие бывают атаки.
3 мин чтения
Упоминается в статьях
- Что такое блокчейн простыми словами
- Bitcoin и Ethereum: в чём разница и почему сделки строят на Ethereum
- Криптография с открытым ключом: как подпись доказывает, что это вы
- Словарь терминов: блокчейн, кошельки, смарт-контракты и эскроу от A до Я
- ENS: читаемые имена вместо длинных адресов Ethereum
- Сценарий: продажа домена и цифровых товаров через эскроу
- Аккаунты и состояние Ethereum: EOA, контракты и мировое состояние
- Подписи в Ethereum: ECDSA, ecrecover, personal_sign и EIP-712
- Раскладка хранилища и упаковка переменных в Solidity
- Прокси и обновляемые контракты: delegatecall, UUPS и цена гибкости
- Деревья Меркла и доказательства: как проверять миллионы данных одним хешем
- MEV и фронтраннинг: кто и как зарабатывает на порядке транзакций
- HD-кошельки: как из 12 слов получаются все ваши ключи (BIP-39, BIP-32, BIP-44)
- Foundry для начинающих: компиляция, тесты, фаззинг и локальная сеть
Готовы попробовать?
Создайте первую сделку за пару минут. Деньги блокируются в смарт-контракте и выплачиваются по правилам, которые видны заранее.

