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