Что такое хеширование?

Basics

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

Хеш-функции детерминированы: при одинаковом входе они всегда дают одинаковый выход. Этот выход также называют дайджестом или хешем.

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

How Does a Hash Function Work? 

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

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

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

What Is Hashing Significance?

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

Hash Functions 

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

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

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

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

  • Сопротивляемость к коллизиям означает, что невозможно найти два разных входа, дающие одинаковый выход. 
  • Стойкость к восстановлению входа (preimage resistance) означает, что невозможно по заданному выходу восстановить исходный вход. 
  • Стойкость ко второму предобразу означает, что невозможно найти второй вход, который даёт тот же хеш, что и заданный вход.

Collision Resistance

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

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

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

Preimage resistance 

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

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

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

Second-preimage resistance 

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

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

Mining 

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

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

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

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

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

Conclusion

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

Hashing