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

