Хеширование относится к процессу создания выходных данных фиксированного размера из входных данных переменного размера. Это делается с помощью математических формул, известных как хэш-функции (реализованных в виде хеш-алгоритмов).
Хотя не все хэш-функции используют криптографию, так называемые криптографические хэш-функции являются основой цифровых валют. Благодаря им блокчейн и другие распределенные системы способны достичь значительного уровня целостности и безопасности данных.
Как традиционные, так и криптографические хэш-функции являются детерминированными. Смысл его детерминированности заключается в том, что до тех пор, пока входные данные не изменяются, алгоритм хеширования всегда будет выдавать один и тот же результат (также известный как дайджест или хэш).
Алгоритмы хеширования криптовалют обычно разрабатываются как односторонние функции, то есть их невозможно легко отменить без значительных затрат времени и вычислительных ресурсов. Другими словами, очень легко получить выходные данные из входных данных, но относительно сложно сделать обратное (получить входные данные только из выходных данных). В общем, чем сложнее найти входные данные, тем безопаснее алгоритм хеширования.
Как работают хэш-функции?
Различные хеш-функции выдают выходные данные разного размера, но возможные выходные размеры для каждого хеш-алгоритма всегда фиксированы. Например, SHA-256 может выдавать только 256-битный результат, тогда как SHA-1 всегда генерирует 160-битный дайджест.
Для иллюстрации давайте пропустим слово «Binance» и «binance» через алгоритм хеширования SHA-256 (который используется в Биткойне).
Обратите внимание, что небольшое изменение (в форме первой буквы) привело к совершенно другому значению хеш-функции. Но поскольку мы используем SHA-256, выходные данные всегда будут иметь фиксированный размер 256 бит (или 64 символа) независимо от размера входных данных. Также не имеет значения, сколько раз мы прогоняем два слова через алгоритм, поскольку два результата останутся постоянными.
И наоборот, если мы пропустим тот же ввод через алгоритм хеширования SHA-1, мы получим следующие результаты:
Стоит отметить, что слово 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 минутам).
Обратите внимание, что майнерам не нужно находить коллизии, поскольку они могут генерировать ограниченное количество хэшей в качестве действительных выходных данных (начиная с определенного количества нулей). Таким образом, существует множество возможных решений для данного блока, и майнерам не нужно находить одно из них в соответствии с началом, определяемым сложностью майнинга.
Поскольку добыча биткойнов очень дорогая, у майнеров нет причин обманывать систему, поскольку это приведет к значительным финансовым потерям. Чем больше майнеров присоединяются к блокчейну, тем мощнее он становится.
Заключительные мысли
Нет сомнений в том, что хеш-функции являются важными инструментами в информатике, особенно при работе с огромными объемами данных. Алгоритмы хеширования могут быть универсальными в сочетании с криптографией, обеспечивая безопасность и аутентификацию различными способами. Таким образом, криптографические хэш-функции чрезвычайно важны практически для всех криптовалютных сетей. Поэтому понимание его свойств и механизмов работы определенно полезно для всех, кто интересуется технологией блокчейн.
