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

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

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

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


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

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

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

ША-256

Вход

Вход (256 бит)

Бинанс

f1624fcc63b615ac0e95daf9ab78434ec2e8ffe402144dc631b055f711225191

бинанс

59bba357145ca539dcd1ac957abc1ec5833319ddcae7f5e8b5da0c36624784b2


Видно, что небольшое изменение (заглавная первая буква) приводит к совершенно другому значению хеш-функции. Однако, поскольку мы используем 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-512 и другими хэш-функциями, принадлежит к группе хэш-функций SHA-2. В настоящее время только группы SHA-2 и SHA-3 считаются безопасными группами хеш-функций.


В чем важность хеш-функции?

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

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

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


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

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

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

Прежде чем говорить о каждом атрибуте, давайте суммируем эти атрибуты.

  • Защита от коллизий: два разных входа не могут создать один и тот же хэш.

  • Защита от переворота изображения: хэш не может быть «восстановлен» (входные данные не могут быть определены на основе выходных данных).

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


Антиконфликтный

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

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

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


Предотвращение манипуляций с изображениями

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

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

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


Антиинверсия второго изображения

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

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

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


Копать

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

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

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

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

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


Заключить

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