Хэш-функции используются в проверке и аутентификации пользователей, подписании документов, а также в криптовалютах как метод предотвращения подделки транзакций и предотвращения вредоносных действий.
Хэш-функция — это криптографическая процедура, в которой определенный алгоритм используется для преобразования определенной информации (например, текста) в одну буквенно-цифровую последовательность фиксированной длины, называемую хешем.
За прошедшие годы появилось множество способов (алгоритмов) генерации хешей, то есть существует множество типов хеш-функций, но с технической точки зрения все они должны иметь ряд характеристик для правильного выполнения своей миссии:
• Однонаправленность: если у нас есть документ M, хэш позволяет нам создать его сводный хеш под названием h (M), но из этого хеша невозможно узнать содержимое исходного документа M.
• Сжатие: вес документа M не имеет значения, поскольку результирующий хэш всегда будет иметь одинаковую длину и одинаковое количество бит.
• Простота расчета: должно быть легко вычислить h (M) из «M» для быстрого расчета и без траты времени, энергии и вычислительной мощности.
• Широковещательная рассылка битов: хэш h (M) должен быть сложной функцией исходного сообщения «M». Если бы М был модифицирован где-либо, даже если бы это была минимальная модификация, элемент h(M) изменился бы полностью.
• Слабое сопротивление столкновению: будет вычислительно невозможно найти известное M, мы можем найти другое M 'такое, что h (M) = h (M'). Первый предварительное изображение.
• Сильная устойчивость к столкновениям: должно быть сложно с вычислительной точки зрения найти пару (M, M'), такую что h (M) = h (M'). Второй предварительное изображение.
Хэш безопасность
Можно найти исходный текст хеша. Но это практически невозможно.
Например, 128-битный хэш (базовая версия хэша) имеет 2 ^ 128 различных возможностей, и вероятность 50% будет равна квадратному корню из 2 ^ 128, что приводит к тому, что 2 ^ 64 считается примером. Отсюда получается, что на статистическом уровне легче сломать столкновение, чем преодолеть сопротивление предыдущего изображения.
Не существует хеш-функции, которая была бы свободна от коллизий, но если она не имеет изъяна в своей конструкции, сломать ее очень сложно и займет значительное время
Хэш-функция в Биткоине
Одним из типичных алгоритмов хеш-функции является SHA-256, который используется в бесчисленном количестве случаев из-за баланса между безопасностью и сложностью генерации (с точки зрения затрат времени и энергии).
Одно из сотен тысяч мест, где он используется, — это Биткоин.
В экосистеме Биткоин функция хеша очень важна, пока он эффективен, а для этого хэш должен быть сложным, обеспечивая тем самым высокую степень безопасности. Т.е. для его обработки требуется больше времени, поэтому расчет, и процесс становится более неэффективным.
Хэш-функция в Биткоине используется в двух случаях.
1. Создание адреса
Одно из наиболее распространенных применений хеш-функции — процесс генерации адреса Биткоина.
Хеш-функция SHA256 используется до 3 раз в процессе генерации адреса.
Благодаря этой функции адрес короче открытого ключа-источника. Кроме того, достигается его единообразие в целом при формировании управляющих символов (контрольной суммы).
2. Майнинг: доказательство работы
Майнинг доказательства работы подразумевает действие, осуществляемое определенными людьми, которые решают предложить свои вычислительные мощности сети Биткоин для проверки различных транзакций.
Хеширование — ключевой процесс создания блоков. Более того, он также используется в несколько этапов, поскольку майнер должен связать транзакции с блоком. Для этого используется хэш-функция для создания дерева Меркла.
В результате, в дополнение к хешу, полученному в результате предыдущего блока, и данным nuncio необходимо получить выданный хеш с определенным шаблоном.
Таким образом можно полностью связать все новые и прошлые транзакции, обеспечивая полную целостность и неизменяемость.
Выполнить процесс хеширования один раз чрезвычайно просто, но майнеру придется делать это миллионы раз.
Наконец, ноды. Необходимо один раз проверить правильность выполнения процесса, повторно применив хэш-функцию на разных этапах процесса.