1

正如文章所建议的那样,我理解使用 Merkle 树来识别数据中的不一致背后的想法

从本质上讲,我们使用递归算法从我们要验证的根向下遍历,并跟踪存储的哈希值与服务器不同的节点(具有可信哈希值),一直到不一致的叶子/数据块。

如果只有一个这样的块(叶子)被损坏,这意味着我们沿着一条路径向下到叶子,即 log(n) 查询。

但是,在多个不一致的数据块/叶子的情况下,我们最多需要 O(n) 个查询。在极端情况下,所有数据块都损坏了,我们的算法需要将每个节点发送到服务器(身份验证器)。在现实世界中,由于网络,这变得昂贵。

所以我的问题是,对基本的从根遍历算法有什么已知的改进吗?我能想到的一个可能的改进是查询中间节点的级别。例如,在下面的树中,我们向服务器发送第二层的两个节点('64' 和 '192'),对于任何返回不一致的节点,我们递归地转到该子树的中间层 -类似于基于高度的二进制搜索。

在此处输入图像描述

这将我们的最佳情况时间从 O(1) 增加到 O(sqrt(n)),并且可能在一定程度上减少了我们最坏情况的时间(我还没有计算出多少)。

我想知道是否有比这更好的方法?我尝试在 Google Scholar 上搜索相关文章,但看起来大多数以算法为中心的论文都涉及 merkle-tree 遍历问题,这与上述问题不同。

提前致谢!

4

0 回答 0