Корень меркле

Корень меркле

I have a merkle tree. The elements of this tree are in sorted order, so that anyone can create a proof that something isn’t in the tree. So far, so good.

However, I also want to be able to add and remove elements from the tree. If I use a normal merkle tree, I have to recompute most of the tree. For example, I have the following merkle tree:

                    395              /                     \            85                       310        /        \               /        \      23          62          137          172     /  \        /  \        /   \        /   \ 1    22    23    39    60     77    82     91 

(I’m using addition for the hash function, as an example.)

I insert 50 to the middle of the merkle tree.

                               445                           /                  \                        354                    91              /                     \           \            85                       269         91        /        \               /        \       \      23          62          110          159     91     /  \        /  \        /   \        /   \     \ 1    22    23    39    50     60    77     82    91 

Every merkle branch after the 50 changed. I had to run the hash function 5 times. This would get pretty unwieldy for very big merkle trees.

I’m looking for a merkle tree with these properties:

  1. Fast. I shouldn’t need to recompute the entire thing (or half of the entire thing) to insert or remove something from the middle.

  2. Authentic. If I have a merkle root, there should be only one tree that corresponds to that merkle root. Changing any part of the tree should cause the validation to fail.

  3. Deterministic. (Optional) This is essentially the opposite of the previous statement. If I take the elements out of a merkle tree, and build a new merkle tree from those elements, I should get the same root hash.

  4. Proof of existence. Someone with enough of the tree should be able to make a proof that an element is in the tree, if that element is in the tree. This proof should be reasonably small.

  5. Proof of non-existence. Someone with enough of the tree should be able to make a proof that an element is not in the tree, if that element is not in the tree. This proof should be reasonably small.

У меня есть дерево Меркле.Элементы этого дерева расположены в отсортированном порядке, так что любой может создать доказательство того, что чего-то нет в дереве.Все идет нормально.

Однако я также хочу иметь возможность добавлять и удалять элементы из дерева.Если я использую нормальное дерево Меркле, мне придется пересчитать большую часть дерева.Например, у меня есть следующее дерево Merkle:

          395         /           \        85            310      /    \        /    \     23     62     137     172     / \    / \    /  \    /  \ 1  22  23  39  60   77  82   91 

(Я использую дополнение для хеш-функции, в качестве примера.)

Я вставляю 50 в середину дерева меркла.

                445                /         \              354          91         /           \      \        85            269     91      /    \        /    \    \     23     62     110     159   91     / \    / \    /  \    /  \   \ 1  22  23  39  50   60  77   82  91 

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

Я ищу дерево Merkle с этими свойствами:

  1. Быстро.Мне не нужно пересчитывать всю вещь (или половину всей вещи), чтобы вставить или удалить что-то из середины.

  2. Аутентичные.Если у меня есть корень Merkle, то должно быть только одно дерево, которое соответствует этому корню Merkle.Изменение любой части дерева должно привести к сбою проверки.

  3. Детерминированный.(Необязательно) По сути это противоположно предыдущему утверждению.Если я возьму элементы из дерева мерклей и построю новое дерево мерклов из этих элементов, я должен получить тот же самый хэш.

  4. Доказательство существования.Кто-то, у кого достаточно дерева, должен иметь возможность доказать, что элемент находится в дереве, если этот элемент находится в дереве.Это доказательство должно быть достаточно маленьким.

  5. Доказательство небытия.Кто-то, у кого достаточно дерева, должен иметь возможность доказать, что элемента нет в дереве, если этого элемента нет в дереве.Это доказательство должно быть достаточно маленьким.



Источник: bitcoin.stackovernet.com


Добавить комментарий