PKU-Blockchain - Lecture 1

Cryptographic Hash Function

Collision resistance:抗碰撞性,现有算力无法支持人们找到 $x \neq y \Rightarrow H(x) = H(y)$。

hiding:哈希结果可以很好的隐藏明文的特征,现有算力几无法支持人们从 $H(x)$ 得到 $x$。

20241128171217

puzzle friendly:$z$ 作为 $H$ 的某次输出。若想找到 $c$ 使得 $H(c) = z$,是几乎不可能的。此时去寻找 $c$ 使得 $H(c) = z$ 的这一类问题变成一个 puzzle
在区块链中,对于给定的 $target$,现需要找到一个 block header 使得 $H(block \ header) \leq target$。此时若某人完成了这个任务,那么他一定花费了很多精力(不可能是随便猜的)。 puzzle friendly 提供了工作量证明

20241128171620

Bitcoin 使用的密码学哈希函数是 SHA256

Hash Pointer

哈希指针:不光记录指前一个块的起始地址,还记录着前一个块的哈希值。

区块链就是一个使用了哈希指针来链接起来的链表。

20241129160543

20241129212704

下图中不指向其他块的区块也称创世区块(genesis block)。
使用哈希指针的好处是:只需要检查最后一个块的哈希指针,即可确定前面的块中是否有被篡改的可能。实现了 tamper-evident log

20241129160839

Bitcoin 用到的数据结构是 Merkle tree

20241129161342

proof of membership

轻节点:只保留 block header,不保留 block body(具体交易的列表)
红色的Hash:全节点返回的 merkle proof
当需要验证某笔交易的真实性,只需要根据这个交易的哈希值与全节点返回的 merkle proof,向上计算,最后对比计算出来的根哈希值与自己保留的根哈希值是否相同即可。整体时间复杂度为 $O(\log n)$。

20241129161817

proof of nonmembership

复杂方法:将整棵树传给轻节点,让轻节点来验证整棵树的结构是否正确(对比计算出的根哈希值与自己保留的根哈希值)。整体复杂度为 $O(n)$。

Improvement:按照哈希值进行 block 的排序(存储时就按排序后的顺序)构建 sorted merkle tree ,对想证明不存在的交易的哈希值进行二分查找。首先找不到,进而对其左右相邻的块进行验证(发给轻节点),若计算出来的根哈希值与自己保留的根哈希值相同,即可证明 nonmembership。整体复杂度为 $O(\log n)$。

20241129162928

作者

Zylll

发布于

2024-11-28

更新于

2024-12-02

许可协议