Interested Article - Дерево хешей

Бинарное хеш-дерево

Хеш-деревом , деревом Меркла ( англ. Merkle tree ) называют полное двоичное дерево , в листовые вершины которого помещены хеши от блоков данных, а внутренние вершины содержат хеши от сложения значений в дочерних вершинах. Корневой узел дерева содержит хеш от всего набора данных, то есть хеш-дерево является однонаправленной хеш-функцией. Дерево Меркла применяется для эффективного хранения транзакций в блокчейне криптовалют (например, в Bitcoin , Ethereum ). Оно позволяет получить «отпечаток» всех транзакций в блоке, а также эффективно верифицировать транзакции .

Построение

Пример хеш-дерева в биткойн-блоке

Заполнение значений в узлах дерева идет снизу вверх. Сперва к каждому блоку данных применяется хеширование , и так далее. Полученные значения записываются в листья дерева. Блоки, находящиеся уровнем выше, заполняются как хеши от суммы своих детей, , где обычно означает конкатенацию . Эта операция повторяется, пока не будет получено верхнее значение — или merkle_root .

В биткойне в качестве хеш-функции используется двойное SHA-256 , то есть . Впрочем, хеш-функция может быть любой, например Tiger Tree Hash (TTH), используемый в файлообменных p2p-сетях , является деревом Меркла с хеш-функцией Tiger .

Если количество блоков на каком-то уровне дерева оказывается нечетным, то один блок дублируется или переносится без изменений на следующий уровень, как это происходит при вычислении Tiger Tree Hash .

Эффективность

Доказательство существования в хеш-дереве

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

В общем случае можно записать

,

а проверку осуществить как , где

.

Набор блоков называется аутентификационный путь или путь Меркла .

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

Таблица ниже демонстрирует, что даже при значительном количестве транзакций в блоке о сложности вычислений можно не беспокоиться .

Количество транзакций Приблизительный размер блока Размер пути (в хешах) Размер пути (в байтах)
16 транзакций 4 килобайта 4 хеша 128 байт
512 транзакций 128 килобайт 9 хэшей 288 байт
2048 транзакций 512 килобайт 11 хэшей 352 байт
65535 транзакций 16 мегабайт 16 хэшей 512 байт

Упрощенная проверка оплаты

Блок биткойна хранит только значение merkle_root своих транзакций. Это позволяет получить определённые преимущества и снизить нагрузку на сеть.

После накопления достаточного числа блоков можно удалять старые транзакции для экономии места. При этом сам блок остается неизменным, так как в нём хранится только merkle_root . Блок без транзакций занимает 80 Б, или 4,2 МБ в год (при генерации блока каждые 10 минут) .

Становится возможной упрощенная проверка оплаты ( англ. Simplified payment verification ). SPV-узел загружает не весь блок, а только заголовок блока. Для интересующей его транзакции он запрашивает также ее аутентификационный путь. Таким образом он загружает всего несколько килобайт, тогда как полный размер блока может быть больше 10 мегабайт (см. таблицу) . Использование этого метода, однако, требует, чтобы пользователь доверял узлу сети, у которого будет запрашивать заголовки блоков. Один из способов избежать атаки, то есть подмены узла недобросовестной стороной, — рассылать оповещения по всей сети при обнаружении ошибки в блоке, вынуждая пользователя загружать блок целиком .

На упрощенной проверке оплаты основана работа так называемых «тонких» биткойн-клиентов .

Дополнительно

Проблема обхода дерева Меркла

Дерево Меркла имеет также и недостатки, проявляющиеся при растущем количестве листьев. Как было показано ранее, для вычисления подписи произвольного блока нужно знать все значения из множества . Это не вызывает проблем, если есть возможность хранить все внутренние вершины дерева в памяти, однако для больших деревьев (количество листьев может увеличиваться до ) это не подходит. Можно также каждый раз вычислять внутренние блоки заново, но это значительно понизит производительность такой системы. Поэтому возникает проблема эффективного обхода дерева и генерации подписей ( англ. Merkle tree traversal problem ) . На сегодняшний день существуют решения, использующие времени и памяти, где — это количество листьев. Было также доказано, что не существует алгоритма обхода, который бы был одновременно лучше, чем и по времени, и по памяти .

Примечания

  1. Antonopoulos, Andreas M.,. . — First edition. — Sebastopol, CA. — xxi, 272 pages с. — ISBN 9781449374044 . 19 января 2018 года.
  2. J. Chapweske , G. Mohr . (англ.) . Onion Networks, Inc. (4 марта 2003). — Стандарт обмена хеш-деревьями над файлами . Дата обращения: 8 декабря 2017. 4 марта 2018 года.
  3. Einar Mykletun , Maithili Narasimha , Gene Tsudik . (англ.) // ACM Transactions on Storage : Журнал. — 2006. — Май ( vol. 2 , no. 2 ). — P. 107—138 . 19 февраля 2020 года.
  4. Georg Becker, Ruhr-universität Bochum. . 14 декабря 2017 года.
  5. Сатоси Накамото. // bitcoin.org. 5 апреля 2018 года.
  6. Israa Alqassem, Davor Svetinovic. (англ.) // IEEE International Conference on Internet of Things (iThings), and IEEE Green Computing and Communications (GreenCom) and IEEE Cyber, Physical and Social Computing (CPSCom) : журнал. — 2014. — Сентябрь. — ISBN 978-1-4799-5967-9 . — doi : . 2 апреля 2018 года.
  7. (англ.) . Глоссарий Bitcoin . Дата обращения: 7 декабря 2017. 7 декабря 2017 года.
  8. Michael Szydlo. (англ.) // Advances in Cryptology - EUROCRYPT 2004. — Springer, Berlin, Heidelberg, 2004-05-02. — P. 541–554 . — ISBN 9783540219354 , 9783540246763 . — doi : . 15 декабря 2017 года.

См. также

Ссылки

  • — улучшенная реализация дерева Меркла, использующаяся в Ethereum.
  • — предложение по замене SHA-1 на Tiger Tree Hash в .torrent файлах.
Источник —

Same as Дерево хешей