比特幣白皮書原文翻譯

本文提出了一種完全通過點對點技術實現的電子現金系統,它使得在線支付能夠直接由一方發起並支付給另外一方,中間不需要通過任何的金融機構。雖然數字簽名(Digital signatures)部分解決了這個問題,但是如果仍然需要第三方的支持才能防止雙重支付(double-spending)的話,那麼這種系統也就失去了存在的價值。我們(we)在此提出一種解決方案,使現金系統在點對點的環境下運行,並防止雙重支付問題。該網絡通過隨機散列(hashing)對全部交易加上時間戳(timestamps),將它們合併入一個不斷延伸的基於隨機散列的工作量證明(proof-of-work)的鏈條作為交易記錄,除非重新完成全部的工作量證明,形成的交易記錄將不可更改。最長的鏈條不僅將作為被觀察到的事件序列(sequence)的證明,而且被看做是來自CPU計算能力最大的池(pool)。只要大多數的CPU計算能力都沒有打算合作起來對全網進行攻擊,那麼誠實的節點將會生成最長的、超過攻擊者的鏈條。這個系統本身需要的基礎設施非常少。信息盡最大努力在全網傳播即可,節點(nodes)可以隨時離開和重新加入網絡,並將最長的工作量證明鏈條作為在該節點離線期間發生的交易的證明。

1. 簡介

節點2. 交易(Transactions)


比特幣白皮書原文翻譯


[1]3. 時間戳服務器(Timestamp server)

[2][3][4][5]

比特幣白皮書原文翻譯

4. 工作量證明(Proof-of-Work)

[6]

我們在區塊中補增一個隨機數(Nonce),這個隨機數要使得該給定區塊的隨機散列值出現了所需的那麼多個0。我們通過反覆嘗試來找到這個隨機數,直到找到為止,這樣我們就構建了一個工作量證明機制。只要該CPU耗費的工作量能夠滿足該工作量證明機制,那麼除非重新完成相當的工作量,該區塊的信息就不可更改。由於之後的區塊是鏈接在該區塊之後的,所以想要更改該區塊中的信息,就還需要重新完成之後所有區塊的全部工作量。

比特幣白皮書原文翻譯

同時,該工作量證明機制還解決了在集體投票表決時,誰是大多數的問題。如果決定大多數的方式是基於IP地址的,一IP地址一票,那麼如果有人擁有分配大量IP地址的權力,則該機制就被破壞了。而工作量證明機制的本質則是一CPU一票。“大多數”的決定表達為最長的鏈,因為最長的鏈包含了最大的工作量。如果大多數的CPU為誠實的節點控制,那麼誠實的鏈條將以最快的速度延長,並超越其他的競爭鏈條。如果想要對業已出現的區塊進行修改,攻擊者必須重新完成該區塊的工作量外加該區塊之後所有區塊的工作量,並最終趕上和超越誠實節點的工作量。我們將在後文證明,設想一個較慢的攻擊者試圖趕上隨後的區塊,那麼其成功概率將呈指數化遞減。 另一個問題是,硬件的運算速度在高速增長,而節點參與網絡的程度則會有所起伏。為了解決這個問題,工作量證明的難度(the proof-of-work difficulty)將採用移動平均目標的方法來確定,即令難度指向令每小時生成區塊的速度為某一個預定的平均數。如果區塊生成的速度過快,那麼難度就會提高。

5. 網絡

  • 1) 新的交易向全網進行廣播;
  • 2) 每一個節點都將收到的交易信息納入一個區塊中;
  • 3) 每個節點都嘗試在自己的區塊中找到一個具有足夠難度的工作量證明;
  • 4) 當一個節點找到了一個工作量證明,它就向全網進行廣播;
  • 5) 當且僅當包含在該區塊中的所有交易都是有效的且之前未存在過的,其他節點才認同該區塊的有效性;
  • 6) 其他節點表示他們接受該區塊,而表示接受的方法,則是在跟隨該區塊的末尾,製造新的區塊以延長該鏈條,而將被接受區塊的隨機散列值視為先於新區快的隨機散列值。

6. 激勵

區塊7. 回收硬盤空間

[7]

比特幣白皮書原文翻譯

不含交易信息的區塊頭(Block header)大小僅有80字節。如果我們設定區塊生成的速率為每10分鐘一個,那麼每一年產生的數據位4.2MB。(80 bytes * 6 * 24 * 365 = 4.2MB)。2008年,PC系統通常的內存容量為2GB,按照摩爾定律的預言,即使將全部的區塊頭存儲於內存之中都不是問題。

8. 簡化的支付確認(Simplified Payment Verification)

比特幣白皮書原文翻譯

當此情形,只要誠實的節點控制了網絡,檢驗機制就是可靠的。但是,當全網被一個計算力佔優的攻擊者攻擊時,將變得較為脆弱。因為網絡節點能夠自行確認交易的有效性,只要攻擊者能夠持續地保持計算力優勢,簡化的機制會被攻擊者焊接的(fabricated)交易欺騙。那麼一個可行的策略就是,只要他們發現了一個無效的區塊,就立刻發出警報,收到警報的用戶將立刻開始下載被警告有問題的區塊或交易的完整信息,以便對信息的不一致進行判定。對於日常會發生大量收付的商業機構,可能仍會希望運行他們自己的完整節點,以保持較大的獨立完全性和檢驗的快速性。

比特幣白皮書原文翻譯

9. 價值的組合與分割(Combining and Splitting Value)

10. 隱私(Privacy)

比特幣白皮書原文翻譯

傳統的造幣廠模型為交易的參與者提供了一定程度的隱私保護,因為試圖向可信任的第三方索取交易信息是嚴格受限的。但是如果將交易信息向全網進行廣播,就意味著這樣的方法失效了。但是隱私依然可以得到保護:將公鑰保持為匿名。公眾得知的信息僅僅是有某個人將一定數量的貨幣發所給了另外一個人,但是難以將該交易同特定的人聯繫在一起,也就是說,公眾難以確信,這些人究竟是誰。這同股票交易所發佈的信息是類似的,股票交易發生的時間、交易量是記錄在案且可供查詢的,但是交易雙方的身份信息卻不予透露。 作為額外的預防措施,使用者可以讓每次交易都生成一個新的地址,以確保這些交易不被追溯到一個共同的所有者。但是由於並行輸入的存在,一定程度上的追溯還是不可避免的,因為並行輸入表明這些貨幣都屬於同一個所有者。此時的風險在於,如果某個人的某一個公鑰被確認屬於他,那麼就可以追溯出此人的其它很多交易。

11. 計算

[8]

比特幣白皮書原文翻譯

假定p>q,那麼攻擊成功的概率就因為區塊數的增長而呈現指數化下降。由於概率是攻擊者的敵人,如果他不能幸運且快速地獲得成功,那麼他獲得成功的機會隨著時間的流逝就變得愈發渺茫。那麼我們考慮一個收款人需要等待多長時間,才能足夠確信付款人已經難以更改交易了。我們假設付款人是一個支付攻擊者,希望讓收款人在一段時間內相信他已經付過款了,然後立即將支付的款項重新支付給自己。雖然收款人屆時會發現這一點,但為時已晚。 收款人生成了新的一對密鑰組合,然後只預留一個較短的時間將公鑰發送給付款人。這將可以防止以下情況:付款人預先準備好一個區塊鏈然後持續地對此區塊進行運算,直到運氣讓他的區塊鏈超越了誠實鏈條,方才立即執行支付。當此情形,只要交易一旦發出,攻擊者就開始秘密地準備一條包含了該交易替代版本的平行鏈條。 然後收款人將等待交易出現在首個區塊中,然後在等到z個區塊鏈接其後。此時,他仍然不能確切知道攻擊者已經進展了多少個區塊,但是假設誠實區塊將耗費平均預期時間以產生一個區塊,那麼攻擊者的潛在進展就是一個泊松分佈,分佈的期望值為:

比特幣白皮書原文翻譯

當此情形,為了計算攻擊者追趕上的概率,我們將攻擊者取得進展區塊數量的泊松分佈的概率密度,乘以在該數量下攻擊者依然能夠追趕上的概率。

比特幣白皮書原文翻譯

化為如下形式,避免對無限數列求和:

比特幣白皮書原文翻譯

寫為如下C語言代碼:

#include double AttackerSuccessProbability(double q, int z) { double p = 1.0 - q; double lambda = z * (q / p); double sum = 1.0; int i, k; for (k = 0; k <= z; k++) { double poisson = exp(-lambda); for (i = 1; i <= k; i++) poisson *= lambda / i; sum -= poisson * (1 - pow(q / p, z - k)); } return sum; } 對其進行運算,我們可以得到如下的概率結果,發現概率對z值呈指數下降。

當q=0.1時 z=0 P=1.0000000 z=1 P=0.2045873 z=2 P=0.0509779 z=3 P=0.0131722 z=4 P=0.0034552 z=5 P=0.0009137 z=6 P=0.0002428 z=7 P=0.0000647 z=8 P=0.0000173 z=9 P=0.0000046 z=10 P=0.0000012

當q=0.3時 z=0 P=1.0000000 z=5 P=0.1773523 z=10 P=0.0416605 z=15 P=0.0101008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006

求解令P<0.1%的z值:

為使P<0.001>

12.結論

1.W Dai(戴偉),a scheme for a group of untraceable digital pseudonyms to pay each other with money and to enforce contracts amongst themselves without outside help(一種能夠藉助電子假名在群體內部相互支付並迫使個體遵守規則且不需要外界協助的電子現金機制), “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. 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. 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. on Computer and Communications Security, pages 28-35, April 1997. 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. ↵

8.W. Feller, "An introduction to probability theory and its applications," (概率學理論與應用導論)1957 ↵


分享到:


相關文章: