比特币系统数据结构 hash pointers(哈希指针)

哈希指针,对于上一篇文章Merkle tree 做补充啦

哈希指针由两部分组成:

  • 指向一些信息存储的指针
  • 该信息的加密哈希值指针可用于获取信息,哈希值可用于验证信息未更改

在这里插入图片描述

使用散列指针构建的数据结构

哈希指针可用于构建链表,也称为区块链。
在这里插入图片描述

我们应该注意,存储在哈希指针中的哈希是前一个块的整个数据的哈希,其中还包括指向该块之前的块的哈希指针。这使得在不通知他人的情况下篡改区块链中的区块是不可能的。
篡改区块链的明显属性
我们只需要保留指向区块链最后一块的哈希指针即可。然后,当有人稍后显示整个区块链并声称其中的数据未修改时,我们可以通过向后遍历区块并逐个验证哈希来判断链中的任何区块是否被篡改。

说明:

  • 攻击者想要篡改链中的一个区块,比如说区块1。
  • 攻击者由于哈希函数的“无冲突”属性而更改了块1的内容,因此他无法找到与旧哈希具有相同哈希的另一数据。因此,此修改后的块的哈希也已更改。
  • 为了避免其他人注意到不一致,他还需要在下一个块(即块2)中更改该块的哈希指针。
  • 现在,更改了块2的内容,因此要使该故事保持一致,必须更改块3中的哈希指针。
  • 最后,攻击者转到指向区块链最后一块的哈希指针,这对他来说是一个障碍,因为我们保留并记住该哈希指针。

在这里插入图片描述

Merkle tree

Merkle tree是带有哈希指针的二进制树结构。叶子是数据块,树中更远的节点是它们各自子级的哈希。
在这里插入图片描述

特征

  • 篡改显而易见,
    就像区块链一样,我们只需要记住根(顶级节点)中的哈希指针,然后可以遍历任何叶数据块以检查某个节点是否在树中或已被篡改。
  • 遍历效率
    要验证数据块,我们只需要遍历从顶部到数据所在的叶子的路径。因此复杂度为O(log n),与链表链的O(n)相比效率更高。
  • 非成员身份证明
    如果对默克尔树进行排序,我们可以证明给定数据不在树中:如果给定数据之前和之后的数据都在树中并且它们是连续的,则它们之间没有空格,这证明给定的数据不在三分之内。

参考资料

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章