Що таке дерево Меркле? Посібник для початківців цього компонента блокчейна

Дерева Merkle є фундаментальним компонентом блокчейнів, які підтримують їхню функціональність. Вони дозволяють ефективно та безпечно перевіряти великі структури даних, а у випадку блокчейнів — потенційно безмежні набори даних.

Впровадження дерев Меркла в блокчейни має кілька ефектів. Це дозволяє їм масштабуватись, а також забезпечує архітектуру на основі хешування для підтримки цілісності даних і тривіальний спосіб перевірки цілісності даних.

Криптографічні хеш-функції є базовою технологією, яка дозволяє працювати з деревами Merkle, тому спочатку важливо зрозуміти, що таке криптографічні хеш-функції.

Швидкий вердикт: Дерева Merkle — це структури даних, що складаються з криптографічних хешів, які забезпечують ефективну перевірку цілісності та відображення великих наборів даних, що робить їх невід’ємним компонентом таких систем, як блокчейни та розподілене керування версіями.


Коротка інформація

Ключові моментиОпис
Криптографічні хеш-функціїХеш-функції, які приймають вхідні дані будь-якого розміру та виводять хеш-значення фіксованої довжини. Використовується в деревах Меркле.
Структура дерева MerkleСтруктура даних дерева, де кожен вузол, що не є листом, є хешем своїх дочірніх вузлів. Забезпечує ефективне відображення та перевірку великих наборів даних.
Кореневий хешХеш у верхній частині дерева Merkle, який представляє хеш усього дерева. Діє як відбиток пальця для повного набору даних.
Докази МерклаДозволяє перевіряти цілісність даних і позицію в дереві, не потребуючи повного набору даних, лише кореневий хеш.
Реалізація в BitcoinДерева Merkle зберігають транзакції в блоках. Кореневий хеш, що зберігається в заголовку блоку, дозволяє вузлам SPV перевіряти транзакції.
Інші реалізації блокчейнуВикористовується в багатьох блокчейнах, таких як Ethereum, який використовує більш складні Merkle Patricia Trees.
Розподілені системиДозвольте системам контролю версій, таким як Git і IPFS, легко перевіряти дані, якими обмінюються однорангові пристрої.

Криптографічні функції хешу

Простіше кажучи, хеш-функція — це будь-яка функція, яка використовується для відображення даних довільного розміру (вхідних даних) у вихідні дані фіксованого розміру. Алгоритм хешування застосовується до вхідних даних, а результуючий вихід фіксованої довжини називається хешем.

Багато алгоритмів хешування є загальнодоступними, і їх можна вибрати відповідно до ваших потреб.

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

Наприклад, якщо ви маєте наведені нижче набори даних як вхідні дані, отримані результати будуть унікальними для кожного вхідного. Зверніть увагу, як у другому та третьому прикладах, незважаючи на те, що вхідні дані відрізняються лише одним словом, отримані результати абсолютно різні.

Це дуже важливо, оскільки дозволяє знімати відбитки пальців даних.

Криптографічна хеш-функція, зображення з Вікіпедії

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

У системах, які містять величезні обсяги даних, переваги можливості зберігати та ідентифікувати дані з виведенням фіксованої довжини можуть значно заощадити пам’ять і підвищити ефективність.

У блокчейнах алгоритми хешування використовуються для визначення стану блокчейну.

Блокчейни — це пов’язані списки, які містять дані та хеш-покажчик, який вказує на попередній блок, утворюючи ланцюжок з’єднаних блоків, звідси й назва «блокчейн».

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

Це представлено (у випадку алгоритму SHA-256) виходом (хеш), таким як цей:

b09a57d476ea01c7f91756adff1d560e579057ac99a28d3f30e259b30ecc9dc7

Наведений вище хеш є відбитком усього стану блокчейну до нього. Стан блокчейну до нового блоку (як хешовані дані) є вхідним, а результуючий хеш є вихідним.

Хоча можна використовувати криптографічні хеші без дерев Merkle, це вкрай неефективно і не масштабується. Використання хешів для зберігання даних у блоці у форматі послідовності займає багато часу та громіздко.

Як ви побачите, дерева Merkle дозволяють тривіально розв’язувати цілісність даних, а також відображати ці дані через усе дерево за допомогою доказів Merkle.


Дерева Меркла та докази Меркла

Названі на честь Ральфа Меркла, який запатентував цю концепцію в 1979 році, дерева Меркла по суті є деревами структури даних, де кожен нелистовий вузол є хешем відповідних дочірніх вузлів.

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

Хеш-дерево

Приклад бінарного хеш-дерева, зображення з Вікіпедії

Важливо зауважити, що вузли, що не є листами, або «гілки» (представлені хешами 0-0 і хешами 0-1) з лівого боку є хешами своїх відповідних нащадків L1 і L2. Крім того, зверніть увагу на те, що гілка Hash 0 є хешем своїх об’єднаних дочірніх гілок, гілок Hash 0-0 і Hash 0-1.

Наведений вище приклад є найпоширенішою та простою формою дерева Меркла, відомого як бінарне дерево Меркла. Як ви бачите, є верхній хеш, який є хешем усього дерева, відомий як кореневий хеш. По суті, дерева Merkle — це структура даних, яка може приймати «n» кількість хешів і представляти їх одним хешем.

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

Натомість вони можуть переконатися, що фрагмент даних узгоджується з кореневим хешем, перевіривши лише невелику підмножину хешів, а не весь набір даних.

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

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

Однією з найважливіших переваг деревовидної структури Merkle є можливість автентифікувати довільно великі набори даних за допомогою аналогічного механізму хешування, який використовується для перевірки набагато менших обсягів даних.

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

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


Дерева Merkle в Bitcoin

Криптографічна хеш-функція, яку використовує біткойн, — це алгоритм SHA-256. Це розшифровується як «алгоритм безпечного хешування», вихід якого має фіксовану довжину 256 біт. Основна функція дерев Merkle у біткойнах — зберігати та, зрештою, відрізати транзакції в кожному блоці.

Як згадувалося раніше, блоки в блокчейні з’єднані через хеші попереднього блоку. У Bitcoin кожен блок містить усі транзакції в цьому блоці, а також заголовок блоку, який складається з:

  • Номер версії блоку
  • Хеш попереднього блоку
  • Timestamp
  • Ціль рівня складності майнінгу
  • Nonce
  • Корінь Merkle Hash

Зображення нижче взято з технічної документації біткойн і ілюструє, як дерево Меркла вписується в кожен блок.

Меркле дерево

Транзакції включаються майнерами в блоки та хешуються як частина дерева Merkle, що веде до кореня Merkle, який зберігається в заголовку блоку. Ця конструкція має низку явних переваг.

Зокрема, як зазначено в офіційному документі, це дозволяє існувати вузли простої перевірки платежів (SPV), також відомі як «полегшені клієнти». Ці вузли не повинні завантажувати весь блокчейн Bitcoin, лише заголовки блоків найдовшого ланцюжка.

Вузли SPV можуть досягти цього, запитуючи однорангові вузли, поки вони не переконаються, що збережені заголовки блоків, з якими вони працюють, є частиною найдовшого ланцюга. Вузол SPV може потім визначити статус транзакції, використовуючи підтвердження Merkle, щоб зіставити транзакцію з певним деревом Merkle з кореневим хешем відповідного дерева Merkle у заголовку блоку, який є частиною найдовшого ланцюжка.

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


Впровадження дерев Merkle в інших блокчейнах і системах

Хоча біткойн був першим блокчейном, який реалізував дерева Merkle, багато інших блокчейнів реалізують подібні деревні структури Merkle або навіть більш складні версії.

Крім того, реалізація дерева Merkle не обмежується лише блокчейнами й застосовується до низки інших систем.

Ethereum, будучи іншою найбільш впізнаваною криптовалютою, також є чудовим прикладом реалізації іншого дерева Merkle. Оскільки Ethereum повністю готовий до Тьюрингу як платформа для створення набагато складніших додатків, він використовує більш складну версію дерева Merkle під назвою Merkle Patricia Tree, яке насправді є 3 окремими деревами Merkle, які використовуються для трьох видів об’єктів. Ви можете дізнатися більше про ці дерева тут.

Нарешті, дерева Merkle є важливим компонентом розподілених систем контролю версій, таких як Git і IPFS. Їхня здатність легко забезпечувати та перевіряти цілісність даних, що передаються між комп’ютерами у форматі P2P, робить їх безцінними для цих систем.


Висновок

Дерева Merkle є невід’ємним компонентом блокчейнів і ефективно дозволяють їм функціонувати з доведеною незмінністю та цілісністю транзакцій.

Розуміння ролі, яку вони відіграють у розподілених мережах, і їхньої базової технології криптографічних хеш-функцій має вирішальне значення для розуміння основних концепцій криптовалют, оскільки вони продовжують розвиватися у більші та складніші системи.

Джерело: https://blockonomi.com/merkle-tree/