Bitcoin and Cryptocurrency Technologies 学习笔记:1.2 Hash Pointer and Data Structure(linked list & BST)

这一节讲解 Hash的另外一个大的用处,构造一些神奇的数据结构以增加不可篡改(tamper)性。总体来说有两类,分别是链表和二叉搜索树的变种,也称之为:

  • block chain
  • Merkle Tree

block Chain

他其实就是一个链表,不过,每一项都保存了前一项的消息摘要,hash值

这里写图片描述

这里面的一个重要的东西是: Hash Pointer,官方的介绍是这样的:

这里写图片描述

就是包含两个信息:

  • 所指向节点的位置
  • 所指向节点的hash值

remark 这里需要解释的是,实现中只要能实现这个功能就行了,并不是说这个hash值既表示前一个的摘要信息,又表示前一个的物理位置

用途

最大的好处就是防止篡改。我们举一个 tamper-evident log 的例子

这里写图片描述

比如说我们更改了第 k (记从左到右分别编号 k , k + 1 , k + 2 )块的data,那么检测第 k + 1 肯定能检测出来,因此敌手势必要将所有块的hash 都更改,最终更改到head hash pointer 上,因此只要我们留有最终的hash pointer,那么就能检测到所有的篡改。

Merkle Tree

这里写图片描述

叶子结点存放的是data,中间节点都是各自的 hash pointer.修改任何一个节点都能被发现。

特点

  • Time: O( l o g N )
  • Space: O( N l o g N )

用途

成员证明(proof of membership)

这里写图片描述

其实也是空间换时间,我们只需记录一条从data到root的路径,那么就能在不超过 O ( l o g N ) 的时间证明。而不用搜索整个 区块链

总结

我们总是可以将 hash pointer 放在没有环的数据结构中,防篡改。但是有环就不行了。

猜你喜欢

转载自blog.csdn.net/dylan_frank/article/details/80200876
今日推荐