stringtranslate.com

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

Пример бинарного хэш-дерева. Хэши 0-0 и 0-1 — это хэш-значения блоков данных L1 и L2 соответственно, а хэш 0 — это хэш конкатенации хэшей 0-0 и 0-1.

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

Демонстрация того, что конечный узел является частью данного бинарного хэш-дерева, требует вычисления количества хешей, пропорционального логарифму количества конечных узлов в дереве. [1] И наоборот, в хэш-списке число пропорционально количеству самих конечных узлов. Таким образом, дерево Меркла является эффективным примером схемы криптографического обязательства , в которой корень дерева рассматривается как обязательство, а конечные узлы могут быть раскрыты и доказаны как часть исходного обязательства. [2]

Концепция хеш-дерева названа в честь Ральфа Меркла , который запатентовал ее в 1979 году. [3] [4]

Использует

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

Хэш-деревья используются в:

Были высказаны предложения использовать хэш-деревья в доверенных вычислительных системах. [11]

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

Обзор

Дерево хешей — это дерево хешей , в котором листья (т. е. листовые узлы, иногда также называемые «листьями») являются хэшами блоков данных , например, в файле или наборе файлов. Узлы, расположенные выше в дереве, являются хэшами соответствующих им дочерних элементов. Например, на рисунке выше хэш 0 является результатом хэширования конкатенации хэша 0-0 и хэша 0-1 . То есть хэш 0 = хэш ( хэш 0-0 + хэш 0-1 ), где «+» обозначает конкатенацию.

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

Обычно для хеширования используется криптографическая хеш-функция, например SHA-2 . Если хеш-дерево должно защищать только от непреднамеренного повреждения, можно использовать незащищенные контрольные суммы , например CRC .

В верхней части хэш-дерева находится верхний хэш (или корневой хэш или главный хэш ). Перед загрузкой файла в P2P-сети в большинстве случаев верхний хэш получается из надежного источника, например, от друга или с веб-сайта, который известен хорошими рекомендациями файлов для загрузки. Когда верхний хэш доступен, хэш-дерево может быть получено из любого ненадежного источника, например, любого однорангового узла в P2P-сети. Затем полученное хэш-дерево проверяется на соответствие надежному верхнему хешу, и если хэш-дерево повреждено или поддельное, будет опробовано другое хэш-дерево из другого источника, пока программа не найдет то, которое соответствует верхнему хешу. [13]

Главное отличие от списка хэшей заключается в том, что можно загрузить одну ветвь дерева хэшей за раз, и целостность каждой ветви можно проверить немедленно, даже если все дерево еще не доступно. Например, на рисунке целостность блока данных L2 можно проверить немедленно, если дерево уже содержит хэш 0-0 и хэш 1, путем хэширования блока данных и итеративного объединения результата с хэшем 0-0 , а затем хэшем 1 и, наконец, сравнения результата с верхним хешем . Аналогично, целостность блока данных L3 можно проверить, если дерево уже содержит хэш 1-1 и хэш 0. Это может быть преимуществом, поскольку эффективно разбивать файлы на очень маленькие блоки данных, так что только маленькие блоки придется повторно загружать в случае их повреждения. Если хэшированный файл большой, такой список хэшей или цепочка хэшей становится довольно большой. Но если это дерево, то можно быстро загрузить одну небольшую ветку, проверить целостность ветки, а затем начать загрузку блоков данных. [ необходима цитата ]

Вторая атака прообраза

Корень хэша Меркла не указывает глубину дерева, что позволяет провести атаку второго прообраза , в которой злоумышленник создает документ, отличный от оригинала, который имеет тот же корень хэша Меркла. Для приведенного выше примера злоумышленник может создать новый документ, содержащий два блока данных, где первый — это хэш 0-0 + хэш 0-1 , а второй — хэш 1-0 + хэш 1-1 . [14] [15]

Одно простое исправление определено в Certificate Transparency : при вычислении хэшей листовых узлов к данным хэша добавляется байт 0x00, а при вычислении хэшей внутренних узлов добавляется байт 0x01. [13] Ограничение размера хэш-дерева является предпосылкой некоторых формальных доказательств безопасности и помогает сделать некоторые доказательства более жесткими. Некоторые реализации ограничивают глубину дерева, используя префиксы глубины хэш-дерева перед хэшами, поэтому любая извлеченная цепочка хэшей определяется как действительная, только если префикс уменьшается на каждом шаге и остается положительным при достижении листа.

Гашиш из тигрового дерева

Хэш Tiger tree — широко используемая форма хэш-дерева. Он использует бинарное хэш-дерево (два дочерних узла под каждым узлом), обычно имеет размер блока данных 1024 байта и использует хэш Tiger . [16]

Хэши Tiger Tree используются в протоколах обмена файлами Gnutella [17], Gnutella2 и Direct Connect P2P [18], а также в приложениях для обмена файлами , таких как Phex [19] , BearShare , LimeWire , Shareaza , DC++ [20] и gtk-gnutella [21] .

Смотрите также

Ссылки

  1. ^ Беккер, Георг (18 июля 2008 г.). «Схемы подписей Меркла, деревья Меркла и их криптоанализ» (PDF) . Рурский университет в Бохуме. п. 16. Архивировано из оригинала (PDF) 22 декабря 2014 г. Проверено 20 ноября 2013 г.
  2. ^ "Справочник по прикладной криптографии". cacr.uwaterloo.ca . Раздел 13.4.1 . Получено 2024-03-07 .
  3. ^ Merkle, RC (1988). "Цифровая подпись, основанная на обычной функции шифрования". Advances in Cryptology – CRYPTO '87 . Lecture Notes in Computer Science. Vol. 293. pp. 369–378. doi :10.1007/3-540-48184-2_32. ISBN 978-3-540-18796-7.
  4. Патент США 4309569, Ральф Меркл, «Способ предоставления цифровых подписей», опубликован 5 января 1982 г., передан Совету попечителей Университета имени Леланда Стэнфорда. 
  5. ^ Бонвик, Джефф (2005-12-08). "ZFS End-to-End Data Integrity". blogs.oracle.com . Архивировано из оригинала 3 апреля 2012 г. . Получено 2013-09-19 .
  6. ^ Ликай Лю. «Сопротивление битроту на одном диске». likai.org .
  7. ^ "General Verifiable Federation". Протокол Google Wave . Архивировано из оригинала 2018-04-08 . Получено 2017-03-09 .
  8. ^ Коблиц, Нил; Менезес, Альфред Дж. (январь 2016 г.). «Криптовалюты, криптовалюты и криптоконтракты». Designs, Codes and Cryptography . 78 (1): 87–102. CiteSeerX 10.1.1.701.8721 . doi :10.1007/s10623-015-0148-5. S2CID  16594958. 
  9. ^ Долстра, Э. Чисто функциональная модель развертывания программного обеспечения. Кандидатская диссертация, Факультет естественных наук, Утрехт, Нидерланды. Январь 2006 г. стр. 21 ISBN 90-393-4130-3
  10. ^ Адам Маркус. "Экосистема NoSQL". aosabook.org . Когда реплика не работает в течение длительного периода времени или машина, хранящая подсказанные передачи для недоступной реплики, также выходит из строя, реплики должны синхронизироваться друг с другом. В этом случае Cassandra и Riak реализуют вдохновленный Dynamo процесс, называемый антиэнтропией. В антиэнтропии реплики обмениваются деревьями Меркла для определения частей своих реплицированных диапазонов ключей, которые не синхронизированы. Дерево Меркла — это иерархическая проверка хеша: если хеш по всему пространству ключей не одинаков между двумя репликами, они будут обмениваться хешами все меньших и меньших частей реплицированного пространства ключей, пока не будут идентифицированы несинхронизированные ключи. Такой подход сокращает ненужную передачу данных между репликами, которые содержат в основном похожие данные.
  11. ^ Килиан, Дж. (1995). "Улучшенные эффективные аргументы (предварительная версия)" (PDF) . КРИПТО . doi : 10.1007/3-540-44750-4_25 .
  12. ^ Марк Фриденбах: Быстрые деревья Меркла
  13. ^ ab Лори, Б.; Лэнгли, А.; Каспер, Э. (июнь 2013 г.). «Прозрачность сертификата». IETF : RFC6962. doi : 10.17487/rfc6962.
  14. ^ Елена Андреева; Шарль Буйаге; Орр Данкельман; Джон Келси (январь 2009 г.). «Herding, Second Proimage and Trojan Message Attacks beyond Merkle-Damgård». Избранные области в криптографии . Конспект лекций по информатике. Том 5867. SAC. стр. 393–414. doi :10.1007/978-3-642-05445-7_25. ISBN 978-3-642-05443-3.
  15. ^ Елена Андреева; Шарль Буйаге; Пьер-Ален Фук; Джонатан Дж. Хох; Джон Келси; Ади Шамир; Себастьен Циммер (2008). «Вторые атаки прообраза на сглаженные хэш-функции». В Smart, Nigel (ред.). Достижения в криптологии – EUROCRYPT 2008. Конспект лекций по информатике. Том 4965. Стамбул, Турция. С. 270–288. doi :10.1007/978-3-540-78967-3_16. ISBN 978-3-540-78966-6. S2CID  12844017.{{cite book}}: CS1 maint: отсутствует местоположение издателя ( ссылка )
  16. ^ Chapweske, J.; Mohr, G. (4 марта 2003 г.). "Формат обмена хэшами деревьев (THEX)". Архивировано из оригинала 2009-08-03.
  17. ^ "Ссылка на файл tigertree.c". Gtk-Gnutella . Получено 23 сентября 2018 г. .
  18. ^ "Аудит: приложение P2P DirectConnect". Symantec . Архивировано из оригинала 29 января 2015 г. Получено 23 сентября 2018 г.
  19. Арне Бабенхаузерхайде (7 января 2007 г.). «Phex 3.0.0 выпущен». Фекс . Проверено 23 сентября 2018 г.
  20. ^ "Список возможностей DC++". dcplusplus.sourceforge.net .
  21. ^ "Разработка". GTK-Gnutella . Получено 23 сентября 2018 г. .

Дальнейшее чтение

Внешние ссылки

Послушайте эту статью ( 5 минут )
Разговорный значок Википедии
Этот аудиофайл был создан на основе редакции этой статьи от 17 сентября 2013 года и не отражает последующие правки. ( 2013-09-17 )