比特幣是什麼?讓發明人中本聰的論文告訴你(下)

白皮書的內容為當初中本聰建構比特幣時的架構,現今的比特幣系統與白皮書有部分出入,詳情可參考比特幣網站及相關論壇。
評論
REUTERS/Jim Urquhart
REUTERS/Jim Urquhart
評論

原文《比特幣:端對端電子現金系統(Bitcoin: A Peer-to-Peer Electronic Cash System)II》 刊登於 Medium,INSIDE 獲授權轉載。譯者林聖祐,準資科所學生,期盼能透過資料認識世界,用資料改變世界。

Photo credit: 林聖祐

隨著比特幣今年暴漲,開始看到有更多人對用區塊鏈技術實現的加密貨幣產生興趣,所以就趁著連假把比特幣發明人 -- 中本聰 於 2008 年發表的 比特幣白皮書 重新翻譯,提供給大家參考!此篇為論文的後半部分,前半部分在 上一篇

白皮書的內容為當初中本聰建構比特幣時的架構,現今的比特幣系統與白皮書有部分出入,詳情可參考 比特幣網站 及相關論壇。

若內容有任何錯誤或疑問,非常歡迎大家指正及回饋:)

《Bitcoin: A Peer-to-Peer Electronic Cash System》

— Satoshi Nakamoto

七、 回收磁碟空間(Reclaiming Disk Space)

當一個貨幣的最新交易被整合進足夠數量的區塊中,則可丟棄在此交易之前的資料以節省磁碟空間。為了不破壞區塊的 hash,交易資訊會被 hash 至一顆 Merkle Tree 中,且只有根包含在區塊 hash 中。舊的區塊接著可藉由去除樹的分支來壓縮,內部的 hash 也不需要被保存。 


▲回收磁碟區(Reclaiming Disk Space)

不含交易資訊的區塊標頭(header)約為 80 bytes,假設每十分鐘產生一個區塊,則一年需要 80 bytes * 6 * 24 * 365 = 4.2 MB。由於 2008 年販售的電腦系統搭載 2GB 的 RAM,且 Moore’s law 預測每年可成長 1.2 GB,因此,即便區塊標頭必須被保存在記憶體中也不會是問題。

八、簡化的支付驗證(Simplified Payment Verification)

不運行整個網路的節點來驗證支付是可行的,使用者只需要保存最長的工作量證明鏈的區塊標頭之備份即可,此備份可藉由不斷詢問網路節點直到它被證可為最長鏈來取得,且透過 Merkle Tree 的分支鏈結上被加上時間戳記且被整合進區塊的交易。使用者本來無法自行驗證交易的有效性,但透過追溯到鏈上的某個位置,使用者就可以看到網路上的節點曾經接受交易,且在之後加上的區塊更進一步證明了整個網路曾經接受交易。


▲簡化的支付驗證(Simplified Payment Verification)

因此,只要誠實的節點控制了網路,驗證機制就會是可靠的。但若攻擊者擁有過多運算能力的話,驗證機制就會變得較脆弱。因為網路節點可以自己驗證交易,一旦攻擊者持續掌控了整個網路,這樣簡易的驗證方法將會被攻擊者所產生的交易欺騙。為了避免這樣的情況發生,當網路節點偵測到無效的區塊時就會發出警報,並提示使用者的軟體去下載整個區塊以及被警告有問題的交易來對資訊的前後不一致做判定。對於頻繁接收支付的商業機構而言,可能會為了更獨立的安全性及更快速的驗證而希望能夠運行自己的節點。

九、 幣值的結合與分割(Combining and Splitting Value)

雖然可以個別處理貨幣,但要為每次轉帳的每一顆貨幣都建立一個單獨的交易是很麻煩的。為了讓幣值得以結合及分割,交易將會有許多輸入與輸出。通常會有來自於價值較大的前一個交易之單一輸入或是由許多價值較小的前一個交易共同組成的多重輸入,且輸出最多只會有兩個:一個為支付的費用,另一個為必要時的找零。


▲幣值的結合與分割(Combining and Splitting Value)

值得注意的是,一個交易依賴很多筆交易,而那些交易又依賴更多筆交易,但這不會是一個問題,因為這個工作機制並不需要去展開驗證一個交易的歷史資料。

十、隱私(Privacy)

傳統銀行的模式是藉由限制交易的參與者及信任的第三方取得資訊的權限來達到一定程度的隱私,但若公開發佈所有交易就牴觸了上述的方法,但仍可藉由保持公開金鑰的匿名性來維持隱私。大眾可以看到某人傳了一筆金額給另一人,但卻無法得知這筆交易對應到誰。這和股票交易所釋出的交易資訊是同樣等級的,也就是可以知道交易發生的時間與交易量,但無法得知交易的兩方是誰。

作為額外的預防措施,一對新的金鑰應該讓每筆交易避免被鏈結到同一個擁有者。有些鏈結仍不免為多重輸入的交易,這也代表這些輸入被同一人所擁有,這樣的風險在於一旦擁有者的金鑰被揭露,這些鏈結可能也會同時揭露了來自這個擁有者的其他交易。

十一、計算(Calculations)[註 1]

即便一個攻擊者比誠實鏈更快速產生一條替代的鏈,也無法讓系統變成可任意變更,即無法憑空創造幣值或取得不屬於攻擊者的貨幣。節點不會接受無效的支付交易,所以誠實的節點永遠不會接受包含無效交易的區塊。攻擊者只能試著改變其中一筆最近的交易來取回剛剛支付的貨幣。

可以把誠實鏈和攻擊者的鏈之間的競爭視為 二項隨機漫步(Binomial Random Walk),定義成功事件為誠實鏈延長了一個區塊,使其領先性加 1;失敗事件則是攻擊者鏈被延長了一個區塊,使得差距減 1。

攻擊者由落後迎頭趕上誠實鏈的機率和 賭徒破產問題(Gambler’s Ruin problem) 類似,假設一個擁有無限籌碼的賭徒一開始為赤字狀態,但可能在經過無限次的嘗試後達到收支平衡。我們可以計算出攻擊者收支平衡或趕上誠實鏈的機率:

假設 p > q,則攻擊成功的機率將會隨著攻擊者需要趕上的區塊數量增加而呈指數下降。因為攻擊者的勝算不高,因此,若他沒能幸運的快速成功,則他獲得成功的機會就會隨時間流逝而變得更加微乎其微。

我們現在考慮的是,在一個新交易中充分確定發送者無法竄改交易之前,接收者必須等待多久。我們假設發送者是攻擊者,它讓接收者在一段期間內相信它已經支付款項,接著立刻將支付的款項重新支付給自己。當這個狀況發生時,接收者會收到警報,但攻擊者會希望這個警報為時已晚。

接收者會產生一對新的金鑰,並在簽章之前會立即將公開金鑰傳給發送者,如此能避免以下情況發生:發送者預先準備一條區塊鏈然後持續對此區塊進行運算,一直到幸運地讓這條區塊鏈領先了誠實鏈,才立即執行支付。一旦交易被發送出去,不誠實的發送者就會開始秘密地準備包含該交易替代版本的平行鏈。

接收者會等待直到交易被加到首個區塊上且在那之後鏈結上 z 個區塊,此時接收者仍無法得知攻擊者實際的進展,但若假設每個誠實區塊以平均的預定時間產生,則攻擊者可能的進展會是一個 Poisson 分佈(Poisson Distribution),分布的期望值為:λ = z * (q/p)。

為了得到攻擊者現階段可以趕上的機率,我們將攻擊者在該數量下依然能夠趕上的機率乘上每個攻擊者可以產生的進展量之 Poisson 機率密度:

為了避免對無窮數列求和而將式子修改成:

以 C 語言去實現:

可以從運算結果發現機率會隨著 z 值變大而呈指數下降:

以 P 值小於 0.1% 去求解 z 值:

十二、結論

我們提出了一個無須仰賴信任的電子交易系統。我們首先討論了電子貨幣的數位簽章原理,它提供了擁有者很大的控制力,但仍不足以防止雙重支付(double-spending)的發生。為了解決這個問題,我們提出了一個採用工作量證明(proof-of-work)機制的端對端網路來記錄交易的公開歷史資訊,若誠實的節點掌控了 CPU 運算能力,則攻擊者去竄改交易資訊是計算上不可行的。這個網路的強健之處在於其結構上的簡潔性。節點們不太需要彼此協調就能同時執行工作。由於訊息不會被傳送到任何特定的地方,因此節點們不需要被識別,只需要以最大努力原則被傳送。節點可以自由選擇離開或重新加入網路,且會接受工作量證明鏈為當節點不在網路時所發生的交易事件之證明。節點以各自的 CPU 運算能力來進行投票,表決對有效區塊的驗證,以不斷延長有效的區塊鏈來表示接受,而以拒絕在無效的區塊之後延長來表示拒絕。這個共識機制包含了一個端對端的電子貨幣系統所需要的所有規則及獎勵機制。

[參考資料]

  1. W. Dai, “b-money,” http://www.weidai.com/bmoney.txt, 1998.
  2. H. Massias, X.S. Avila, and J.-J. Quisquater, “Design of a secure timestamping service with minimal trust requirements,” In 20th Symposium on Information Theory in the Benelux, May 1999.
  3. S. Haber, W.S. Stornetta, “How to time-stamp a digital document,” In Journal of Cryptology, vol 3, no 2, pages 99–111, 1991.
  4. D. Bayer, S. Haber, W.S. Stornetta, “Improving the efficiency and reliability of digital time-stamping,” In Sequences II: Methods in Communication, Security and Computer Science, pages 329–334, 1993.
  5. S. Haber, W.S. Stornetta, “Secure names for bit-strings,” In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28–35, April 1997.
  6. A. Back, “Hashcash — a denial of service counter-measure,” http://www.hashcash.org/papers/hashcash.pdf, 2002.
  7. R.C. Merkle, “Protocols for public key cryptosystems,” In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122–133, April 1980.
  8. W. Feller, “An introduction to probability theory and its applications,” 1957.

[註 1] 對於中本聰這篇論文中提到的攻擊者與誠實鏈之間的競爭分析,此篇 論文 提出了修正與更新。

此篇為比特幣論文的後半部分,由於此篇為筆者首次翻譯論文,若語句不通順及措詞不精準,煩請讀者包含及不吝指正!謝謝:)

延伸閱讀: