

Хеширование — это процесс получения выхода фиксированного размера из входных данных переменной длины. Для этого применяются математические формулы, которые называются хеш-функциями (реализуемые как алгоритмы хеширования).
Хотя не все хеш-функции используют криптографию, именно криптографические хеш-функции лежат в основе криптовалют. Благодаря им блокчейны и другие распределённые системы достигают высокого уровня целостности и безопасности данных.
Обычные и криптографические хеш-функции являются детерминированными. Это означает, что при одинаковых входных данных алгоритм хеширования всегда выдаёт один и тот же результат (также называемый дайджестом или хешем).
Обычно алгоритмы хеширования в криптовалютах создаются как односторонние функции, то есть их невозможно просто обратить без огромных вычислительных затрат и ресурсов. Иначе говоря, получить выход по входу легко, а вот восстановить вход по хешу крайне сложно. Чем труднее подобрать исходные данные по хешу, тем более безопасным считается алгоритм хеширования.
Разные хеш-функции генерируют выходные данные разной длины, но для каждого алгоритма размер результата всегда фиксирован. Например, алгоритм SHA-256 выдаёт хеш только длиной 256 бит, а SHA-1 всегда формирует дайджест из 160 бит.
Для примера пропустим слова "ExampleText" и "exampletext" через алгоритм SHA-256 (который использует Bitcoin).
| Входные данные | Выход (256 бит) |
|---|---|
| ExampleText | f1624fcc63b615ac0e95daf9ab78434ec2e8ffe402144dc631b055f711225191 |
| exampletext | 59bba357145ca539dcd1ac957abc1ec5833319ddcae7f5e8b5da0c36624784b2 |
Обратите внимание: незначительное изменение (регистр первой буквы) привело к совершенно иному хешу. Но при использовании SHA-256 результат всегда будет иметь фиксированную длину — 256 бит (или 64 символа) — вне зависимости от размера входных данных. Кроме того, сколько бы раз мы ни запускали оба слова через алгоритм, их хеши останутся неизменными.
А если обработать те же входные данные алгоритмом SHA-1, будут такие результаты:
| Входные данные | Выход (160 бит) |
|---|---|
| ExampleText | 7f0dc9146570c608ac9d6e0d11f8d409a1ee6ed1 |
| exampletext | e58605c14a76ff98679322cca0eae7b3c4e08936 |
Сокращение SHA расшифровывается как Secure Hash Algorithms. Это семейство криптографических хеш-функций, включающее SHA-0, SHA-1, а также группы SHA-2 и SHA-3. SHA-256 относится к группе SHA-2, как и SHA-512 и другие варианты. В настоящее время только группы SHA-2 и SHA-3 считаются безопасными.
Обычные хеш-функции широко применяются для поиска по базам данных, анализа крупных файлов и управления информацией. Криптографические хеш-функции активно используются в защите информации — для аутентификации сообщений и создания цифровых отпечатков. В экосистеме Bitcoin криптографические хеш-функции необходимы для майнинга, а также участвуют в генерации новых адресов и ключей.
Основная ценность хеширования проявляется при работе с большими объёмами информации. Например, можно обработать большой файл или набор данных хеш-функцией и использовать её результат для быстрой проверки точности и целостности данных. Это возможно благодаря детерминированности хеш-функций: вход всегда преобразуется в лаконичный, компактный результат (хеш). Такой подход исключает необходимость хранить или обрабатывать большие объёмы данных напрямую.
Хеширование особенно важно в блокчейн-технологиях. В блокчейне Bitcoin множество операций связано с хешированием, особенно в процессе майнинга. Почти все криптовалютные протоколы используют хеширование для объединения транзакций в блоки и создания криптографических связей между блоками, формируя собственно блокчейн.
Хеш-функция, в которой задействованы криптографические методы, называется криптографической хеш-функцией. Обычно взлом такой функции требует множества переборов. Чтобы «обратить» криптографическую хеш-функцию, злоумышленник должен методом проб и ошибок угадать исходные данные, пока не совпадёт результат. Однако бывает так, что разные входные данные дают одинаковый выход — это называется коллизией.
С технической точки зрения, криптографическая хеш-функция должна удовлетворять трём требованиям: устойчивости к коллизиям, устойчивости к прообразу и устойчивости ко второму прообразу.
Перед детальным разбором, кратко опишем суть этих свойств:
Коллизия возникает, когда разные входные данные приводят к одному и тому же хешу. Функция считается устойчивой к коллизиям до тех пор, пока кто-то не найдёт такую коллизию. Следует отметить: в любой хеш-функции коллизии неизбежны, ведь вариантов входа бесконечно много, а выход ограничен.
Иными словами, функция считается устойчивой к коллизиям, если вероятность их обнаружения настолько мала, что для этого потребуются миллионы лет вычислений. Хотя полностью свободных от коллизий функций не существует, некоторые, например SHA-256, достаточно надёжны.
В семьях SHA алгоритмы SHA-0 и SHA-1 уже не считаются безопасными, так как коллизии были найдены. На сегодняшний день устойчивыми к коллизиям признаны группы SHA-2 и SHA-3.
Устойчивость к прообразу — это свойство односторонней функции. Хеш-функция считается устойчивой к прообразу, если вероятность восстановить исходные данные по результату крайне мала.
Это отличие от коллизии: при атаке на прообраз злоумышленник пытается вычислить вход по известному выходу, а при коллизии ищет любые два входа с одинаковым результатом.
Устойчивость к прообразу защищает данные: простой хеш сообщения позволяет подтвердить его подлинность без раскрытия содержания. На практике многие сервисы и приложения хранят не пароли, а их хеши.
Это свойство занимает промежуточное положение между двумя предыдущими. Атака второго прообраза — это поиск такого входа, который даст тот же выход, что и другой, уже известный вход.
Фактически, это разновидность коллизии, только второй вход ищут к уже известному первому. Любая функция, устойчивая к коллизиям, будет устойчива и к атакам второго прообраза, так как последнее всегда подразумевает наличие коллизии. Однако возможно проведение атаки на прообраз даже в случае устойчивости к коллизиям, поскольку задача — найти исходный вход по единственному выходу.
В процессе майнинга Bitcoin хеш-функции используются на разных этапах: при проверке балансов, связывании входов и выходов транзакций, а также при хешировании транзакций блока для создания дерева Меркла. Одной из ключевых причин безопасности блокчейна Bitcoin является то, что майнерам необходимо выполнять множество операций хеширования, чтобы найти валидное решение для следующего блока.
Майнер перебирает различные входные данные при создании хеша блока-кандидата. Он сможет подтвердить блок только если получит хеш, начинающийся с определённого количества нулей. Это количество определяет сложность майнинга и зависит от хешрейта сети.
Хешрейт отражает вычислительную мощность, затрачиваемую на майнинг Bitcoin. Если общий хешрейт растёт, протокол Bitcoin автоматически увеличивает сложность, чтобы среднее время нахождения блока оставалось около 10 минут. Если многие майнеры выходят из сети и хешрейт падает, сложность уменьшается, чтобы средний интервал блока вернулся к 10 минутам.
Майнеры не ищут коллизии, так как существует множество валидных хешей (с нужным количеством нулей). Для каждого блока есть несколько решений, и майнеру нужно найти только одно — в рамках установленной сложности.
Майнинг Bitcoin требует значительных затрат, поэтому у майнеров нет мотивации нарушать правила — это приведёт к убыткам. Чем больше майнеров присоединяется к блокчейну, тем он становится мощнее и надёжнее.
Хеш-функции играют ключевую роль в информатике, особенно при работе с большими данными. В сочетании с криптографией алгоритмы хеширования обеспечивают безопасность и аутентификацию самыми разными способами. Поэтому криптографические хеш-функции лежат в основе практически всех сетей криптовалют. Знание их свойств и принципов работы крайне важно для каждого, кто интересуется блокчейн-технологиями.
Хеширование — это функция, преобразующая данные любого размера в выход фиксированной длины. В блокчейне оно обеспечивает целостность и безопасность информации благодаря созданию уникальных отпечатков. Даже минимальные изменения данных приводят к совершенно другому хешу, что идеально для проверки и криптографической защиты.
Хеш-функции обрабатывают входные данные математическими алгоритмами и выдают результаты фиксированной длины. Один и тот же вход всегда даёт одинаковый результат благодаря детерминированности — хеш-функции используют одни и те же вычислительные правила, обеспечивая воспроизводимость и надёжность криптографических операций.
Хеширование используют для проверки целостности данных, цифровых подписей, аутентификации паролей и обеспечения безопасности блокчейна. Оно подтверждает, что данные не были изменены, и позволяет безопасно идентифицировать пользователей в криптографических системах.
Хеширование формирует выход фиксированной длины и необратимо, применяется для проверки целостности данных. Шифрование обратимо и защищает конфиденциальность информации. Хеш нельзя расшифровать, а зашифрованные данные можно расшифровать при наличии ключа.
Хорошая хеш-функция устойчива к коллизиям (исключает совпадения), устойчива к изменениям (даже малейшие изменения входа дают совершенно разные выходы) и позволяет быстро искать данные для эффективной обработки.
К распространённым алгоритмам относятся MD5, SHA-1 и SHA-256. MD5 выдаёт хеши длиной 128 бит, но у него есть известные уязвимости. SHA-256 формирует хеши длиной 256 бит и обладает высокой степенью безопасности. SHA-1 устарел. В блокчейне чаще всего применяется SHA-256 благодаря его надёжности и устойчивости к коллизиям.











