Дерево Меркла (геш-дерево, tiger tree tashing, англ. Merkle tree) є особливою структурою даних, яка містить підсумкову інформацію про якийсь більший обсяг даних. Використовується для перевірки цілісності даних.
Дані поділяються на малі частини (блоки), які індивідуально гешуються за допомогою Leaf Tiger Hash, потім з кожної пари гешів по черзі обчислюється Internal Tiger Hash. Якщо до гешу немає пари, то він переноситься в новий ланцюжок без змін. Далі в ланцюжку для кожної пари знову обчислюється Internal Tiger Hash. Ця процедура повторюється до тих пір, поки не залишиться один геш. Цей один геш, що залишився, називають Tiger Tree Root. Саме його використовують для однозначної ідентифікації файлу і вказують у різних P2P посиланнях.
LevelTiger Tree Root | / 0: --- 21 -- -------\ / \ \ 1: - 20 - 19 ------\ / \ \ \ 2: 17 18 19 ------ Internal Tiger Hashes / \ / \ / \ / 3: 12 13 14 15 16 11 --/ /\ /\ /\ /\ /\ \ 4: 1 2 3 4 5 6 7 8 9 10 11 --- Leaf Tiger Hashes
Використання
Геш-дерева використовуються для перевірки даних, що зберігаються, обробляються та передаються в комп'ютерах та між ними. Забезпечують перевірку на цілісність та достовірність даних та окремих блоків, що передаються між вузлами peer-to-peer мережі. Геш-дерева застосовуються в системах довіреного завантаження. Геш-дерева також використовуються в [en].
Геш-дерева використовуються у файлових системах IPFS, Btrfs та ZFS для протидії Деградації даних, програмі розповсюдження даних Dat, протоколі Google Wave, розподіленій системи керування версіями Git та Mercurial, резервній системі [en], однорангових мережах Bitcoin та Ethereum, фреймворку [en], системах Riak та [en].
Початкова реалізація дерева Меркла у Bitcoin від Сатосі Накамото застосовує крок стиснення геш-функції до надмірного рівня, що полегшує використання дерев типу Fast Merkle.
Огляд
Дерево гешів це двійкове дерево гешів, в якому листи є геш-блоками даних, наприклад, файлу або набору файлів. Верхні вузли дерева є гешами своїх «дітей». Наприклад, на зображенні hash 0 є результат гешування конкатенації hash 0-0 та hash 0-1. Тобто, hash 0 = hash (hash 0-0 + hash 0-1), де + означає конкатенацію.
Більшість реалізацій геш-дерев є двійковими (два дочірні вузли під кожним вузлом), але вони можуть використовувати також і багато інших дочірніх вузлів під кожним вузлом.
Як правило, для гешування використовується криптографічна геш-функція, така як SHA-2. Якщо геш-дерево потребує лише захисту від ненавмисного пошкодження, може бути використана необов'язкова контрольна сума, така як CRCs.
У верхній частині геш-дерева є верхній геш (або root hash, або master hash). Перш ніж завантажувати файл у мережу P2P, в більшості випадків верхній геш отримується з надійного джерела, наприклад, вебсайту, який, як відомо, має хороші рекомендації щодо завантаження файлів. Коли доступний верхній геш, геш-дерево може бути отримано з будь-якого неперевіреного джерела, як і будь-який рівноправний вузол у мережі P2P. Потім отримане геш-дерево порівнюється з перевіреним верхнім гешем, а якщо дерево гешування пошкоджене або підроблене, буде братися інше дерево гешу з іншого джерела, поки програма не знайде той, який дорівнює верхньому гешу.
Основна відмінність від геш-таблиці полягає в тому, що одна гілка геш-дерева може бути завантажена у необхідний час, а цілісність кожної гілки може бути перевірена негайно, навіть якщо все дерево ще недоступне. Наприклад, на зображенні цілісність блоку даних L2 можна перевірити негайно, якщо дерево вже містить hash 0-0 і hash 1, гешувавши блок даних і послідовно поєднуючи його результат з hash 0-0, а потім hash 1 і, нарешті, порівняння результату з top hash. Аналогічним чином, цілісність блоку даних L3 можна перевірити, якщо в дереві вже є hash 1-1 і hash 0. Це є перевагою, оскільки необхідно розбивати файли в дуже малих блоках даних, так що лише невеликі блоки повинні бути повторно завантажені, якщо вони пошкоджені. Якщо геш-файл дуже великий, таке геш-дерево або геш-список стає досить великим. Але якщо це дерево, можна швидко завантажити одну невелику гілку, можна перевірити цілісність гілки, а потім завантажувати блоки даних.
Друга атака знаходження першовзору
Merkle root hash не вказує на глибину дерева, застосувавши атаку знаходження першовзору, в якому зловмисник створює документ, відмінний від оригіналу, який має той же Merkle hash root. У наведеному вище прикладі зловмисник може створити новий документ, що містить два блоки даних, де в першому є hash 0-0 + hash 0-1, а другий — hash 1-0 + hash 1-1.
Одне просте рішення визначається в фреймворку [en]: при обчисленні геш-вузлів листів, до геш-даних додано 0x00 байт, тоді як при обчисленні внутрішніх геш-вузлів додано 0x01. Обмеження розміру дерева геш-елементів є обов'язковою умовою деяких [en], і допомагає зробити деякі докази жорсткішими. Деякі реалізації обмежують глибину дерева, використовуючи префікси глибини дерева гешу до гешей, тому будь-який витягнутий геш-ланцюг визначається як дійсний, лише якщо префікс зменшується на кожному кроці і залишається позитивним, коли лист досягнуто.
Tiger геш-дерево (TTH)
Tiger геш-дерево є широко використовуваною формою геш-дерева. Він використовує двійкове геш-дерево (два дочірні вузли під кожним вузлом), зазвичай має розмір блоку даних 1024 байт і використовує Tiger hash.
Tiger геш-дерево використовуються в Gnutella та Direct Connect P2P, [en] та [en] .
Приклади
(Base32): RBOEI7UYRYO5SUXGER5NMUOEZ5O6E4BHPP2MRFQ
URN: urn:tree:tiger:RBOEI7UYRYO5SUXGER5NMUOEZ5O6E4BHPP2MRFQ
Magnet-посилання: magnet:?xt=urn:tree:tiger:RBOEI7UYRYO5SUXGER5NMUOEZ5O6E4BHPP2MRFQ
Див. також
Примітки
- Kilian, J. (1995). Improved efficient arguments (preliminary version). CRYPTO.
- Bonwick, Jeff. . Jeff Bonwick's Blog. Архів оригіналу за 6 травня 2017. Процитовано 6 січня 2018.
- Likai Liu. . likai.org. Архів оригіналу за 8 квітня 2018. Процитовано 6 січня 2018.
- . Google Wave Protocol. Архів оригіналу за 28 вересня 2013. Процитовано 6 січня 2018.
- Koblitz, Neal; Menezes, Alfred J. (January 2016). Cryptocash, cryptocurrencies, and cryptocontracts. Designs, Codes and Cryptography. 78 (1): 87—102. doi:10.1007/s10623-015-0148-5.
- Adam Marcus. . aosabook.org. Архів оригіналу за 8 квітня 2018. Процитовано 6 січня 2018.
When a replica is down for an extended period of time, or the machine storing hinted handoffs for an unavailable replica goes down as well, replicas must synchronize from one another. In this case, Cassandra and Riak implement a Dynamo-inspired process called anti-entropy. In anti-entropy, replicas exchange Merkle trees to identify parts of their replicated key ranges which are out of sync. A Merkle tree is a hierarchical hash verification: if the hash over the entire keyspace is not the same between two replicas, they will exchange hashes of smaller and smaller portions of the replicated keyspace until the out-of-sync keys are identified. This approach reduces unnecessary data transfer between replicas which contain mostly similar data.
- . Архів оригіналу за 26 січня 2022. Процитовано 6 січня 2018.
- Chapweske, J.; Mohr, G. (4 березня 2003). . Архів оригіналу за 3 серпня 2009.
- . dcplusplus.sourceforge.net. Архів оригіналу за 13 січня 2018. Процитовано 6 січня 2018.
Посилання
- A C реалізація динамічно значного бінарного Геш-дерева SHA-256 (Merkle Tree) [ 3 січня 2021 у Wayback Machine.]
- Merkle Tree в Java [ 12 грудня 2020 у Wayback Machine.]
- , автор: Джил Шмідт
- Реалізація Tiger Tree Hash (TTH) в C і Java [ 18 листопада 2019 у Wayback Machine.]
- RHash [ 7 червня 2019 у Wayback Machine.], інструмент командного рядка з відкритим кодом, який може обчислювати TTH
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Derevo Merkla gesh derevo tiger tree tashing angl Merkle tree ye osoblivoyu strukturoyu danih yaka mistit pidsumkovu informaciyu pro yakijs bilshij obsyag danih Vikoristovuyetsya dlya perevirki cilisnosti danih Priklad binarnogo dereva geshuvannya Geshi 0 0 i 0 1 ce geshi blokiv danih L1 i L2 vidpovidno Gesh 0 ce gesh ob yednannya Geshiv 0 0 i 0 1 Dani podilyayutsya na mali chastini bloki yaki individualno geshuyutsya za dopomogoyu Leaf Tiger Hash potim z kozhnoyi pari geshiv po cherzi obchislyuyetsya Internal Tiger Hash Yaksho do geshu nemaye pari to vin perenositsya v novij lancyuzhok bez zmin Dali v lancyuzhku dlya kozhnoyi pari znovu obchislyuyetsya Internal Tiger Hash Cya procedura povtoryuyetsya do tih pir poki ne zalishitsya odin gesh Cej odin gesh sho zalishivsya nazivayut Tiger Tree Root Same jogo vikoristovuyut dlya odnoznachnoyi identifikaciyi fajlu i vkazuyut u riznih P2P posilannyah LevelTiger Tree Root 0 21 1 20 19 2 17 18 19 Internal Tiger Hashes 3 12 13 14 15 16 11 4 1 2 3 4 5 6 7 8 9 10 11 Leaf Tiger HashesVikoristannyaGesh dereva vikoristovuyutsya dlya perevirki danih sho zberigayutsya obroblyayutsya ta peredayutsya v komp yuterah ta mizh nimi Zabezpechuyut perevirku na cilisnist ta dostovirnist danih ta okremih blokiv sho peredayutsya mizh vuzlami peer to peer merezhi Gesh dereva zastosovuyutsya v sistemah dovirenogo zavantazhennya Gesh dereva takozh vikoristovuyutsya v en Gesh dereva vikoristovuyutsya u fajlovih sistemah IPFS Btrfs ta ZFS dlya protidiyi Degradaciyi danih programi rozpovsyudzhennya danih Dat protokoli Google Wave rozpodilenij sistemi keruvannya versiyami Git ta Mercurial rezervnij sistemi en odnorangovih merezhah Bitcoin ta Ethereum frejmvorku en sistemah Riak ta en Pochatkova realizaciya dereva Merkla u Bitcoin vid Satosi Nakamoto zastosovuye krok stisnennya gesh funkciyi do nadmirnogo rivnya sho polegshuye vikoristannya derev tipu Fast Merkle OglyadDerevo geshiv ce dvijkove derevo geshiv v yakomu listi ye gesh blokami danih napriklad fajlu abo naboru fajliv Verhni vuzli dereva ye geshami svoyih ditej Napriklad na zobrazhenni hash 0 ye rezultat geshuvannya konkatenaciyi hash 0 0 ta hash 0 1 Tobto hash 0 hash hash 0 0 hash 0 1 de oznachaye konkatenaciyu Bilshist realizacij gesh derev ye dvijkovimi dva dochirni vuzli pid kozhnim vuzlom ale voni mozhut vikoristovuvati takozh i bagato inshih dochirnih vuzliv pid kozhnim vuzlom Yak pravilo dlya geshuvannya vikoristovuyetsya kriptografichna gesh funkciya taka yak SHA 2 Yaksho gesh derevo potrebuye lishe zahistu vid nenavmisnogo poshkodzhennya mozhe buti vikoristana neobov yazkova kontrolna suma taka yak CRCs U verhnij chastini gesh dereva ye verhnij gesh abo root hash abo master hash Persh nizh zavantazhuvati fajl u merezhu P2P v bilshosti vipadkiv verhnij gesh otrimuyetsya z nadijnogo dzherela napriklad vebsajtu yakij yak vidomo maye horoshi rekomendaciyi shodo zavantazhennya fajliv Koli dostupnij verhnij gesh gesh derevo mozhe buti otrimano z bud yakogo neperevirenogo dzherela yak i bud yakij rivnopravnij vuzol u merezhi P2P Potim otrimane gesh derevo porivnyuyetsya z perevirenim verhnim geshem a yaksho derevo geshuvannya poshkodzhene abo pidroblene bude bratisya inshe derevo geshu z inshogo dzherela poki programa ne znajde toj yakij dorivnyuye verhnomu geshu Osnovna vidminnist vid gesh tablici polyagaye v tomu sho odna gilka gesh dereva mozhe buti zavantazhena u neobhidnij chas a cilisnist kozhnoyi gilki mozhe buti perevirena negajno navit yaksho vse derevo she nedostupne Napriklad na zobrazhenni cilisnist bloku danih L2 mozhna pereviriti negajno yaksho derevo vzhe mistit hash 0 0 i hash 1 geshuvavshi blok danih i poslidovno poyednuyuchi jogo rezultat z hash 0 0 a potim hash 1 i nareshti porivnyannya rezultatu z top hash Analogichnim chinom cilisnist bloku danih L3 mozhna pereviriti yaksho v derevi vzhe ye hash 1 1 i hash 0 Ce ye perevagoyu oskilki neobhidno rozbivati fajli v duzhe malih blokah danih tak sho lishe neveliki bloki povinni buti povtorno zavantazheni yaksho voni poshkodzheni Yaksho gesh fajl duzhe velikij take gesh derevo abo gesh spisok staye dosit velikim Ale yaksho ce derevo mozhna shvidko zavantazhiti odnu neveliku gilku mozhna pereviriti cilisnist gilki a potim zavantazhuvati bloki danih Druga ataka znahodzhennya pershovzoruMerkle root hash ne vkazuye na glibinu dereva zastosuvavshi ataku znahodzhennya pershovzoru v yakomu zlovmisnik stvoryuye dokument vidminnij vid originalu yakij maye toj zhe Merkle hash root U navedenomu vishe prikladi zlovmisnik mozhe stvoriti novij dokument sho mistit dva bloki danih de v pershomu ye hash 0 0 hash 0 1 a drugij hash 1 0 hash 1 1 Odne proste rishennya viznachayetsya v frejmvorku en pri obchislenni gesh vuzliv listiv do gesh danih dodano 0x00 bajt todi yak pri obchislenni vnutrishnih gesh vuzliv dodano 0x01 Obmezhennya rozmiru dereva gesh elementiv ye obov yazkovoyu umovoyu deyakih en i dopomagaye zrobiti deyaki dokazi zhorstkishimi Deyaki realizaciyi obmezhuyut glibinu dereva vikoristovuyuchi prefiksi glibini dereva geshu do geshej tomu bud yakij vityagnutij gesh lancyug viznachayetsya yak dijsnij lishe yaksho prefiks zmenshuyetsya na kozhnomu kroci i zalishayetsya pozitivnim koli list dosyagnuto Tiger gesh derevo TTH Tiger gesh derevo ye shiroko vikoristovuvanoyu formoyu gesh dereva Vin vikoristovuye dvijkove gesh derevo dva dochirni vuzli pid kozhnim vuzlom zazvichaj maye rozmir bloku danih 1024 bajt i vikoristovuye Tiger hash Tiger gesh derevo vikoristovuyutsya v Gnutella ta Direct Connect P2P en ta en PrikladiBase32 RBOEI7UYRYO5SUXGER5NMUOEZ5O6E4BHPP2MRFQ URN a rel nofollow class external free href urn tree tiger RBOEI7UYRYO5SUXGER5NMUOEZ5O6E4BHPP2MRFQ urn tree tiger RBOEI7UYRYO5SUXGER5NMUOEZ5O6E4BHPP2MRFQ a Magnet posilannya a rel nofollow class external free href magnet xt urn tree tiger RBOEI7UYRYO5SUXGER5NMUOEZ5O6E4BHPP2MRFQ magnet xt urn tree tiger RBOEI7UYRYO5SUXGER5NMUOEZ5O6E4BHPP2MRFQ a Div takozhGesh funkciya Blokchejn Gesh tablicya BitkojnPrimitkiKilian J 1995 Improved efficient arguments preliminary version CRYPTO Bonwick Jeff Jeff Bonwick s Blog Arhiv originalu za 6 travnya 2017 Procitovano 6 sichnya 2018 Likai Liu likai org Arhiv originalu za 8 kvitnya 2018 Procitovano 6 sichnya 2018 Google Wave Protocol Arhiv originalu za 28 veresnya 2013 Procitovano 6 sichnya 2018 Koblitz Neal Menezes Alfred J January 2016 Cryptocash cryptocurrencies and cryptocontracts Designs Codes and Cryptography 78 1 87 102 doi 10 1007 s10623 015 0148 5 Adam Marcus aosabook org Arhiv originalu za 8 kvitnya 2018 Procitovano 6 sichnya 2018 When a replica is down for an extended period of time or the machine storing hinted handoffs for an unavailable replica goes down as well replicas must synchronize from one another In this case Cassandra and Riak implement a Dynamo inspired process called anti entropy In anti entropy replicas exchange Merkle trees to identify parts of their replicated key ranges which are out of sync A Merkle tree is a hierarchical hash verification if the hash over the entire keyspace is not the same between two replicas they will exchange hashes of smaller and smaller portions of the replicated keyspace until the out of sync keys are identified This approach reduces unnecessary data transfer between replicas which contain mostly similar data Arhiv originalu za 26 sichnya 2022 Procitovano 6 sichnya 2018 Chapweske J Mohr G 4 bereznya 2003 Arhiv originalu za 3 serpnya 2009 dcplusplus sourceforge net Arhiv originalu za 13 sichnya 2018 Procitovano 6 sichnya 2018 PosilannyaA C realizaciya dinamichno znachnogo binarnogo Gesh dereva SHA 256 Merkle Tree 3 sichnya 2021 u Wayback Machine Merkle Tree v Java 12 grudnya 2020 u Wayback Machine avtor Dzhil Shmidt Realizaciya Tiger Tree Hash TTH v C i Java 18 listopada 2019 u Wayback Machine RHash 7 chervnya 2019 u Wayback Machine instrument komandnogo ryadka z vidkritim kodom yakij mozhe obchislyuvati TTH