Satoshi Nakamoto:比特币——一种点对点式的电子现金系统
根據您提供的「比特币:一种点对点电子货币系统」(即比特幣白皮書)摘要與正文,這份文件主要論述並提出了一個無需依賴信任機構即可進行電子支付的系統。以下是文件中的主要論點及其詳細解釋:
1. 傳統電子支付系統的局限性:依賴信任模型
文件開頭即指出,現有的網際網路貿易幾乎完全依賴金融機構作為受信任的第三方來處理電子支付。儘管這種系統在許多情況下運作良好,但其核心缺點在於基於「信任」的固有性質。由於需要金融機構介入仲裁糾紛,完全不可撤銷的交易難以實現。這種仲裁機制增加了交易成本,使得小額日常交易在經濟上不可行。此外,由於存在交易被撤銷的可能性,商家需要對客戶保持警惕,要求提供更多資訊,並將一定比例的欺詐損失視為不可避免。雖然實體貨幣交易可以避免這些問題,但在通訊通道上進行支付時,引入一個受信任的中介似乎是必需的。
核心問題:
* 依賴受信任第三方: 所有交易都必須通過一個中央機構。
* 交易可撤銷性: 無法保證交易的最終性,存在被撤回的風險。
* 高交易成本: 仲裁和處理成本限制了小額支付的可能性。
* 隱私與信任問題: 商家需要更多客戶信息以防欺詐,信任需求廣泛。
2. 提出的解決方案核心:基於密碼學而非信任的點對點系統
文件提出了一個全新的電子支付系統,其設計理念是允許任何有意願進行交易的雙方直接互動,而無需受信任的第三方介入。這個系統的基礎是密碼學原理,而非信任。通過使用密碼學方法,交易在計算上變得不可撤銷,這為賣家提供了防止欺詐的保護。文件旨在描述一個具體的實現機制來達成這一目標。
解決方案基礎:
* 點對點(Peer-to-Peer): 交易直接在參與者之間進行,沒有中央伺服器或機構。
* 基於密碼學: 系統的安全性由密碼學原理(如數位簽章、雜湊函數)而非信任機制來保證。
* 計算上的不可撤銷: 一旦交易被確認,幾乎不可能修改或撤回。
3. 電子貨幣的定義與雙重支付問題
在提出的系統中,一枚電子貨幣被定義為一系列數位簽章的鏈。每一任擁有者都通過將上一次交易和下一個擁有者的公鑰的雜湊值進行數位簽章,並附加到貨幣的末尾,從而將其轉移給下一個擁有者。收款人可以通過驗證數位簽章來確認貨幣的所有權鏈。
然而,這種單純的數位簽章鏈並不能解決「雙重支付」(Double-Spending)問題。雙重支付是指同一枚貨幣被多次花費。在傳統模型中,中央機構(如鑄幣廠或銀行)通過追蹤所有交易來防止雙重支付,確保每一枚發行的貨幣只被花費一次。但在點對點系統中,沒有中央機構,如何確保之前的擁有者沒有對同一枚貨幣簽署多個交易給不同的人?
核心挑戰:
* 雙重支付: 如何防止同一枚電子貨幣被花費兩次或更多次,這是點對點電子支付系統最關鍵的技術難題。
* 缺乏中央權威: 在沒有中央機構追蹤交易記錄的情況下,如何達成共識確認哪一筆交易是合法的「第一次」支付。
為了解決雙重支付問題,收款人需要一種方法來確認之前的擁有者沒有簽署任何更早的交易。唯一的方法是知曉所有過去的交易歷史。在沒有受信任方的情況下,這意味著所有交易必須被公開廣播,並且所有參與者需要對交易被接收的順序達成一個單一的、所有人認可的歷史記錄。
4. 使用時間戳伺服器與工作量證明解決雙重支付
為了解決雙重支付問題並在沒有中央機構的情況下建立一個可信賴的交易歷史序列,文件提出了結合「時間戳伺服器」和「工作量證明」的方案。
-
時間戳伺服器: 概念上,時間戳伺服器的工作是為一系列資料項(在比特幣中是交易組成的區塊)計算一個雜湊值,並將其廣泛發布(例如在報紙或新聞組中)。這證明了這些資料在當時是存在的。更進一步,每個時間戳的雜湊值都包含上一個時間戳的雜湊值,從而形成一個時間戳鏈。這個鏈提供了一個證明,證明鏈中的資料項按照特定的順序存在於特定的時間點。
-
工作量證明(Proof-of-Work, PoW): 文件指出,簡單地發布雜湊值到報紙等不可靠,需要一個更強健的點對點機制。這裡引入了工作量證明。工作量證明要求尋找一個特定的數值(稱為 Nonce),將其與區塊中的其他資料(包括上一個區塊的雜湊值和交易列表)一起進行雜湊運算後,得到的雜湊值符合特定的難度要求(例如,以數個零開頭)。尋找這個 Nonce 需要大量的計算(CPU 算力),但驗證它只需要執行一次雜湊運算。
如何結合解決問題:
* 將交易打包成區塊: 新的交易被收集到一個「區塊」中。
* 對區塊應用工作量證明: 節點(礦工)通過尋找合適的 Nonce 來為其區塊完成工作量證明。
* 形成區塊鏈: 一旦一個節點找到了符合條件的 Nonce,它就向全網廣播這個區塊。區塊包含了上一個區塊的雜湊值,從而將其鏈接到之前的區塊鏈上。這形成了一條由區塊構成的鏈,每個區塊都包含前一個區塊的雜湊值和一批新的交易。
* 時間戳與順序: 通過將區塊的雜湊值納入下一個區塊,並利用工作量證明來確定區塊的生成順序,這條鏈有效地為交易歷史打上了時間戳,並確定了交易的順序。
5. 「最長鏈」規則與共識機制
點對點網路中可能出現多個節點同時找到工作量證明並廣播自己的區塊,導致出現暫時的分叉。為了解決這個問題並達成全網對唯一交易歷史的共識,文件提出了「最長鏈」規則。
- CPU 算力即投票權: 工作量證明機制巧妙地將「投票」從基於 IP 地址轉變為基於 CPU 算力。擁有更多 CPU 算力的節點,平均而言,更有可能首先找到下一個區塊的工作量證明。
- 最長鏈代表共識: 網路中的節點始終認可並在「最長」的工作量證明鏈上工作和擴展。最長的鏈被認為是「正確的」,因為它代表了最多總體的計算工作量投入。
- 抵禦攻擊: 如果大多數的 CPU 算力由誠實的節點控制,誠實的鏈將會比攻擊者的鏈增長得更快。攻擊者若想修改過去的某個區塊(例如,撤銷一筆支付以實現雙重支付),他不僅需要重做該區塊的工作量證明,還必須重做其後所有區塊的工作量證明,並且必須以比所有誠實節點加起來更快的速度完成這一切才能趕上並超越誠實鏈。文件在計算部分證明了,隨著後續區塊的增加(即交易獲得更多確認),攻擊者成功的概率呈指數級下降。這使得交易在獲得足夠多的確認後,在計算上變得幾乎不可修改。
- 難度調整: 工作量證明的難度會根據網路的總算力進行調整,目標是維持區塊生成的平均速度(約每十分鐘一個區塊),以此平衡硬體發展和不同時期參與者的利益。
核心機制:
* 工作量證明鏈: 一條由區塊通過雜湊值鏈接起來的鏈,每個區塊都包含了證明其耗費計算資源(工作量證明)的證據。
* 最長鏈規則: 網路共識機制,所有節點遵循並擴展投入最多計算資源的那條鏈。
* 安全基礎: 只要誠實節點控制了大多數的 CPU 算力,攻擊者就難以製造出比誠實鏈更長的鏈,從而無法篡改交易歷史。
6. 網路架構與健壯性
比特幣網路的設計力求簡潔和健壯。
- 廣播機制: 新的交易和區塊被盡力廣播到網路上所有節點。即使訊息沒有到達所有節點,只要到達一部分,它們最終會被包含在區塊中並在網路中傳播。
- 容錯性: 網路能容忍節點暫時離線或訊息丟失。如果一個節點錯過了某個區塊,它會在收到後續區塊時發現鏈條不連續,然後會請求丟失的區塊。
- 無需認證: 節點不需要被認證,因為訊息是廣播的,不是指向特定接收者。
- 自由加入與離開: 節點可以隨時加入或離開網路,重新加入時只需下載並驗證最長的工作量證明鏈,即可了解網路的狀態。
7. 激勵機制
為了鼓勵節點投入計算資源維護網路安全和處理交易,系統設計了激勵機制。
- 區塊獎勵(鑄幣): 每個成功找到區塊工作量證明的節點(礦工)被允許在該區塊的第一筆交易中為自己創造一定量的新貨幣。這提供了一種去中心化的貨幣發行方式,並激勵節點參與挖礦。
- 交易費用: 交易的發起者可以選擇支付一筆交易費用(交易輸出總額小於輸入總額的差額)。這筆費用會歸屬於將該交易打包進區塊的礦工。當預定數量的貨幣全部發行完畢後,交易費用將成為礦工唯一的收入來源,這也有助於防止通膨。
這些激勵措施旨在使參與維護網路的誠實行為比破壞網路更有利可圖。如果一個攻擊者擁有足夠的算力進行雙重支付攻擊,他將面臨選擇:是將算力用於欺詐以拿回已支付的錢,還是將算力用於遵守規則挖礦賺取新的貨幣和交易費用。由於遵守規則挖礦可以持續獲得獎勵,通常這比單次或有限次的雙重支付嘗試更具經濟吸引力,尤其當攻擊可能導致整個系統(包括攻擊者自身持有的貨幣價值)崩潰時。
8. 提高效率的機制
- 默克爾樹(Merkle Trees): 為了處理交易歷史記錄不斷增長導致的儲存空間問題,文件提出使用默克爾樹。區塊中的所有交易被哈希成一個默克爾樹,區塊頭只包含樹的根雜湊值。這允許舊區塊中的交易被裁剪,而無需破壞區塊頭的哈希值,因為根雜湊值已經包含了所有交易的簡潔證明。這大大減少了驗證區塊完整性所需的儲存空間。
9. 簡化的支付驗證(SPV)
並非所有使用者都需要運行一個完整的節點並下載所有交易歷史。文件描述了一種「簡化支付驗證」(Simplified Payment Verification, SPV)的方法。
- SPV 工作原理: 用戶只需保留一份最長工作量證明鏈的區塊頭副本。當收到一筆支付時,他向網路中的其他節點查詢,以下載鏈接到該交易的默克爾分支。通過驗證鏈接到其交易的默克爾分支與其所在區塊的根哈希值是否一致,以及該區塊頭是否位於最長的鏈上,用戶可以在不處理所有交易的情況下驗證該交易已被網路接受並確認。
- SPV 的局限性: SPV 的安全性依賴於誠實節點控制著最長的鏈。如果攻擊者控制了多數算力並製造了一條更長的偽造鏈,SPV 用戶可能會被欺騙。文件提到一種應對策略是接收網路節點發出的無效區塊警告。對於經常接收支付的企業,運行完整的節點仍提供了更高的安全性和更快的確認速度。
10. 隱私考慮
雖然所有交易是公開廣播的,但系統通過其他方式保護隱私。
- 匿名公鑰: 交易被連結到公鑰而非個人身份。公眾可以看到一定數量的貨幣從一個公鑰發送到另一個公鑰,但無法直接將這些公鑰與真實個人聯繫起來。這類似於證券交易所的交易行情,顯示交易時間和數量,但不顯示交易雙方是誰。
- 使用新公鑰對: 文件建議對每筆新的交易使用新的公鑰對作為額外的防火牆,以防止交易被輕易關聯到同一個擁有者。然而,由於多輸入交易(一個交易使用多個來自過去交易的輸入作為資金)的存在,某些關聯性是不可避免的,因為這些輸入必然屬於同一個擁有者。
11. 安全性(計算分析)
文件最後提供了一個量化的安全分析,計算攻擊者試圖發起雙重支付(即創建一條包含替換交易的平行鏈並試圖使其超越誠實鏈)的成功概率。這個問題被類比為「賭徒破產」問題,使用二項隨機漫步模型。分析結果表明,攻擊者從落後誠實鏈一定數量的區塊(即交易獲得了一定數量的確認)後趕上的概率隨落後區塊數呈指數級下降。這數學上證實了為什麼等待足夠多的確認(例如 6 個區塊)可以使得交易的安全性變得非常高。即使攻擊者擁有相當比例的算力,成功進行雙重支付的概率也會迅速變得微乎其微。
總結
比特幣白皮書的核心貢獻在於提出了一個巧妙的組合機制,將現有的密碼學技術(數位簽章、雜湊函數、默克爾樹)與新穎的概念(工作量證明作為投票機制、最長鏈規則作為共識機制、去中心化發行貨幣)相結合,成功解決了在沒有中央信任機構情況下的雙重支付問題,從而實現了一個真正點對點的電子現金系統。這個系統的安全性基於參與者投入的計算能力,只要大多數算力被誠實的節點控制,系統就能安全運行,交易記錄將是公開、可驗證且在計算上難以篡改的。
comments
comments for this post are closed