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. 默克爾樹把整個區塊濃縮成一個根指紋,於是一張小小的收據就能證明你的紀錄在裡面。

你現在已經握住了區塊鏈運轉的機械內核。接下來我們要認識那些金鑰——它們讓你能把紀錄簽為真正屬於你的——這樣鏈條不只是誠實地記住過去,還知道誰有資格寫下一頁。