Определение
Криптографическая хеш-функция — это математический алгоритм, который принимает любые входные данные, независимо от их размера, и преобразует их в дайджест фиксированной длины. Некоторые современные версии, называемые расширяемыми выходными функциями (XOF), могут выдавать выходные данные настраиваемой длины. Хеш-функции обладают несколькими важными свойствами: они детерминированы, то есть одни и те же входные данные всегда дают один и тот же результат; они устойчивы к поиску прообраза, поэтому практически невозможно обратить хеш, чтобы найти исходные входные данные; они устойчивы к коллизиям, что делает практически невозможным обнаружение двух разных входных данных, дающих один и тот же хеш; и они демонстрируют лавинный эффект, когда даже крошечное изменение входных данных приводит к совершенно другому результату. Биткойн использует SHA-256 для майнинга и хеширования транзакций, а Ethereum использует Keccak-256, вариант SHA-3. Хеш-функции являются основой безопасности блокчейна — они позволяют делать все, от доказательства работы в майнинге до создания доказательств на основе деревьев Меркла и подписания транзакций.
Иллюстрации свойств хеш-функций.
Примеры хеширования SHA-256: Вход: “Hello” Выход: 185f8db32271fe25f561a6fc938b2e26…
Входные данные: “hello” (строчные буквы) Выходные данные: 2cf24dba5fb0a30e26e83b2ac5b9e29e… → Совершенно другое (лавинный эффект)
Входные данные: видеофайл размером 10 МБ. Выходные данные: по-прежнему только 64 шестнадцатеричных символа (256 бит) → Фиксированный размер выходных данных независимо от размера входных данных.
Демонстрация сопротивления поиску прообраза: Цель: Найти входные данные, которые выдают «0000abc…». Единственный метод: Метод грубой силы (проверка миллиардов входных данных). Майнинг биткоинов: Именно это – найти nonce, который выдает хеш ниже целевого значения. При скорости 500 эксахешей в секунду (сеть биткоина): ~500 000 000 000 000 000 000 попыток в секунду.
Устойчивость к коллизиям: Цель: Найти два разных входных значения, дающих одинаковый хеш. SHA-256: Коллизий не обнаружено (2^128 операций для обнаружения одной). SHA-1 (устарел): Коллизии обнаружены (Google, 2017) → Больше не является надежным.
Хэш-функции, используемые в криптовалютах
| Хэш-функция | Размер вывода | Используется в | Статус |
| SHA-256 | 256 биты | Биткоин (майнинг, транзакции) | Безопасный |
| Кечак-256 | 256 биты | Эфириум (адреса, транзакции) | Безопасный |
| ША-3-256 | 256 биты | Некоторые новые протоколы | Безопасный |
| БЛЕЙК2/БЛЕЙК3 | Переменная (в виде XOF) | Zcash, некоторые протоколы | Безопасно, быстрее |
| SHA-1 | 160 биты | Устаревшее (неактуальное) | СЛОМАНО (обнаружено столкновение) |
| MD5 | 128 биты | Устаревшее (неактуальное) | СЛОМАНО (столкновение незначительное) |
| РИПЭМД-160 | 160 биты | выведение биткойн-адреса | Безопасное шифрование (с использованием SHA-256) |
FAQ
В: Почему нельзя перевернуть хеш, чтобы найти входные данные?
Хэш-функции включают в себя неинвертируемые математические операции — они намеренно отбрасывают информацию. Можно проверить, что хэш(вход) = выход, но нельзя математически обратить хэш(выход) → вход. Единственная известная общая атака — это перебор: перебрать множество входных данных, пока не найдешь ту, которая хэшируется в целевое значение. Для 256-битных выходных данных это требует ~2^256 попыток — больше, чем атомов во Вселенной. Именно эта необратимость делает хэш-функции полезными для хранения паролей, цифровых подписей и доказательства работы.
В: Что такое «лавинный эффект» и почему он важен?
Эффект лавины означает, что изменение даже одного бита (одного символа) во входных данных приводит к совершенно другому хешу на выходе — обычно изменяется примерно половина битов в выходных данных. Это важно для безопасности блокчейна: если заголовок блока изменяется даже незначительно (например, для изменения метки времени или транзакции), хеш полностью меняется и становится недействительным, что требует повторного выполнения всего доказательства работы. Это делает историю транзакций в блокчейне фактически неизменяемой.
В: Как хэш-функции используются в цифровых подписях?
Вместо прямой подписи большого документа, вы сначала хешируете документ (получая 256 бит независимо от размера документа), а затем подписываете хеш своим закрытым ключом. Это эффективно (подписание хеша фиксированного размера намного быстрее, чем подписание файла размером в гигабайт) и обеспечивает безопасность (подпись доказывает, что вы подписали именно этот документ — любое изменение изменяет хеш и делает подпись недействительной). Все подписи транзакций в блокчейне следуют этому шаблону.









