3

我正在尝试用这篇论文实现一个默克尔树一致性算法:

https://books.google.de/books?id=CokSDQAAQBAJ&lpg=PA147&dq=merkle%20consistency%20proof&hl=de&pg=PA148#v=onepage&q&f=false

但是,我有点卡在一致性检查上,因为当我执行 ConsProofSub 部分时,我总是陷入无限循环。

例子:

新树有8,老树有7叶子。

通过前面的函数,我获得m = 7了新树的叶子作为向量Etrue作为b

该函数遍历递归代码流,直到我们到达这种情况:

E 现在有2元素,所以n = 2.

m = 1, 由于之前在递归调用中的减法m < k, 以及b = false.

我们不属于m = n && b = falseif、asmn不相等。

k现在再次计算为 ,2因为上限正在校正1/2log2(n)/2到的结果1

我们陷入了这种m <= k情况,再一次,我们用完全相同的参数递归地调用函数。现在我们处于无限循环中。

但是,我似乎无法弄清楚我做错了什么。我觉得k计算中的上限是问题所在。它基本上使它不可能跳出循环,因为k似乎总是比m经过一些迭代后要高。

对我的错误有任何建议/提示吗?

编辑:有趣的是,当 n 为奇数时,该算法似乎可以完美运行。它似乎只对偶数失败。我刚刚用一棵 7 片叶子的新树进行了尝试,它就像一个魅力,提供了证明一致性所需的正确节点。

但是,我仍然无法弄清楚必须进行哪些更改才能使其适用于偶数。

4

1 回答 1

2

书上好像有错误。案情何时m = nb = true需要分别处理。更详细的算法描述可以在RFC 6962中找到。

以下是您可以解决的方法:

在此处输入图像描述

于 2017-01-16T21:50:04.327 回答