區塊鏈如何運作
區塊鏈是一份共享的紀錄,由成千上萬台電腦各自複製並取得共識,其建構方式讓舊的條目無法被悄悄竄改。
每個雜湊都由該區塊的資料,加上前一個區塊的雜湊計算而成。更改任何區塊,或竄改區塊 2,其後的每個區塊都會不再吻合。
區塊鏈完整。每個區塊都指回正確的指紋,因此沒有任何區塊被標記。
在繼續閱讀之前,先看看上方那條鏈。每一個區塊都儲存了一段關於它自身內容的簡短指紋(也就是它的雜湊),而且它還儲存了它前一個區塊的雜湊,這正是把各個區塊串連成一條鏈的關鍵。竄改區塊 2,它的指紋就會改變,於是區塊 3 和區塊 4 就不再與它們所承接的前一個區塊相符,並亮起顯示為損壞。現在,想像一本巨大的筆記本,記錄了有史以來的每一筆付款,再想像有成千上萬台電腦,各自保有一份完全相同的副本。沒有任何銀行擁有那份主檔,沒有任何一個人能伸手進去更改任何一行,而且每個人都能查核自己的副本是否與其他所有人的相符。這就是區塊鏈。這個名字是字面上的意思:它是一條由區塊組成的鏈,其中每個區塊是一批交易,而這些區塊按順序串連起來。你不需要任何程式設計知識就能理解它。你只需要對一本很難偽造的共享筆記本有清楚的圖像,而本單元接下來的內容,會一步一步把這幅圖像建立起來。
一份共享、僅可新增的紀錄
先從那本筆記本說起。它不是由一家銀行保管,而是由成千上萬台電腦(稱為節點)各自保有自己那份最新的副本。這就是「分散式」的意思,而它為你換來兩樣好處。
第一,沒有單一一份副本可供駭入、扣押或遺失。如果某個節點離線,這份紀錄仍然存活在其他每一台機器上,因此沒有一個中心點可供攻擊。
第二,這份紀錄是僅可追加的。你可以在末端新增條目,但你無法悄悄刪除或改寫舊的條目,因為其他每一份副本都會立刻與你意見相左。這就是為什麼人們稱區塊鏈為一份共享的真相來源:不是因為某個權威機構保證了它,而是因為成千上萬份獨立的副本必須取得一致。
區塊如何串連成一條鏈
新的交易會被收集起來,捆綁成一個區塊。在網路接受那個區塊之前,它會依據規則對區塊進行檢查:這些幣是真的嗎?發送方是否真的擁有它們?簽名是否有效?唯有通過這些檢查,區塊才會被加到鏈的末端。
巧妙之處在於一個區塊如何連上下一個。每一個區塊都會把它的內容送進一個雜湊,也就是一個把任何數據轉換成一段簡短、固定長度指紋的數學函式。接著,每一個新區塊都會儲存它緊鄰前一個區塊的指紋。因此,區塊 100 帶著區塊 99 的指紋,區塊 99 帶著區塊 98 的指紋,而這樣的引用一路回溯到最開頭的第一個區塊。這些區塊靠這些指紋彼此串連,而這樣的串連,正是讓整段歷史一經竄改即可察覺的關鍵(你稍後就會明白原因)。
由誰決定下一個區塊是哪一個
如果沒有人在主導,那成千上萬個節點要如何就下一個區塊取得一致?它們遵循一套共識機制,也就是一本用來決定由誰來添加下一個區塊的共享規則手冊。你最常聽到的兩種是工作量證明與權益證明。
在工作量證明(由比特幣採用)中,一種稱為礦工的特殊節點會競相解開一道困難的數學謎題。解開它需要真實的電力與運算能力,而第一個解開的礦工,便贏得添加下一個區塊並領取獎勵的權利。
在權益證明(由以太坊自 2022 年起採用)中,並沒有解謎的競賽。取而代之的是,驗證者鎖定自己的一部分資本作為押金,稱為質押,而系統挑選由誰來添加下一個區塊時,一部分靠隨機、一部分則看其質押的規模有多大。任何被抓到作弊的人,都可能被沒收那筆質押。
兩種做法都以同一個手法達成同一個目標,也就是在沒有中央老大的情況下取得誠實的共識:它們讓作弊變得昂貴。
為何這份紀錄如此難以偽造
有三樣東西層層疊加,使得區塊鏈非常難以造假。
- 雜湊串連。 哪怕只更改一筆舊交易,那個區塊的指紋就會改變,進而破壞它之後每一個區塊裡的引用。竄改藏不住,它會亮起來。
- 分散式副本。 你偽造的版本必須同時駁倒成千上萬份誠實的副本,而多數方獲勝。
- 攻擊的成本。 要真正改寫近期的歷史,攻擊者需要控制網路中一半以上的運算算力或質押,重做所有受影響的工作,並且跑贏其他所有人的總和。這就是著名的 51% 攻擊,而在一個大型網路上,它昂貴到通常不值得一試。
留意這裡真正起作用的是什麼。安全並非來自一名受信任的守衛盯著這本帳本。它來自讓不誠實所付出的代價,超過它所能賺到的任何好處。
逐步走一遍被竄改的區塊
想像一條由 5 個區塊組成的短鏈。區塊 2 記錄了一筆從 Alice 支付給 Bob 的 50 枚幣的付款。這些區塊彼此串連,使得區塊 3 儲存區塊 2 的指紋、區塊 4 儲存區塊 3 的指紋、區塊 5 儲存區塊 4 的指紋。
- 你試圖作弊,把區塊 2 改成 Alice 付給你 5,000 枚幣。
- 你一改變區塊 2 的內容,區塊 2 的指紋就立刻改變。
- 現在,區塊 3 所儲存的「前一個指紋」不再與真正的區塊 2 相符,於是區塊 3 損壞了,區塊 4 和區塊 5 也一樣。
- 要讓這場偽造站得住腳,你必須為區塊 2、3、4、5 重新計算出有效的工作量,並且做得比整個誠實網路延伸真正那條鏈的速度還快。在一個大型網路上,這需要一半以上的全部算力(也就是一場 51% 攻擊),其代價高到令人卻步。
這單獨一次的更改並沒有藏住。它連鎖擴散到之後的每一個區塊,把自己暴露出來。這種連鎖擴散,正是為何區塊鏈在實務上被稱為不可竄改的核心所在。
工作量證明對比權益證明,並排來看
兩種機制回答的是同一個問題(由誰來添加下一個區塊,以及我們為什麼該信任他們?),但它們為此付出不同的資源。
| 工作量證明 | 權益證明 | |
|---|---|---|
| 由誰添加區塊 | 競相解謎的礦工 | 一部分隨機、一部分依質押挑選出的驗證者 |
| 參與的成本 | 電力與運算能力 | 鎖定作為押金的資本 |
| 何者遏止作弊 | 你會浪費掉的能源與硬體 | 失去你所投入的質押 |
| 由誰採用 | 比特幣 | 以太坊(自 2022 年起) |
以太坊在 2022 年 9 月 15 日一次名為 the Merge 的升級中,從工作量證明切換到權益證明。這項改變讓網路的能源使用量減少了約 99.95%,因為驗證者不再需要為了競相解謎而燃燒電力。兩種設計仍然達成同一個結果,也就是在沒有中央權威的情況下取得誠實的共識,因此在兩者之間的選擇,主要是能源成本與安全性由何種方式支撐之間的取捨。
雜湊究竟是什麼
雜湊不過是一個函式,它接收任何輸入(一個句子、一整個區塊、一整本書),並回傳一段簡短、固定長度的指紋。有兩個實用的特性,讓它非常適合用於區塊鏈。
- 相同的輸入永遠產生相同的指紋,因此任何人都能重新計算並加以查核。
- 哪怕只是稍微改變輸入,也會產生一段完全不同的指紋,與原本那段毫無相似之處。
第二個特性,正是竄改藏不住的原因。如果一個不誠實的行為者更改了某個舊區塊裡的一個字元,重新計算出的指紋,會與儲存在下一個區塊裡的那段毫無相似之處,而這種不相符,對每一份誠實的副本而言都一目了然。這段指紋不會告訴你區塊裡面裝了什麼,你也無法把它倒著跑來還原出原始數據。它只讓每個人得以確認:這些數據自從被記錄下來之後,並未發生改變。
快速知識檢核
對區塊鏈而言,「僅可追加」是什麼意思? 你可以在紀錄的末端新增條目,但你無法悄悄刪除或改寫既有的條目,因為這本帳本的其他每一份副本,都會與你更改過的版本意見相左。
個別的區塊如何被串連成一條鏈? 每一個區塊都儲存了它前一個區塊的雜湊(也就是指紋)。這樣的引用一路回溯到第一個區塊,因此更改任何一個舊區塊,都會破壞它之後每一個區塊裡的連結。
為何在一個大型網路上,51% 攻擊如此難以得手? 要改寫近期的歷史,攻擊者需要控制網路中一半以上的算力或質押,重做所有受影響的工作,並且仍然跑贏整個誠實網路。在一條大型鏈上,這昂貴到鮮少值得一試。
資料來源
- NIST, "IR 8202: Blockchain Technology Overview",將區塊鏈定義為一份分散式、僅可追加的帳本,由跨越眾多節點複製的雜湊串連區塊所構成。
- ISO, "ISO 22739: Blockchain and distributed ledger technologies - Vocabulary",說明一個共享的資料庫如何在沒有中央管理員的情況下,跨越眾多節點進行複製與同步。
- bitcoin.org, "Bitcoin: A Peer-to-Peer Electronic Cash System" (Satoshi Nakamoto),說明礦工為何耗費運算能力與能源來添加區塊並賺取獎勵。
- ethereum.org, "Proof-of-stake (PoS)",說明驗證者如何按其質押資本的比例被選出,而該資本可能因作弊而被沒收。
- ethereum.org, "The Merge",關於以太坊在 2022 年 9 月 15 日切換到權益證明,以及約 99.95% 的能源使用量削減。
- bitcoin.org, "Bitcoin: A Peer-to-Peer Electronic Cash System" (Satoshi Nakamoto),關於 51% 攻擊,以及為何在一個大型網路上改寫歷史的代價高到令人卻步。