Что такое хеширование в блокчейне: как работают SHA-256 и криптографические хеши?
Разбираем криптографические хеши и SHA-256: как они превращают данные в отпечаток и зачем нужны в заголовках блоков и дереве Меркла Bitcoin.
Криптографический хеш — короткий цифровой отпечаток данных фиксированной длины. SHA-256 превращает сообщение в 256-битный результат, обычно записываемый 64 шестнадцатеричными символами. В Bitcoin хеши связывают блоки и помогают проверять структуру транзакций и Proof of Work. Хеширование не шифрует данные и не позволяет восстановить исходный текст.
Коротко: что делает хеш
- Принимает данные и вычисляет дайджест фиксированной длины.
- Даже небольшое изменение входа обычно даёт совсем иной результат.
- Одинаковые входные байты и алгоритм дают одинаковый хеш.
- Для криптографически стойкой функции трудно найти вход по хешу или два разных входа с одним отпечатком.
- Хеш — не шифр: для него нет ключа обратной расшифровки.
Как устроено хеширование
Представьте контрольную сумму файла. Отправитель вычисляет отпечаток и сообщает его отдельно. Получатель рассчитывает хеш файла и сравнивает значения: совпадение указывает, что содержимое, вероятно, не менялось. Это само по себе не доказывает, кто отправил файл, если контрольная сумма не защищена подписью или доверенным каналом.
Криптографическая хеш-функция спроектирована так, чтобы вычислительно было трудно подобрать вход с заданным результатом или найти два разных входа с одним значением. «Трудно» означает практическую вычислительную сложность, а не математическую невозможность.
Что такое SHA-256
SHA-256 принадлежит семейству SHA-2 и выдаёт 256 бит, то есть 32 байта. Для чтения двоичный результат часто записывают 64 шестнадцатеричными знаками. Например, SHA-256 текста abc равен ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad. При одинаковых входных байтах и кодировке разные реализации вычислят тот же результат.
Алгоритму безразлично, что ему передали: файл, транзакцию или заголовок блока. Важно точное представление данных в байтах. Пробел, регистр, перенос строки или кодировка могут изменить хеш.
Как хеши используются в Bitcoin
Заголовок блока содержит хеш предыдущего заголовка. Изменение старого блока меняет его отпечаток и нарушает связь со следующим блоком. Транзакции также сводятся в дерево Меркла: пары хешей объединяются и хешируются до корневого значения, которое записано в заголовке.
Bitcoin применяет двойной SHA-256 к заголовкам и при построении дерева Меркла. Во время майнинга меняют nonce и другие допустимые поля, пока хеш заголовка не окажется ниже целевого порога. Остальные узлы быстро проверяют результат и независимо проверяют правила блока. Удачный хеш не заменяет проверку транзакций и не делает недействительный блок правильным.
Подробнее читайте в нашем разборе устройства блокчейна, статье об основах Bitcoin и материале о майнинге и стейкинге.
Хеширование — не шифрование
| Свойство | Хеширование | Шифрование |
|---|---|---|
| Цель | Получить отпечаток данных | Скрыть данные без подходящего ключа |
| Результат | Фиксированная длина | Зашифрованный текст, зависящий от сообщения и режима |
| Обратимость | Практически односторонняя функция | Можно расшифровать подходящим ключом |
| Пример | Проверка целостности и структуры блока | Конфиденциальная передача или хранение |
Какие свойства важны
- Детерминированность: одинаковые данные дают одинаковый результат.
- Стойкость к прообразу: трудно подобрать сообщение для заданного хеша.
- Стойкость ко второму прообразу: трудно найти другой вход с хешем известного сообщения.
- Стойкость к коллизиям: трудно специально найти любые два разных входа с одинаковым хешем.
- Эффект лавины: небольшое изменение входа сильно меняет выход; это ожидаемое поведение, но не самостоятельное доказательство безопасности.
Для идеальной 256-битной функции поиск любого совпадения методом дней рождения требует порядка 2128 случайных попыток, а не 2256. Это теоретическая оценка, а не гарантия для каждого программного применения. В системах важны точное представление данных, подписи, ключи и способ использовать функцию.
Можно ли взломать SHA-256
Коллизии существуют теоретически, потому что вариантов входа больше, чем 256-битных выходов. Практический вопрос — можно ли находить нужные коллизии или прообразы существенно быстрее полного перебора. Это не рекомендация применять любой алгоритм без учёта современных криптографических указаний.
Хеширование паролей — другая задача. Быстрый SHA-256 не следует использовать самостоятельно для хранения паролей: специализированные алгоритмы применяют соль и замедление. Адреса и подписи Bitcoin также сложнее, чем просто «хеш кошелька». Никогда не публикуйте секретные ключи и seed-фразы.
Частые вопросы
Почему SHA-256 всегда одной длины?
Алгоритм определяет выход в 256 бит независимо от размера входа в пределах стандарта.
Можно ли расшифровать хеш?
Нет. Можно проверять догадки, вычисляя их хеши, если данные можно перебрать.
Зачем блоку хеш предыдущего блока?
Он связывает последовательность: изменение прошлого блока меняет его хеш и нарушает ссылку в следующем, поэтому пришлось бы пересчитать последующие доказательства работы.
Bitcoin везде использует SHA-256?
SHA-256 применяется для заголовков и дерева Меркла; для других частей протокола используются иные криптографические операции. Не каждый тип подписи сводится к SHA-256.
Комментарии