Криптографическая хеш-функция

Определение

Криптографическая хеш-функция — это математический алгоритм, который принимает любые входные данные, независимо от их размера, и преобразует их в дайджест фиксированной длины. Некоторые современные версии, называемые расширяемыми выходными функциями (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 бит независимо от размера документа), а затем подписываете хеш своим закрытым ключом. Это эффективно (подписание хеша фиксированного размера намного быстрее, чем подписание файла размером в гигабайт) и обеспечивает безопасность (подпись доказывает, что вы подписали именно этот документ — любое изменение изменяет хеш и делает подпись недействительной). Все подписи транзакций в блокчейне следуют этому шаблону.

Медиа