JOVANA
Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

哈希与区块的链条

一枚小小的数字指纹,如何把一堆记录变成一条链——让任何想偷改历史的人当场露馅。

给数字数据盖一枚火漆印

很久以前,信封还没有胶水,重要的信件会用一团热蜡封口,再用印戒压上印记。这团蜡做了一件很巧妙的事:要是有人撬开信件再重新封上,封蜡就会裂开,你一眼就能看出它被人动过。封蜡并不能把信锁住——它做的是让篡改变得显眼

密码学哈希就是这枚火漆印的数字版本。你把任意数据喂进去——一句话、一张照片、一整页记录——一套固定的配方就会吐出一串短短的、被打乱的字符:这份数据的指纹。同样的输入永远给出同样的指纹。但只要改动哪怕一个逗号,指纹就会变得截然不同——不是差一点点,而是面目全非。

用前一个区块为每个区块盖章

现在想象一本记录用的笔记本,一次写一页。每一页就是一个区块。让整本笔记本变得诚实的诀窍在这里:在每一新页的最上方,动笔写其他内容之前,你先把上一页的指纹抄下来。每页顶端这段小小的摘要,就叫做它的区块头

于是每个区块都带着它前一个区块的指纹。这些区块不再是一摞散乱的纸页——它们成了一条,每一环都向后伸手,紧紧扣住身后的那一环。这正是 blockchain(区块链)这个词的字面由来。

  Block 1            Block 2            Block 3
+-----------+      +-----------+      +-----------+
| prev: ... |      | prev: H1  |      | prev: H2  |
| data      |      | data      |      | data      |
| hash: H1  |----->| hash: H2  |----->| hash: H3  |
+-----------+      +-----------+      +-----------+
     |                  |                  |
  fingerprint        fingerprint        fingerprint
  of block 1         of block 2         of block 3
每个区块都存着前一个区块的指纹,于是区块们环环相扣成一条链。

为什么你没法悄悄改写过去

封印的价值就体现在这里。假设有个骗子想回头去改区块 1 里埋着的一条记录——改个数字、抹掉一笔付款。他一动手编辑区块 1,它的数据就变了,于是它的指纹也跟着变了。可是区块 2 在自己的头部里抄下的,是区块 1 的指纹。现在两者对不上了。封印裂开了。

为了掩盖这道裂缝,骗子就得拿新指纹去更新区块 2。可这又改变了区块 2 自己的指纹——而那个指纹区块 3 早就记下了。再往后还有区块 4。要改写张旧页,你就必须偷偷把它之后的每一张页全部重做一遍,一路追到当下,还得比其他所有人不停添加新页的速度更快。在一个繁忙的网络上,这几乎不可能。

证明你确实在某个区块里的那张收据

单个区块可以容纳成千上万条记录。这些记录不是被整堆算成一个指纹,而是两两配对算指纹,再把配对算到一起,如此层层向上堆成一座小金字塔,直到塔尖只剩一个指纹。这座由哈希堆成的金字塔,就是默克尔树,而塔尖那唯一的指纹,正是区块头所携带的东西。

            ROOT  (one fingerprint in the header)
           /    \
        H12      H34
       /   \    /   \
     H1    H2  H3    H4
     |     |   |     |
     r1    r2  r3    r4    (your record is r3)
记录两两算哈希,一路向上汇成塔尖那一个根指纹。

美妙的回报在于:要证明你的记录 `r3` 确实在这个区块里,你并不需要全部上千条记录。你只需要一张短短的收据——沿着金字塔向上那条路上的几个指纹——任何人都能据此一路重算到塔尖,核对它是否与区块头吻合。寥寥几个指纹,就替整个区块作了证。

你现在掌握了什么

  1. 哈希是一枚一改就露馅的指纹:相同数据进去,得出相同指纹;改动任何东西,指纹就彻底变样。
  2. 每个区块的头部都带着前一个区块的指纹,把区块们串成一条链。
  3. 改动一个旧区块会弄裂它之后的每一道封印,所以越早的历史实际上越被冻结。
  4. 默克尔树把整个区块浓缩成一个根指纹,于是一张小小的收据就能证明你的记录在里面。

你现在已经握住了区块链运转的机械内核。接下来我们要认识那些密钥——它们让你能把记录签为真正属于你的——这样链条不只是诚实地记住过去,还知道谁有资格写下一页。