《比特幣:端對端電子現金系統》(Bitcoin: A Peer-to-Peer Electronic Cash System)II

AndyLin
Taipei Ethereum Meetup
10 min readJun 3, 2017

--

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

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

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

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

— Satoshi Nakamoto

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

當一個貨幣的最新交易被整合進足夠數量的區塊中,則可丟棄在此交易之前的資料以節省磁碟空間。為了不破壞區塊的雜湊,交易會透過雜湊運算被記錄到一個 Merkle Tree 中,且只有 Mertkle Tree 的根雜湊(root hash)被包含在區塊的雜湊中。舊的區塊接著可藉由去除樹的分支來壓縮大小,內部的雜湊值不需要被保存。

回收磁碟區(Reclaiming Disk Space)

不含交易內容的區塊標頭(block 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)

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

隱私(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] 對於中本聰這篇論文中提到的攻擊者與誠實鏈之間的競爭分析,此篇論文提出了修正與更新。

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

Translated in Traditional Chinese from bitcoin.org/bitcoin.pdf 
by @andylinee

--

--