我正在尝试实现merkle树一致性证明,但我坚持理解算法

时间:2017-01-16 10:17:51

标签: algorithm recursion hashtree merkle-tree

我正在尝试用本文实现merkle树一致性算法:

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,新树的叶子为向量Etrueb

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

E现在有2个元素,因此n = 2

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

如果m = n && b = falsem不相等,我们不属于n

k现在再次被计算为2,因为上限正在将1/2log2(n)/2更正为1

我们属于m <= k情况,我们再次以递归方式调用具有完全相同参数的函数。现在我们处于无限循环中。

然而,我似乎无法弄清楚我做错了什么。我觉得k计算中的上限就是问题所在。它基本上不可能离开循环,因为k在一些迭代后似乎总是高于m

对我的错误有什么建议/暗示吗?

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

但是,我仍然无法弄清楚要使其与偶数一起使用会发生什么样的变化。

1 个答案:

答案 0 :(得分:2)

书中似乎有一个错误。需要单独处理m = nb = true的情况。可以在RFC 6962中找到更详细的算法描述。

以下是解决问题的方法:

enter image description here