Открыть сервис

Merkle tree

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

История

Концепция хеш-дерева была предложена американским криптографом Ральфом Мерклом в 1979 году и запатентована в 1982 году (патент США № 4309569). Первоначально идея была разработана для создания эффективной схемы цифровой подписи, позволяющей подписывать большое количество сообщений одним мастер-ключом. Впоследствии метод был адаптирован для верификации целостности данных в распределённых системах, где доверие к центральному узлу отсутствует. Широкую известность деревья Меркла получили благодаря публикации в 2008 году статьи Сатоши Накамото, описывающей протокол биткоина, где они используются для компактного представления транзакций в блоках.

Принцип работы

Дерево Меркла строится снизу вверх. Процесс включает следующие шаги:

  1. Разбиение данных: Исходный массив данных (например, список транзакций) делится на блоки фиксированного размера. Каждый блок хешируется с помощью криптографической хеш-функции (например, SHA-256 в биткоине). Полученные хеши становятся листьями дерева.
  2. Построение уровней: Если количество листьев нечётное, последний лист дублируется (этот процесс называется «сбалансированное дерево»). Каждая пара соседних хешей (левый и правый дочерние узлы) конкатенируется (объединяется) и хешируется. Результат становится родительским узлом.
  3. Рекурсия: Процесс повторяется для каждого нового уровня, пока не останется один узел — корень дерева (корневой хеш, или корень Меркла). Корень является уникальным цифровым отпечатком всего набора данных.

Пример

Пусть есть четыре блока данных: A, B, C, D.

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

Свойства и характеристики

Применение

Криптовалюты

В протоколе биткоина каждая транзакция в блоке хешируется, и из этих хешей строится дерево Меркла. Корень Меркла включается в заголовок блока. Это позволяет:

Распределённые файловые системы

В системах, таких как IPFS (InterPlanetary File System), деревья Меркла используются для адресации и верификации контента. Каждый файл разбивается на блоки, которые хешируются и связываются в дерево. Идентификатор файла (CID) является корнем этого дерева. Это обеспечивает дедупликацию (одинаковые блоки хранятся один раз) и возможность проверки целостности при загрузке.

Системы контроля версий

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

Базы данных

Некоторые распределённые базы данных (например, Cassandra, DynamoDB) используют деревья Меркла для обнаружения рассинхронизации между репликами. Периодически узлы обмениваются корнями своих деревьев; если корни различаются, они рекурсивно спускаются по дереву, чтобы найти конкретные различающиеся блоки данных, минимизируя объём передаваемой информации.

Цифровые подписи

В схеме подписи Меркла (MSS) одноразовый ключ подписи используется для подписи одного сообщения. Дерево Меркла позволяет объединить множество таких одноразовых ключей в один мастер-ключ (корень), что даёт возможность подписывать до 2^n сообщений с помощью одного открытого ключа.

Критика и ограничения

Интересные факты

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →