比特幣論文原文及翻譯

 比特幣這個概念是由中本聰提出來的,中本聰是個日裔美籍人,物理學家、火車模型收藏家。他是個無政府無國籍主義者,這可能是他提出去中心化的比特幣原因之一。

中本聰撰寫的比特幣創世論文:《Bitcoin: A Peer-to-Peer Electronic Cash System》,原文下載

下面嘗試着翻譯原文,增加對比特幣的學習認識:

-------------------------------------------------------------------------------------------------------------------------------

比特幣:點對點電子現金系統

       摘要: 純點對點版本的電子現金系統將允許直接從一方在線付款到另一方,而不經過一個金融機構。數字簽名提供了部分的解決方案,但如果仍然需要一個可信第三方來防止雙花,就將喪失意義。我們基於點對點網絡提出了雙花問題的解決方案。點對點網絡添加時間戳的方式爲將交易的哈希值添加到一條不斷增長的鏈中——該鏈採用基於哈希的工作量證明方式進行增長,修改記錄必須重新進行工作量證明。最長的鏈不僅作爲觀察到的事件序列的證明,也作爲自身來自最大算力池的證明。只要點對點網絡的大部分算力被合作節點掌握,他們就能夠超過攻擊者,生成最長的鏈。該網絡本身需要最小的結構,其中的消息以盡力而爲的方式廣播,節點可以隨意離開或重新加入網絡,並接受最長的工作量證明鏈,以此確證他們不在網絡期間發生的事。


1.介紹

        互聯網上的商業幾乎完全依賴於金融機構作爲可信第三方來處理電子支付。雖然在大多數交易下系統都運行良好,但這種基於信任的模式仍有其固有弱點。完全不可逆的交易是不可能的,因爲金融機構不能避免調解糾紛。調解的成本增加了交易成本,限制了最小的實際交易規模,切斷了小額臨時交易的可能性,並且因爲爲不可逆服務提供不可逆支付能力的喪失而產生更廣泛的成本。由於交易可被逆轉,對信任的要求增加。商家必須警惕他們的顧客,儘可能多地獲取他們本不需要的信息。一定比例的欺詐被認爲是不可避免的。這些成本和支付不確定性可以通過親自使用實物貨幣來避免,但沒有任何機制可以使通過沒有信任方的通信渠道進行支付成爲可能。

       所需要的是基於密碼證明而不是信任的電子支付系統,允許任何兩個自願的雙方直接交易,而不需要一個可信第三方。在計算上不可逆轉的交易將保護賣家免受欺詐,常規託管機制也可以很容易地實施,以保護買家。本文提出了一種雙花問題的解決方案,即採用點對點分佈式時間戳服務器來生成交易的時間順序的計算證明。只要誠實節點所控制的總算力比攻擊節點控制的更多,該系統就是安全的。


2.交易

       我們將電子幣定義爲數字簽名鏈。幣的轉移是通過所有者對前一筆交易和下一個所有者的公匙進行簽名,並將這兩個簽名放到幣的末端來實現。收款人可以通過驗證簽名來驗證鏈所有權。

        當然,問題是收款人無法驗證其中一個所有者沒有進行雙花。一個常見的解決辦法是引入一個可信中央權威機構(造幣廠),檢查交易是否被雙花。每次交易後,必須將幣退還給造幣廠以發行新的幣,只有從造幣廠發行的幣可以確信沒有雙花。這個解決方案的問題是,整個貨幣體系的命運取決於運營造幣廠的公司,每一筆交易都要經過它們,就像銀行一樣。

       我們需要一種方法讓收款人知道前所有者沒有將幣用於早些的交易。就這個目的而言,最早的交易是最關鍵的,所以我們不關心稍後是否進行了雙花。確認交易是否存在的唯一方法是瞭解所有交易。在造幣廠模型中,造幣廠瞭解所有的交易,並決定哪一筆交易是第一個。爲了在沒有信任方的情況下達到這個目的,交易必須被公開宣佈[1],我們需要一個系統讓參與者基於他們接收到的事實就序列的單一歷史達成共識。收款人需要證據,表明在每次交易時,大多數節點都同意這是第一次收到。


3.時間戳服務器

       我們建議的解決方案是從一個時間戳服務器開始。時間戳服務器通過對多個項目組成的區塊進行哈希來得到時間戳,並廣泛發佈該哈希值,如在報紙或Usenet帖子[2-5]中。時間戳用於證明數據在得到哈希值的那個時間點存在。每個時間戳的哈希值中都包含之前的時間戳,形成一個鏈,每個新加的時間戳都對它之前的時間戳進行了增強。


4.工作量的證明

       要在點對點基礎上實現分佈式時間戳服務器,我們需要使用類似於Adam Back的Hashcash[6]的工作量證明機制,而不是報紙或Usenet帖子。工作量證明涉及在哈希後檢索一個值,例如SHA-256,得到的哈希值以一定數量的零比特位開始。所需的平均工作量與要求的零比特位的數量呈指數關係,並且答案通過一次哈希就可以驗證。

       對於我們的時間戳網絡,工作量證明機制這樣實現:在區塊中遞增一個nonce值,針對每次的nonce,計算整個區塊的哈希值,直到找到一個哈希值,該值滿足所要求的零比特位數量。一旦CPU已經花費了努力使其滿足工作量證明,不重做該工作的情況下無法改變塊。後來的塊被放入鏈後,改變該塊所需的工作量將包括重做之後所有塊的工作。

       工作量證明機制也解決了在多數決策制定中確定哪個爲代表的問題。如果大多數的定義是基於一個IP地址一票的話,能夠分配許多IP的人將可以破壞該系統。工作量證明本質上是一個CPU一票。大多數的決定由最長的鏈代表,因爲其包含了最多的工作量證明工作。如果大部分的CPU能力都是由誠實的節點來控制,誠實的鏈條就會增長最快,超過任何競爭鏈。要修改過去的塊,攻擊者將不得不重做之後所有區塊的工程證明,然後趕上並超越誠實節點的工作。稍後我們會展示一個較慢攻擊者追趕的概率隨着隨後的塊被添加,指數性地減小。

       爲了補償硬件速度的增加和隨着時間的推移對運行節點的興趣變動,工作量證明的難度取決於一個變化的平均數——每小時生成區塊數量。如果區塊產生得太快,難度就會增加。


5.網絡

運行網絡的步驟如下:

       (1)新交易廣播給所有節點。

       (2)每個節點收集新的交易到一個塊。

       (3)每個節點的工作是找到一個困難的塊工作量證明。

       (4)當節點發現工作量證明時,它將該塊廣播給所有節點。

       (5)只有在塊中所有交易都有效且尚未支過的情況下,節點才接受該塊。

       (6)節點通過在鏈上創建下一個塊來表示他們接受了該塊,並使用接受塊的哈希作爲新創建塊的前導哈希。

       節點總是認爲最長的鏈是正確的,並將繼續擴展它。如果兩個節點同時廣播了下一個塊的不同版本,則會有一些節點先接收到這一個或那一個。在那種情況下,他們在收到的第一個塊上面工作,但保存其他分支,以防其他分支變得更長。當下一個工作量證明被找到,一個分支變得更長時,均勢將被打破; 在另一個分支上工作的節點會切換到這個較長的分支。

       新交易的廣播不一定要到達所有的節點。只要他們到達很多節點,不久就會進入一個塊。塊廣播也容忍消息丟失。如果一個節點沒有收到一個塊,它會在收到下一個塊時意識到錯過了一個塊,並請求它。


6.激勵

       按照慣例,塊中的第一筆交易是一個特殊的交易,其中生成的幣歸屬於塊的產生者。這激勵了節點支持這個網絡,並提供了一種發行幣、投入流通的方式,因爲沒有中央機構來發行它們。穩定增加一定數量的新幣類比於黃金挖礦工消耗資源挖到黃金然後投入流通領域。在我們的機制中,這是CPU時間和電力消耗。

       交易費也可以作爲激勵。如果交易的輸出值小於其投入價值,差額就是交易費用——作爲包含該交易的區塊的追加激勵。一旦預定數量的幣已經進入流通,激勵可以完全轉移到交易費用,完全不會有通貨膨脹。

       激勵可能有助於鼓勵節點保持誠實。如果一個貪婪的攻擊者能夠比所有誠實的節點組裝更多的CPU算力,他將不得不面臨選擇:使用算力竊回他的付款來實現欺詐,或者用它來生成新的幣。他應該發現按照規則出牌更有利可圖——這種規則保障他獲得的新幣比其他人聯合起來所獲得的都要多,而不是破壞規則,損害自己的財富的有效性。


7.回收磁盤空間

       當新交易被放入鏈中,且在該鏈後擴展了足夠多的區塊之後,可以確認該交易不會被撤銷,則可以丟球該交易之前的交易記錄,以節省磁盤空間。爲了在不破壞塊的哈希的情況下實現這一點,交易在Merkle樹[7][2][5]中被哈希,並且只有Merkle樹根包含在塊哈希中。老區塊可以通過這樣的修剪來壓縮大小。除Merkle樹根外,不需要保存其他內部哈希。

       沒有交易記錄的區塊頭大概是80個字節。假設每10分鐘產生一個區塊,每年就是 80字節* 6 * 24 * 365 = 4.2MB。在2008年以前,計算機系統一般都有2GB內存,且摩爾定律預測內存以每年1.2GB的速度增長,所以即使必須將所有區塊頭都裝入內存中,也不是問題。


8.簡化付款校驗

       可以在不運行完整網絡節點的情況下驗證付款。用戶只需要保留最長鏈的區塊頭副本,他可以不斷髮起查詢,直到確認擁有最長的鏈,這條鏈上的某個區塊可以連接到用戶交易所在的Merkle分支。用戶原本不能自行確認這筆交易的有效性,但通過將這筆交易鏈接到鏈中,他可以看到一個節點已經接受它,並且在它之後又鏈接了新的區塊,這表明交易已被全網確認。

        因此,只要誠實的節點控制網絡,驗證就是可靠的,但如果網絡被攻擊者控制的話,驗證就比較脆弱。因爲網絡節點可以自己驗證交易,只要攻擊者可以持續控制網絡,簡化方法就會被黑客捏造的交易愚弄。一個防止這種情況的策略是在網絡節點檢測到無效區塊時發出警報,提示用戶下載無效塊或交易的完整信息,以確認不一致性。收款業務頻繁的企業可能仍然希望運行自己的節點以獲得更加獨立的安全性和更快的驗證。


9.合併和分割價值

       雖然單獨處理幣是可能的,但每一分幣要單獨交易還是不容易的。爲了讓價值能被分割和合並,交易包含多個輸入和輸出。通常會有一個來自較大的前導交易的單一輸入或多個來自較小前導交易的彙總輸入,輸出最多兩個:一個用於付款,另一個用於將找零(如果有)返還給發起人。

         需要指出,每筆交易依賴於之前多筆交易,這多筆交易又依賴前面更多的交易,這並不是問題。在這種機制中,沒有必要展開檢驗之前的所有交易歷史。


10.隱私

       傳統的銀行業務模式通過限制當事人和可信第三方對信息的獲取來實現一定程度的隱私保護。在本機制下,因爲要公佈所有交易,所以這種方法就不行了,但隱私仍然可以被保護,在另一個方向上阻斷信息流,即保持公鑰匿名。公衆可以看到有人發送了一個金額給其他人,但沒有可以將交易連接到任何人的信息。這類似於證券交易所的信息披露機制,交易時間、個人交易規模都記錄在案且公開,但沒有告知誰是當事人。

        作爲額外的防範措施,每筆交易都應該使用一對新的密鑰,以保障它們不會指向共同的所有者。在多點輸入的交易中,一些聯繫仍然不可避免,必然顯示他們的輸入爲同一個所有者。風險是如果一個密鑰的所有者被揭示,那麼可以揭示出其他交易也屬於該所有者。


11.計算方式

       考慮以下場景,攻擊者試圖以比誠實鏈更快的速度生成另一條鏈。即使這樣做完成,也不會使系統對任意改變開放,例如無中生有創造價值或者得到從不屬於攻擊者的金錢。節點不會接受無效的交易作爲付款,誠實的節點永遠不會接受一個包含無效交易的塊。攻擊者只能嘗試改變他自己的一筆交易來收回他最近花了的錢。

       誠實鏈和攻擊者鏈之間的競爭可以被定性爲二叉樹隨機遊走。成功事件是誠實的鏈條延伸了一個區塊,領先+1,而失敗事件是攻擊者的鏈延伸一個區塊,差距-1。

       攻擊者從給定的落後中趕上的概率類似於賭徒破產問題。假設一個無限信用的賭徒從赤字開始進行潛在無限次的嘗試,以填補虧損。我們可以計算他填補上虧損的概率,即攻擊者追趕上誠實的鏈條的概率,如下[8]:

       p = 誠實節點找到下一個塊的概率

       q = 攻擊者找到下一個塊的概率

       qz = 攻擊者將從後面z個塊追上的概率

        

        假設 p > q,成功概率隨着攻擊者需要追趕的塊的數量的增加而呈指數下降。因爲勝算不在攻擊者這邊,如果他沒有足夠的幸運快速成功的話,他的機會只會變得越來越小。

       我們現在考慮一個新交易的接收者需要等待多長時間,才能充分確定發起人不能更改交易。我們假設發起人是攻擊者,他想讓接受者在一段時間內相信他已經付款,然後卻把幣交還給自己。屆時,接收人將收到提醒,但爲時已晚。

       接收方生成一個新的密鑰對,並在簽約前不久纔將公鑰發送給發送方簽約。這可以防止付款人預先準備好一個區塊鏈然後持續地對此區塊進行運算,直到他的區塊鏈恰好超過誠實鏈條,方纔立即執行支付。此時,只要交易一發出,攻擊者就開始祕密地準備一條包含了該交易替代版本的平行鏈條。

       接收方等到交易被添加到一個塊,並且Z個塊連接到它後面。他不知道攻擊者取得進展的確切數量,但是假設誠實的區塊生成一個新塊的時間爲平均預期時間,攻擊者的潛在進展就是一個泊松分佈,其期望爲:

        

       爲了得到攻擊者現在還能追上的概率,我們把他可能已經取得的進展數量的泊松密度乘以他從這一點上可能趕上的概率: 

        

       重新排列,以避免對無限數列求和。 

        

轉化爲C代碼…

#include <math.h>
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%…

           P < 0.001

q=0.10

z=5

q=0.15

z=8

q=0.20

z=11

q=0.25

z=15

q=0.30

z=24

q=0.35

z=41

q=0.40

z=89

q=0.45

z=340


12.結論

       我們提出了一個不依靠信任的電子交易系統。我們從數字簽名構成的通用幣框架開始,數字簽名提供了對所有權強有力的控制,但由於沒有辦法防止雙花,仍然是不完整的。爲了解決這個問題,我們提出了一個使用工作量證明記錄交易的公共歷史的對等網絡,在誠實節點控制多數算力的情況下,攻擊者要改變交易會迅速變得不切實際。該網絡的強健之處在於它非結構化的簡潔性。所有節點只需要少量溝通就可同時工作。他們不需要被識別,因爲信息沒有路由到任何特定的地方,只需要以盡力而爲的方式交付。節點可以隨意離開或重新加入網絡,並接受最長的工作量證明鏈,以此確證他們不在網絡期間發生的事。他們用算力進行投票,擴展接受的鏈,拒絕工作在包含無效區塊的鏈上。任何需要的規則和激勵都可以通過這個共識機制來實施。


參考資料

[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. 9

-----------------------------------------------------------------------------------------------------------------------------

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章