Хеширование относится к процессу генерации выходных данных фиксированного размера из входных данных переменного размера. Такой метод реализуется за счет использования математических формул, известных как хэш-функции (реализованных в виде алгоритмов хеширования). 

Хотя не все хеш-функции последовательно включают использование криптографии, криптографические хеш-функции лежат в основе криптовалют. Благодаря этим функциям блокчейны и другие типы распределенных систем способны достичь значительного уровня целостности и безопасности данных.

Обычные и криптографические хэш-функции являются детерминированными. Это означает, что до тех пор, пока входные данные не изменяются, алгоритм хеширования всегда будет выдавать один и тот же результат (также известный как хэш или хэш).

Обычно алгоритмы хеширования криптовалют разрабатываются как односторонние функции, то есть их нельзя легко отменить без больших затрат времени и вычислительных ресурсов. Другими словами, довольно легко создать выходные данные из входных данных, но относительно сложно пойти в противоположном направлении (сгенерировать входные данные только из выходных данных). В целом, чем сложнее найти запись, тем более безопасным считается алгоритм хеширования.


Как работает хеш-функция?

Различные функции хеширования будут выдавать выходные данные разного размера, но возможные выходные размеры, специфичные для каждого алгоритма хеширования, всегда постоянны. Например, алгоритм SHA-256 может выдавать только 256-битный вывод, тогда как SHA-1 всегда генерирует 160-битный хэш.

Для иллюстрации давайте применим хеш-функцию SHA-256 (используемую для Биткойна) к словам Binance и binance.

ША-256

Вход

Вылазка (256 бит)

Бинанс

f1624fcc63b615ac0e95daf9ab78434ec2e8ffe402144dc631b055f711225191

бинанс

59bba357145ca539dcd1ac957abc1ec58339ddcae7f5e8b5da0c36624784b2


Обратите внимание, как незначительное изменение (в данном случае первая буква) привело к совершенно другому значению хеш-функции. Поскольку мы используем SHA-256, выходные данные всегда будут иметь фиксированный размер 256 бит (или 64 символа) — независимо от размера входных данных. Кроме того, независимо от того, сколько раз этот алгоритм применяется к этим конкретным словам, оба результата всегда будут одинаковыми.

С другой стороны, если мы будем использовать те же записи с помощью алгоритма хеширования SHA-1, мы получим следующие результаты:

ША-1

Вход

Сорти (160 бит)

Бинанс

7f0dc9146570c608ac9d6e0d11f8d409a1ee6ed1

бинанс

e58605c14a76ff98679322cca0eae7b3c4e08936


Аббревиатура SHA расшифровывается как Secure Hash Algorithms. Это относится к набору криптографических функций, включающих алгоритмы SHA-0 и SHA-1, а также группы SHA-2 и SHA-3. SHA-256 входит в группу SHA-2 вместе с SHA-512 и другими вариантами. В настоящее время безопасными считаются только группы SHA-2 и SHA-3.


Почему они важны?

Традиционные функции хеширования имеют широкий спектр вариантов использования, включая поиск в базе данных, анализ больших файлов и управление данными. С другой стороны, криптографические хеш-функции широко используются в приложениях информационной безопасности, таких как аутентификация сообщений и печать отпечатков пальцев. Когда дело доходит до Биткойна, криптографические хэш-функции являются важной частью процесса майнинга, а также играют роль в генерации новых адресов и ключей.

Истинная сила хеширования раскрывается, когда дело доходит до обработки огромных объемов информации. Например, можно запустить файл или набор данных через хеш-функцию, а затем использовать ее выходные данные для быстрой проверки точности и целостности данных. Это возможно из-за детерминистской природы хэш-функций: входные данные всегда приводят к упрощенному, сжатому выводу (хешу). Подобный метод устраняет необходимость хранить и запоминать большие объемы данных.

Хеширование особенно полезно в контексте технологии блокчейн. В блокчейне Биткойна есть несколько операций, включающих хеширование, большинство из которых происходит в процессе майнинга. Фактически, почти все протоколы криптовалют полагаются на хеширование для связывания и уплотнения групп транзакций в блоки, а также для создания криптографических связей между каждым блоком для создания в конечном итоге блокчейна.


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

Хэш-функция, использующая криптографические методы, может быть определена как криптографическая хеш-функция. Как правило, взлом криптографической хеш-функции требует множества попыток перебора. Чтобы человек мог обратить криптографическую хэш-функцию, ему нужно было бы угадать, что это за входные данные, путем множества попыток и неудач, пока не будет получен правильный результат. Однако существует также вероятность того, что разные входные данные производят один и тот же результат, и в этом случае возникает сговор.

Технически, чтобы считаться эффективно безопасной, криптографическая хеш-функция должна соответствовать трем свойствам. Мы можем описать это как сопротивление столкновению, сопротивление прообразу и сопротивление второму прообразу.

Прежде чем обсуждать каждое свойство, давайте суммируем их логику в трех коротких предложениях.

  • Устойчивость к коллизиям: невозможно найти два разных входа, которые выдают тот же хэш, что и выход.

  • Сила прообраза: невозможно обратить хеш-функцию (найти входные данные по заданному выходному значению).

  • Сопротивление второму прообразу: невозможно найти второй входной сигнал, который конфликтует с указанным входным сигналом.


Устойчивость к столкновениям

Как уже упоминалось, коллизия возникает, когда разные входные данные создают один и тот же хэш. Таким образом, хеш-функция считается устойчивой к коллизиям до тех пор, пока кто-нибудь не обнаружит коллизию. Обратите внимание, что коллизии всегда будут существовать для любой хеш-функции, поскольку возможные входные данные бесконечны, а возможные выходные данные конечны.

Другими словами, хеш-функция устойчива к коллизиям, когда вероятность обнаружения коллизии настолько мала, что для этого потребуются миллионы лет вычислений. Таким образом, хотя не существует хеш-функций без коллизий, некоторые из них достаточно сильны, чтобы считаться надежными (например, SHA-256).

Среди различных алгоритмов SHA группы SHA-0 и SHA-1 больше не считаются безопасными, поскольку были обнаружены коллизии. В настоящее время SHA-2 и SHA-3 считаются устойчивыми к коллизиям.


Сопротивление прообразу

Свойство сопротивления прообразу связано с понятием односторонних функций. Хэш-функция считается устойчивой к изображениям, когда вероятность обнаружения входных данных, сгенерировавших определенный выходной сигнал, очень мала.

Обратите внимание, что это свойство отличается от предыдущего, поскольку здесь гипотетический злоумышленник попытается угадать входные данные, просматривая заданные выходные данные. С другой стороны, коллизия возникает, когда кто-то находит два разных входа, которые генерируют один и тот же результат, но не имеет особого значения, какой вход был использован.

Свойство устойчивости к прообразу ценно для защиты данных, поскольку простое хеширование сообщения может доказать его подлинность без необходимости раскрытия его содержания. На практике многие поставщики услуг и веб-приложения хранят и используют хэши, сгенерированные на основе паролей, а не пароли в виде обычного текста.


Сопротивление второму прообразу

Упрощая, можно сказать, что сопротивление второго прообраза лежит где-то между двумя другими свойствами. Вторая атака на прообраз происходит, когда кто-то может найти конкретный входной сигнал, который генерирует тот же результат, что и другой уже известный ему входной сигнал.

Другими словами, вторая атака на прообраз включает в себя обнаружение коллизии, но вместо поиска двух случайных входных данных, которые генерируют один и тот же хеш, мы ищем вход, который генерирует тот же хеш, что и другой конкретный вход.

Следовательно, любая устойчивая к коллизиям хэш-функция также устойчива к атакам второго прообраза, поскольку они всегда будут включать коллизию. Тем не менее, все же можно выполнить атаку прообраза на устойчивую к коллизиям функцию, поскольку она включает в себя поиск одного входного сигнала из одного выходного сигнала.


Горное дело

В майнинге биткойнов есть много этапов, которые включают функции хеширования, такие как проверка баланса, связывание ввода/вывода транзакций и хеширование транзакций в блок для формирования дерева Меркла. Но одна из основных причин безопасности блокчейна Биткойн заключается в том, что майнерам приходится выполнять множество операций хеширования, чтобы найти правильное решение для создания и добавления блока.

В частности, майнер должен попробовать несколько разных входных данных при создании хэш-значения для блока, на который он претендует. По сути, они смогут проверить свой блок только в том случае, если сгенерируют выходной хэш, начинающийся с определенного количества нулей. Количество нулей определяет сложность майнинга и варьируется в зависимости от скорости хеширования, выделенной в сети.

В данном случае скорость хэширования представляет собой количество вычислительной энергии, вложенной в майнинг Биткойнов. Если скорость хеширования сети увеличится, протокол Биткойн автоматически скорректирует сложность майнинга так, чтобы среднее время, необходимое для добычи блока, оставалось близким к 10 минутам. С другой стороны, если несколько майнеров решат прекратить майнинг, что приведет к значительному падению скорости хеширования, сложность майнинга будет скорректирована, что облегчит майнинг (до тех пор, пока среднее время блока не сократится до 10 минут).

Обратите внимание, что майнерам не нужно искать возможные коллизии, поскольку существует несколько хешей, которые они могут генерировать как действительные выходные данные (начиная с определенного количества нулей). Таким образом, для определенного блока существует несколько возможных решений, и майнеры должны найти одно — в соответствии с порогом, определяемым сложностью майнинга.

Поскольку добыча биткойнов является дорогостоящей задачей, у майнеров нет причин обманывать систему, поскольку это приведет к значительным финансовым потерям. Чем больше майнеров в блокчейне и, следовательно, чем больше он становится, тем сильнее он становится.


В заключение

Нет сомнений в том, что хэш-функции являются важными инструментами вычислений, особенно при работе с огромными объемами данных. В сочетании с криптографией алгоритмы хеширования могут быть весьма универсальными, особенно в плане безопасности и аутентификации, по нескольким причинам. Таким образом, криптографические хэш-функции жизненно важны практически для всех сетей криптовалют, поэтому понимание их свойств и механизмов работы определенно полезно для всех, кто интересуется технологией блокчейн.