【问题标题】:I'm trying to implement a merkle tree consistency proof, but I'm stuck at understanding the algorithm我正在尝试实现 merkle 树一致性证明,但我坚持理解算法
【发布时间】:2017-05-31 03:41:44
【问题描述】:

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

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 < kb = false 的递归调用中的减法。

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

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

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

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

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

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

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

【问题讨论】:

    标签: algorithm recursion hashtree merkle-tree


    【解决方案1】:

    这本书似乎有错误。 m = nb = true的情况需要分开处理。更详细的算法描述可以在RFC 6962找到。

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

    【讨论】:

    • 这是完美的解决方案。请注意,我还对您的答案进行了编辑,因为我注意到书籍算法中还有其他问题。
    • @Sossenbinder 在您的编辑中您写道:“我想补充一点,本书中显示的 k 的计算不正确。如果使用这个公式,我们会得出在 n=9 的情况下,k 将是 4 而不是 8。” 我认为这不是真的。 n = 9log(n/2) = log(4.5) ≈ 2.17⌈log(n/2)⌉ = 32^⌈log(n/2)⌉ = 8⌈x⌉ceiling function 的符号。
    • 确实,我的计算一定有问题。我使用了天花板,但我可能把括号的位置搞砸了。
    猜你喜欢
    • 1970-01-01
    • 2018-02-20
    • 2011-07-26
    • 2013-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多