Bitcoin Forum
May 24, 2024, 12:34:26 AM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: Дерево Меркла и корень Меркла для чайнико  (Read 132 times)
zasad@ (OP)
Legendary
*
Offline Offline

Activity: 1764
Merit: 4312



View Profile WWW
February 02, 2021, 08:41:11 PM
Last edit: February 03, 2021, 12:26:28 PM by zasad@
 #1

Это перевод, оригинал статьи принадлежит Husires. Спасибо за полезную информацию!


Дисклеймер: информация, содержащаяся в этой статье, является результатом моего понимания деревьев Меркла и корней Меркла и может содержать некоторые ошибки. Если найдете, то сообщите об этом.


Оглавление

      1. Что такое дерево Меркла?
      2. Криптографические хеш-функции
      3. Как работают деревья Меркла?
      4. Использование деревьев Меркла
      5. Почему они используются в BTC?


Источник: Bitcoin whitepaper


Что такое дерево Меркла?

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

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


Корень Меркла: это хэш всех хэшей всех транзакций, которые являются частью блока в сети блокчейн.

Его структура используется для эффективной проверки целостности данных в группе.
Идея была создана и запатентована Ральфом К. Мерклом в 1979 году, срок действия патента истекает в 2002 году



Криптографические хеш-функции

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

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

Пример:

Code:
In-put: H
Out-put: 44bd7ae60f478fae1061e11a7739f4b94d1daf917982d33b6fc8a01a63f89c21

In-put: Husires
Out-put: 198d93f2c0bff9767d4cdc047f2191b0921d81e410c10c0744311fadfdb516f9

In-put: Today is 1/9/2020 and i used my username: Husires
Out-put: 2afbf1c88e101259002a592dbcc9340af2f0fa8f51a06e77910b6aca63a97c0c

In-put: Today is 1/9/2020 and i used my username: Husires
Today is 1/9/2020 and i used my username: Husires
Today is 1/9/2020 and i used my username: Husires
Today is 1/9/2020 and i used my username: Husires
Today is 1/9/2020 and i used my username: Husires
Out-put: 43a322d0eb09caaf26762ae18a369f5e8e06ac32c9e6a0d9fb4972aa53654db8
Что вы получили из этого примера?



Как работают деревья Меркла?

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

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

Вы думаете, если бы существовал более простой способ сделать это . К счастью, именно здесь на помощь приходят деревья Меркла. С помощью одного из них ваш файл разбивается на части. Если бы это был файл размером 50 ГБ, вы могли бы разделить его на сто частей, каждый размером 0,5 ГБ. Затем он будет загружен по частям. По сути, это то, что вы делаете, когда загружаете торрент-файлы.

В этом случае ваш источник предоставит вам хеш, известный как корень Меркла . Этот единственный хеш представляет собой совокупность хешей всех частей, из которых состоит ваш файл. Корень Меркла значительно упрощает проверку данных.

Для простоты давайте рассмотрим пример, в котором мы используем файл размером 8 ГБ, разбитый на восемь фрагментов. Назовем разные фрагменты от A до H . Затем каждый фрагмент проходит через хеш-функцию, давая нам восемь различных хешей.


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

Нет. Вместо этого мы собираемся взять каждую пару хешей, объединить их, а затем хешировать вместе. Итак, мы хешируем hA + hB , hC + hD , hE + hF и hG + hH . В итоге получаем четыре хэша. Затем мы проводим еще один раунд хеширования, чтобы получить два. Наконец, мы хэшируем оставшиеся два, чтобы получить наш главный хеш - корень Меркла (или хеш-дерево).


Структура выглядит как перевернутое дерево. В нижнем ряду у нас есть листья, из которых складываются узлы и, наконец, корень.

Теперь у нас есть корень Меркла, представляющий загруженный файл. Мы можем сравнить этот корень Меркла с хешем, предоставленным источником. Если он совпадает, отлично! Но если хеши разные, мы можем быть уверены, что данные были изменены. Другими словами, один или несколько фрагментов создали другой хэш. Таким образом, любое небольшое изменение данных даст нам совершенно другой корень Меркла.

К счастью, есть удобный способ проверить, какой фрагмент изменен. В нашем случае, допустим, это hE . Вы должны начать с того, что спросите у партнера два хэша, которые создали корень Меркла ( hABCD и hEFGH ). Ваше значение hABCD должно совпадать с их значением, поскольку в этом поддереве нет ошибки. Но у hEFGH совпадений не будет, так что вы знаете, что нужно искать ошибку там. Затем вы запрашиваете hEF и hGH и сравниваете их со своими. hGH совпадет, и вы знаете, что в hEF ошибка.  Наконец, вы сравниваете хеши hE и hF. Теперь вы знаете что фрагмент hE неверный, поэтому вы можете повторно его загрузить.

Подводя итог, можно сказать, что дерево Меркла создается путем разделения данных на множество частей, которые затем многократно хешируются для формирования корня Меркла. Затем вы можете эффективно проверить, что с частью данных что-то пошло не так.
https://academy.binance.com/en/articles/merkle-trees-and-merkle-roots-explained

Использование деревьев Меркла

Может использоваться для проверки любого типа хранимых данных, помогает гарантировать, что блоки данных, полученные от других одноранговых узлов в одноранговой сети, принимаются неповрежденными и неизменными, используются в файловых системах IPFS, Btrfs и ZFS, BTC и  Ethereum, а также ряда систем NoSQL, таких как Apache Cassandra, Riak и Dynamo.


Почему они используется в BTC?

Они являются неотъемлемой частью каждого блока, поскольку их можно найти в заголовках блоков.

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

Если мы вернемся к предыдущему примеру, мы можем проверить с помощью 3 шагов вместо 7 шагов, например, для проверки hB. Если у нас есть hA, мы можем отработать hAB, поэтому мы можем вычислить hABCD с помощью hCD и с hEFGH, мы можем проверить, что полученный корень Меркла совпадает с корнем из заголовка блока.

Только 3 шага.

Вы можете прочитать подробнее на https://bitcoin.org/bitcoin.pdf

У него есть некоторые недостатки в случае успешной атаки 51%, о которых будет рассказано в другой теме.

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

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

Следовательно, любое изменение в списке транзакций приведет к изменению корня Меркла и, таким образом, отклонит блок.




Источники

Code:
https://en.wikipedia.org/wiki/Merkle_tree
https://brilliant.org/wiki/merkle-tree/
https://www.youtube.com/watch?v=fB41w3JcR7U
https://golden.com/wiki/Merkle_tree-W3DMKV
https://academy.binance.com/blockchain/merkle-trees-and-merkle-roots-explained
https://blockonomi.com/merkle-tree/

...AoBT...
▄▄█████████████████▄▄
███████████████████████
█████████████████████████
███████████████████████
██████████████████████
█████████████████████
███████████████████████
██████████████████████
█████████████████████
█████████████████████
█████████████████████████
███████████████████████
█████████████████
The Alliance
of Bitcointalk
Translators
▄▄▄███████▄▄▄
▄███████████████▄
▄███
████████████████▄
▄██
███████████████████▄
▄█
██████████████████████▄
████████████████████████
█████████████████████
████████████████████████
▀███████████████████████▀
▀███████████████████
▀███████████████████▀
███████████████▀
▀▀▀███████▀▀▀
.
..JOIN US..

▄███████████████████████▄
█████████████████████████
█████▀▀██████▀▀██▀▀▀▀████
████████▀██████████
████▄▄▄▄▀███████
███████▄▀▄█▀▀███████
█████████████████████████
█████████████████████████
████████████▀████████████
▀███████████████████████▀
█████

██████████
.
..HIRE US..
A-Bolt
Legendary
*
Offline Offline

Activity: 2317
Merit: 2318


View Profile
February 02, 2021, 09:45:39 PM
 #2

Дисклеймер: информация, содержащаяся в этой статье, является результатом моего понимания деревьев Меркла и корней Меркла и может содержать некоторые ошибки.

Да какое тут нахрен понимание. Это просто пересказ этой статьи. Проблема в том что это пересказ двоечника, который сам нихрена в этой статье не понял, но пытается что-то промямлить по теме вопроса, чтобы ему поставили тройку.

Один человек сделал из нормальной, понятной статьи говно, а второй - переводчик, зачем-то притащил это говно в русский локал, вместо того, чтобы перевести оригинальную статью. Какой смысл в подобной деятельности? Размазывание говна по форуму?
stmar
Member
**
Offline Offline

Activity: 196
Merit: 52


View Profile
February 02, 2021, 09:58:31 PM
 #3

zasad@ , надо признать, что как новичок и чайник я ничего не понял. Уж коле ты ищешь что-то в раздел новичков, то тема должна быть раскрыта предельно ясно. Здесь же ты схалтурил, так что присоединюсь к предыдущему оратору.
Дерево Меркла и корень Меркла?
zasad@ (OP)
Legendary
*
Offline Offline

Activity: 1764
Merit: 4312



View Profile WWW
February 03, 2021, 10:29:28 AM
 #4

A-Bolt и stmar спасибо за критику.

Прежде чем опубликовать  перевод по просьбе автора, я сверил все термины и прочитал дополнительно несколько статей, чтобы убедится, в правильности перевода. Базовую информацию о теме я получил. Если новичкам не понятно, они могут изучить больше материала по ссылкам в конце перевода.
Когда разбираюсь в разных вопросах, я привык читать много статей по теме. В RU форуме принято считать что все должно быть идеально, попробуйте сначала сами, потом требуйте от других и критикуйте.
Профи всегда недовольны, я с ними никогда не спорил Cheesy

...AoBT...
▄▄█████████████████▄▄
███████████████████████
█████████████████████████
███████████████████████
██████████████████████
█████████████████████
███████████████████████
██████████████████████
█████████████████████
█████████████████████
█████████████████████████
███████████████████████
█████████████████
The Alliance
of Bitcointalk
Translators
▄▄▄███████▄▄▄
▄███████████████▄
▄███
████████████████▄
▄██
███████████████████▄
▄█
██████████████████████▄
████████████████████████
█████████████████████
████████████████████████
▀███████████████████████▀
▀███████████████████
▀███████████████████▀
███████████████▀
▀▀▀███████▀▀▀
.
..JOIN US..

▄███████████████████████▄
█████████████████████████
█████▀▀██████▀▀██▀▀▀▀████
████████▀██████████
████▄▄▄▄▀███████
███████▄▀▄█▀▀███████
█████████████████████████
█████████████████████████
████████████▀████████████
▀███████████████████████▀
█████

██████████
.
..HIRE US..
A-Bolt
Legendary
*
Offline Offline

Activity: 2317
Merit: 2318


View Profile
February 03, 2021, 11:40:29 AM
Merited by zasad@ (1), ~DefaultTrust (1)
 #5

Если новичкам не понятно
Новичкам непонятно, мне непонятно, может быть, вам понятно?

Рассмотрим характерную цитату:

Давайте упростим это, предположим, что у вас есть большой файл размером 8 ГБ, и вы хотите проверить его подлинность, поэтому вы сопоставляете хэш, который у вас есть, с хешем, который был опубликован разработчиками, и, следовательно, если каждый файл в нем совпадает со всеми данными, тогда вы загрузили правильный файл, но как мы это сделаем?

Вы можете сравнивать каждый файл отдельно, пока не дойдете до последнего файла (поэтому вам нужно сравнивать файлы размером 8 ГБ), но это займет много времени. Деревья Меркла предлагают решение, которое сократит время вашей работы.

Сперва речь идёт об одном большом файле: "есть большой файл размером 8 ГБ". Потом, внезапно, появляется "если каждый файл в нем совпадает со всеми данными". Большой файл превратился в несколько файлов, да ещё и "в нём". В чём, в нём? С какими "всеми данными" должен совпадать "каждый файл"?

Дальше - больше: "Вы можете сравнивать каждый файл отдельно, пока не дойдете до последнего файла". С чем сравнивать? У нас изначально был один файл и один хеш, соответствующий этому файлу. Если нужно проверить соответствие одного файла одному хешу, при чём тут остальные файлы?

Здесь написан бред - набор бессвязных бессмысленных фраз. Если вы понимаете, что здесь написано, поясните, что хотел сказать автор. Если же вы сами не понимаете написанного, значит ваш перевод подпадает под п.1 Правил: "Не размещать пустые или имеющие низкое значение сообщения или темы."
witcher_sense
Legendary
*
Offline Offline

Activity: 2352
Merit: 4369


🔐BitcoinMessage.Tools🔑


View Profile WWW
February 03, 2021, 12:27:12 PM
Merited by Symmetrick (3), A-Bolt (1)
 #6

Есть такая замечательная книга под названием "Mastering Bitcoin", в которой деревьям и корням Меркла посвящена целая глава. Читайте, зачитывайтесь. Книга доступна бесплатно на русском языке здесь: https://bitcoinbook.info/wp-content/translations/ru/book.pdf Если вы чайник и после прочтения русского варианта ничего не поймёте, то ничего удивительного. При переводе на другой язык иногда теряется весь смысл. Рекомендую прочитать оригинальную версию на английском языке, она тоже доступна бесплатно здесь: https://github.com/bitcoinbook/bitcoinbook Если после прочтения оригинала вы тоже ничего не поймёте, то задумайтесь, а надо ли оно вам вообще? Использовать биткоин можно и без знания таких глубинных процессов.

█▀▀▀











█▄▄▄
▀▀▀▀▀▀▀▀▀▀▀
e
▄▄▄▄▄▄▄▄▄▄▄
█████████████
████████████▄███
██▐███████▄█████▀
█████████▄████▀
███▐████▄███▀
████▐██████▀
█████▀█████
███████████▄
████████████▄
██▄█████▀█████▄
▄█████████▀█████▀
███████████▀██▀
████▀█████████
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
c.h.
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
▀▀▀█











▄▄▄█
▄██████▄▄▄
█████████████▄▄
███████████████
███████████████
███████████████
███████████████
███░░█████████
███▌▐█████████
█████████████
███████████▀
██████████▀
████████▀
▀██▀▀
zasad@ (OP)
Legendary
*
Offline Offline

Activity: 1764
Merit: 4312



View Profile WWW
February 03, 2021, 12:29:20 PM
 #7

A-Bolt спасибо. Исправил перевод.
Если что-то еще режет глаз, скажите.


Captain-Cryptory, несли A-Bolt  еще раз глянет, то получится хороший материал для первичного изучения

...AoBT...
▄▄█████████████████▄▄
███████████████████████
█████████████████████████
███████████████████████
██████████████████████
█████████████████████
███████████████████████
██████████████████████
█████████████████████
█████████████████████
█████████████████████████
███████████████████████
█████████████████
The Alliance
of Bitcointalk
Translators
▄▄▄███████▄▄▄
▄███████████████▄
▄███
████████████████▄
▄██
███████████████████▄
▄█
██████████████████████▄
████████████████████████
█████████████████████
████████████████████████
▀███████████████████████▀
▀███████████████████
▀███████████████████▀
███████████████▀
▀▀▀███████▀▀▀
.
..JOIN US..

▄███████████████████████▄
█████████████████████████
█████▀▀██████▀▀██▀▀▀▀████
████████▀██████████
████▄▄▄▄▀███████
███████▄▀▄█▀▀███████
█████████████████████████
█████████████████████████
████████████▀████████████
▀███████████████████████▀
█████

██████████
.
..HIRE US..
A-Bolt
Legendary
*
Offline Offline

Activity: 2317
Merit: 2318


View Profile
February 04, 2021, 01:00:33 PM
 #8

Captain-Cryptory, несли A-Bolt  еще раз глянет, то получится хороший материал для первичного изучения

Глава "Как работают деревья Меркла?" стала нести хоть какой-то смысл, но теперь это уже не чистый перевод Husires, а винегрет из переводов из нескольких источников. Ну, хуже не стало, и ладно.

На хороший материал для изучения указал witcher_sense. Книгу "Mastering Bitcoin" написал профессионал в области IT, а её русский перевод сделан на достаточном для понимания уровне.


Использованный оператор "+"  в состоянии ввести в заблуждение.

Во многих языках, в особенности тех, которые наследуют синтаксис языка C, для конкатенации строк используется оператор "+". Эти языки (С++, Java, JavaScript, C#, Python, Go, Rust) широко распространены и, поэтому, я не представляю, кого может ввести в заблуждение "+", в качестве оператора конкатенации.



Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!