Хеширование — одна из самых фундаментальных концепций в криптографии и блокчейне. Автомобили имеют VIN-коды, компьютеры в Интернете IP-адреса, а люди отпечатки пальцев.
Все это практически уникальные идентификаторы для различных типов объектов. Но как насчет данных? Могут ли произвольные данные также иметь практически уникальный "отпечаток"? Ответ - да, и они называются хэшами.
Алгоритм хэширования - это функция, которая преобразует любые данные в строку, называемую хэшем. Представьте себе черный ящик с надписью "Sha-256". У ящика есть вход и выход. Все, что мы знаем об этом ящике, это то, что на вход можно подавать любые данные. Поэтому мы напишем на листе бумаги "Hello World" и введем эти данные в ячейку Sha-256. Блок потребляет эти входные данные и выдает строку фиксированной длины в 256 бит.
Если мы продолжим вводить листы бумаги с надписью "Hello World", выходной сигнал останется тем же. Если мы немного изменим входные данные, скажем, добавим запятую между словами "Hello" и "World", выходной результат станет совершенно другим! Его длина по-прежнему составляет 256 бит, но он совсем не похож на исходный вывод до добавления запятой. Можно считать, что эта коробка представляет алгоритм хэширования, в частности SHA-256, а выход коробки представляет хэш.
Хорошо построенные хэш-алгоритмы обладают двумя важными свойствами. Они устойчивы к предварительному изображению и обеспечивают устойчивость к коллизиям. Устойчивость к предварительным образам означает, что если человек получит только хэш, без какой-либо другой информации, ему будет практически невозможно изменить алгоритм хэширования и просмотреть исходные данные. Им пришлось бы угадывать исходные данные "грубой силой" из почти бесконечного набора входных данных. Устойчивость к столкновениям означает, что найти два разных входа, которые приводят к одному и тому же выходу, практически невозможно. Мы говорим "практически" невозможно, потому что хэш-алгоритмы отображают почти бесконечный набор входных данных на конечный набор выходных, что означает, что столкновения будут происходить, но они крайне статистически маловероятны.
В сочетании эти два свойства позволяют хэшам выступать в качестве отпечатков пальцев или практически уникальных идентификаторов данных. Хеши используются повсеместно в Интернете, например, в GitHub используются Identicons для создания уникальной фотографии профиля каждого нового пользователя. Хеши также широко используются в блокчейн. Когда новый блок добавляется в блокчейн, он ссылается на хэш предыдущего блока, а затем новый блок сам хэшируется. Благодаря этому процессу для изменения истории блокчейна требуется пересчитать все блоки и их хэши. Я объясню этот процесс более подробно в одной из следующих статей. Хеши также используются в блокчейне в структурах данных, называемых "деревьями Меркле", для более сжатого представления данных о транзакциях. Популярные алгоритмы хэширования в блокчейне включают Sha-256 и Keccak-256. Число 256 означает, что длина хэшей всегда составляет 256 бит.
Таким образом, хэши можно рассматривать как отпечатки пальцев данных, уникальные идентификаторы, которые практически невозможно перепрограммировать. Хеш-алгоритмы - это фундаментальный строительный блок блокчейна, и твердое понимание их свойств необходимо для разработчиков блокчейна и смарт-контрактов.
Нас удобно читать в Телеграм.
Блокчейн Адвокат - пишем про блокчейн, смарт-контракты, web3, криптотех и ИИ.
Похоже на шифрование. Выходной сигнал складывается с шифрующим (последовательность 1,0), получается третий.
Чтобы расшифровать, нужно знать последовательность шифрующего сигнала.