Что такое хэш в блокчейне?

WhiteBIT
Опубликовал 11 января 2024
5923
Что такое хэш в блокчейне?

Содержание

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

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

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

Похожая статья:
Что такое блокчейн? Объясняем простыми словами

Похожая статья:

Что такое блокчейн? Объясняем простыми словами
Читать статью

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

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

Алгоритм хэширования

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

Представьте себе, что у вас есть юридический договор — документ из нескольких страниц, в котором подробно описано соглашение между двумя сторонами. Вы применяете хэш-функцию (например, SHA-256) к этому документу. Эта функция обрабатывает весь текст договора, независимо от его длины и сложности. В результате появляется уникальная строка символов фиксированной длины. Например, этот хэш может выглядеть так: 3f786850e387550fdab836ed7e6dc881de23001b.

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

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

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

Как работает хэширование в криптовалюте?

Давайте рассмотрим процесс хэширования на примере работы сети Bitcoin.

Bitcoin использует алгоритм SHA-256 (Secure Hash Algorithm 256-bit).

Заголовок Блока

Каждый новый блок содержит заголовок (с англ. Block Header), тело (с англ. Block Body), в которое входит список транзакций (с англ. List of Transactions), а также другую служебную информацию.

Заголовок блока (c англ. Block Header) – это важный компонент, структурированный набор информации, с которым майнеры “манипулируют”, чтобы найти правильный хэш нового блока. Давайте более подробно рассмотрим данные, которые включаются в заголовок блока в сети Bitcoin:

  1. Версия Блока (c англ. Version): 4-байтовое число, которое указывает на текущую версию блока.
  2. Предыдущий хэш Блока (c англ. Previous Block Hash): 32-байтовый хэш предыдущего блока в цепочке. Это критически важный аспект безопасности блокчейна, так как этот процесс создает непрерывную взаимозависимую цепочку, где каждый блок криптографически связан со своим предшественником.
  3. Корень Меркла (c англ. Merkle Root): 32-байтовый хэш, который представляет корень дерева Меркла.
  4. Временная метка (c англ. Timestamp): 4-байтовое число, которое отображает время создания нового блока.
  5. Целевая сложность (c англ. Target Difficulty/Difficulty Index): 4-байтовое число, которое определяет условия сложности. Она регулируется сетью и нацелена на то, чтобы новый блок создавался в среднем каждые 10 минут.
  6. Случайное число (c англ. Nonce): 4-байтовое число, которое подбирают майнеры. Они многократно изменяют Nonce и пересчитывают хэш-значение, чтобы найти подходящий, соответствующий условиям сложности.
Похожая статья:
Что такое майнинг криптовалют?

Похожая статья:

Что такое майнинг криптовалют?
Читать статью

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

 Версия Блока (с англ. Version)

+

Предыдущий хэш Блока (с англ. Previous Block Hash)

+

Корень Меркла (с англ. Merkle Root)

+

 Временная Метка (с англ. Timestamp)

+

Целевая Сложность (с англ. Target Difficulty)

+

Случайное число (с англ. Nonce)

хэширование (например с помощью SHA-256)

=

Хэш

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

«Хэшрейт» (с англ. Hash Rate) — это общая вычислительная мощность сети или, количество хэшей в секунду, которые вычисляет устройство для майнинга. Этот показатель отображает эффективность и производительность устройств для майнинга. Измеряется в хэшах в секунду (H/s). 

Этот показатель является ключевым индикатором “силы” сети. Она так же измеряется в таких единицах, как килохэш в секунду (KH/s), мегахэш в секунду (MH/s), гигахэш в секунду (GH/s), терахэш в секунду (TH/s) и так далее, увеличиваясь по мере роста вычислительной мощности. В случае Биткойна речь идет о EH/s (экзахэшах/сек).

«Тело» блока хранит все транзакций, которые будут в него включены. Интересно, что, несмотря на теоретический верхний предел размера блока – исторически установленный на уровне 1 МБ, – фактический объем блока с точки зрения количества транзакций может варьироваться. Как правило, в блоке раньше могло храниться от 2 000 до 2 500 транзакций, учитывая их средний размер. А с обновлением Taproot этот лимит только увеличился. Данные транзакций стали более компактными, что позволило более эффективно использовать существующее пространство блоков.

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

Дерево Меркла

Каждая транзакция в блоке сначала хэшируется индивидуально. Затем, хэши каждой транзакции объединяются и хэшируются вместе. Этот процесс так же включает в себя использование криптографической хэш-функции для преобразования данных транзакции в хэш фиксированного размера. Затем отдельные хэши транзакций объединяются в пары и хэшируются. Если количество транзакций нечетное, последний хэш дублируется и хэшируется сам с собой, чтобы создать четное количество хэшей. Этот процесс повторяется пока не останется только один хэш – Корневой, или корень Меркла (с англ. Merkle Root). Он является уникальным представлением всех транзакций в блоке и включается в заголовок блока. Дерево Меркла (с англ. Merkle Tree) позволяет эффективно и безопасно проверять содержимое каждой транзакции в блоке, включая id транзакции, и обеспечивает их целостность, так как любое изменение в одной транзакции приведет к появлению другого корня Меркла.

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

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

Роль хэширования в криптовалютах. Практическое применение хэширования в блокчейне

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

Суммируя, алгоритм хэширования присутствует в нескольких ключевых процессах:

  1. Хэширование Транзакций + Дерево Меркла: Все транзакции группируются в блок. Каждая отдельная транзакция подвергается хэшированию. Затем они объединяются в пары и снова хэшируются вместе. Этот процесс повторяется рекурсивно и хэши объединяются до тех пор, пока для всех транзакций в блоке не останется только один хэш, – корень Меркла. Этот корень Меркла является уникальным представлением всех транзакций в блоке и включается в заголовок.
  2. Хэширование Блока: После того как блок заполнен транзакциями и вычислен их корень Меркла, весь заголовок блока и значения в нем подвергаются хэшированию. Именно этот окончательный хэш и пытаются вычислить майнеры в процессе добычи криптовалюты.
  3. Майнинг (в контексте PoW): В процессе майнинга майнеры соревнуются в поиске определенного хэша, который соответствует определенным критериям, заданным уровнем сложности сети. Это предполагает многократное хэширование заголовка блока с различными значениями Nonce до тех пор, пока они не найдут хэш, соответствующий определенным критериям. Первый майнер, которому это удается, добавляет новый блок в блокчейн.
  4. Целостность Цепочки Блоков: Каждый новый блок в блокчейне содержит хэш предыдущего блока. Это создает цепочку блоков и обеспечивает целостность блокчейна. Любое изменение в транзакции приведет к изменению хэша не только блока, содержащего транзакцию, но и всех последующих блоков.
  5. Безопасность Сети: Когда майнер успешно добывает новый блок (т. е. находит правильный хэш, который отвечает критериям сложности сети), этот блок отправляется в сеть и передается узлам. Они проверяют достоверность нового блока с помощью хэширования.Эти проверки необходимы, чтобы блок соответствовал правилам сети и содержал только допустимые транзакции (т.е. они убеждаются, что они правильно отформатированы, подписаны и не было двойной траты. И если блок проходит все проверки, узлы принимают его и добавляют в свою копию блокчейна. Затем это согласие передается другим узлам, постепенно достигая консенсуса во всей сети.

Особенности хэш-функции блокчейна. Что такое устойчивая хэш-функция?

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

  • Любой объем информации – Одинаковая длина:

Чтобы понять, как это работает, возьмем текст:

Создание сети WB было реализовано в рамках разработки токена WhiteBIT Token (WBT), собственного актива криптобиржи WhiteBIT. Благодаря успешной реализации блокчейна WB Network, WBT обрел новое место жительства, став полноценной монетой WBT Coin (WBT).

Используем алгоритм SHA-256 и получаем: 8b91d751f2773738c1b38e9ad25440aca3e99d59947345ec47bb04e5d9ce6493. Длина текста может быть разной, но длина хэша всегда будет фиксированной.

  • Детерминированность: Одно и то же сообщение должно приводить к одному и тому же хэш-коду. Еще раз взгляните на пример хеширования выше. Любой кто применит функцию SHA-256 к этому же тексту, получит точно такой же хэш. Это свойство позволяет всем участникам достигать консенсуса.
  • Устойчивость к Коллизиям: Это означает, что практически невозможно найти два разных набора данных, которые создадут одинаковый хэш.

То есть, грубо говоря, исходные данные, например, «Привет, WhiteBIT!» и «Hello, World!» не будут иметь одинаковые хэш-значения. Вероятность получить из одинаковых входных данных одинаковый хэш должна быть близка к нулю. Устойчивость к коллизиям важна для гарантирования целостности и неподменности данных.

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

Чем хэширование отличается от шифрования?

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

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

Например:

Исходные данные: «Hello, World!»

Алгоритм: SHA-256

Значение: a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e

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

Исходные данные: «Привет, WhiteBIT!».

Алгоритм: SHA-256

Значение: 165e2b73f08b889a5e7bee32a8c992c9d1c18de5a7bb88c358ffab2eae130bd5

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

Для хэширования используются такие алгоритмы, как SHA-256 (например, в Bitcoin). А для шифрования – AES или RSA. Они так же отличаются между собой по длине данных, которые получаются на выходе. Хэширование производит выходные данные фиксированного размера, независимо от размера входного сигнала. Например, SHA-256 всегда выдает 256-битный хэш.

А для шифрования длина зашифрованного вывода прямо пропорциональна длине ввода.

Распространенные алгоритмы хэширования в блокчейне

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

  • SHA-256 (Secure Hash Algorithm 256-bit) — используется в Bitcoin (BTC), Bitcoin Cash (BHC), и других форках Bitcoin.
  • KECCAK (SHA-3) — используется в некоторых новых и менее распространенных реализациях блокчейна. Является одним из последних членов семейства алгоритмов безопасного хэширования.
  • Ethash — использовался в Ethereum (ETH), до его перехода на Proof-Of-Stake (PoS).
  • Scrypt — используется в Litecoin (LTC), Dogecoin (DOGE) и других альткоинах.
  • X11 — используется в Dash (DASH).

Заключение

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

FAQ

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

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

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