stringtranslate.com

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

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

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

Чтобы продемонстрировать, что листовой узел является частью данного двоичного хэш-дерева, необходимо вычислить количество хэшей, пропорциональное логарифму количества конечных узлов в дереве. [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]

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

Хэш тигрового дерева

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

Хэши тигрового дерева используются в протоколах обмена файлами 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 . Проверено 7 марта 2024 г.
  3. ^ Меркл, RC (1988). «Цифровая подпись, основанная на традиционной функции шифрования». Достижения в криптологии – КРИПТО '87 . Конспекты лекций по информатике. Том. 293. стр. 369–378. дои : 10.1007/3-540-48184-2_32. ISBN 978-3-540-18796-7.
  4. ^ Патент США 4309569, Ральф Меркл, «Метод предоставления цифровых подписей», опубликованный 5 января 1982 г., передан Попечительскому совету Стэнфордского младшего университета Леланда. 
  5. ^ Бонвик, Джефф (8 декабря 2005 г.). «Сквозная целостность данных ZFS». blogs.oracle.com . Архивировано из оригинала 3 апреля 2012 года . Проверено 19 сентября 2013 г.
  6. ^ Ликай Лю. «Сопротивление Битрота на одном приводе». likai.org .
  7. ^ "Общая проверяемая федерация" . Протокол Google Wave . Архивировано из оригинала 08 апреля 2018 г. Проверено 9 марта 2017 г.
  8. ^ Коблиц, Нил; Менезес, Альфред Дж. (январь 2016 г.). «Криптокэши, криптовалюты и криптоконтракты». Проекты, коды и криптография . 78 (1): 87–102. CiteSeerX 10.1.1.701.8721 . дои : 10.1007/s10623-015-0148-5. S2CID  16594958. 
  9. ^ Долстра, Э. Чисто функциональная модель развертывания программного обеспечения. Кандидатская диссертация, Факультет естественных наук, Утрехт, Нидерланды. Январь 2006 г. стр. 21 ISBN 90-393-4130-3
  10. ^ Адам Маркус. «Экосистема NoSQL». aosabook.org . Когда реплика не работает в течение длительного периода времени или машина, хранящая подсказки для недоступной реплики, также выходит из строя, реплики должны синхронизироваться друг с другом. В этом случае Кассандра и Риак реализуют процесс, вдохновленный Dynamo, называемый антиэнтропией. В антиэнтропии реплики обмениваются деревьями Меркла, чтобы идентифицировать части своих реплицируемых диапазонов ключей, которые не синхронизированы. Дерево Меркла представляет собой иерархическую проверку хэша: если хэш по всему пространству ключей не одинаков между двумя репликами, они будут обмениваться хэшами все меньших и меньших частей реплицированного пространства ключей до тех пор, пока не будут идентифицированы несинхронизированные ключи. Этот подход уменьшает ненужную передачу данных между репликами, которые содержат в основном схожие данные.
  11. ^ Килиан, Дж. (1995). «Улучшенные эффективные аргументы (предварительная версия)» (PDF) . КРИПТО . дои : 10.1007/3-540-44750-4_25 .
  12. ^ Марк Фриденбах: Быстрые деревья Меркла
  13. ^ аб Лори, Б.; Лэнгли, А.; Каспер, Э. (июнь 2013 г.). «Прозрачность сертификата». IETF : RFC6962. doi : 10.17487/rfc6962.
  14. ^ Елена Андреева; Шарль Буйаге; Орр Данкельман; Джон Келси (январь 2009 г.). «Атака стада, второго прообраза и троянских сообщений за пределами Меркле-Дамгорда». Избранные области криптографии . Конспекты лекций по информатике. Том. 5867. САК. стр. 393–414. дои : 10.1007/978-3-642-05445-7_25. ISBN 978-3-642-05443-3.
  15. ^ Елена Андреева; Шарль Буйаге; Пьер-Ален Фуке; Джонатан Дж. Хох; Джон Келси; Ади Шамир; Себастьян Циммер (2008). «Вторые атаки прообразов на сглаживаемые хеш-функции». В Смарт, Найджел (ред.). Достижения в криптологии – EUROCRYPT 2008 . Конспекты лекций по информатике. Том. 4965. Стамбул, Турция. стр. 270–288. дои : 10.1007/978-3-540-78967-3_16. ISBN 978-3-540-78966-6. S2CID  12844017.{{cite book}}: CS1 maint: отсутствует местоположение издателя ( ссылка )
  16. ^ Чапвеске, Дж.; Мор, Г. (4 марта 2003 г.). «Формат Tree Hash EXchange (THEX)». Архивировано из оригинала 3 августа 2009 г.
  17. ^ "Ссылка на файл Tigertree.c" . Гтк-Гнутелла . Проверено 23 сентября 2018 г.
  18. ^ «Аудит: приложение P2P DirectConnect» . Симантек . Проверено 23 сентября 2018 г.
  19. Арне Бабенхаузерхайде (7 января 2007 г.). «Phex 3.0.0 выпущен». Фекс . Проверено 23 сентября 2018 г.
  20. ^ «Список функций DC++». dcplusplus.sourceforge.net .
  21. ^ «Развитие». ГТК-Гнутелла . Проверено 23 сентября 2018 г.

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

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

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