您所在的位置:首頁>> 公鏈圈>> 正文

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

企業報道  2018-04-08 10:22:06 閱讀:

  版本號0.02

  (備注:草稿,會持續改良可閱讀性,內容已完整。在尊重原文專業性的基礎之上,盡量增加閱讀的流暢性。知乎的網頁編輯器排版功能太爛,排版起來就是個噩夢,公式和配圖部分只能先截圖,希望大家理解。)

  原著 中本聰 [email protected]

  出處 https://bitcoin.org/bitcoin.pdf

  翻譯 胡震生 [email protected]

  來源:知乎

  概述. 一個真正的的點對點的電子現金應該允許從發起方直接在線支付給對方,而不需要通過第三方的金融服務機構。現有的數字簽名技術雖然提供了部分解決方案,但如果還需要經過一個可以信任的第三方機構來防止電子現金的“雙重支付”,那就喪失了電子現金給人類帶來的最大好處。我們針對電子現金會出現的“雙重支付”問題,用點對點的網絡技術提供了一個解決方案。該網絡通過給交易記錄打上時間戳,并通過哈希對其加密,然后將其并入一個不斷增長的哈希記錄所組成的鏈條文件中,以此形成一個新的交易記錄,這個哈希記錄鏈條文件(以下簡稱鏈條文件)是由一個需要證明工作量的系統網路所提供存儲和計算服務的。沒有基于工作量證明的系統網絡來重新完成所有的工作量證明,一個已經形成的記錄是不能被修改的。基于工作量證明的系統理念,最長的鏈條文件不僅僅是提供這些工作量序列事件記錄的證據,而且它也是由最大的CPU處理能力池產生的。只要由計算機節點控制的大部分CPU處理能力不聯合攻擊網絡本身,它們的處理能力將超過攻擊者,并生成最大的鏈條文件。

  這個網絡它自身需要最簡單的結構,以方便信息包盡最大努力廣播給網絡上的計算機節點,同時計算機節點只需要接受它們離開時工作量網絡的產生的數據鏈,它也可以隨時加入和離開網絡。

  1 介紹

  互聯網商業的電子支付已經發展到了幾乎都需要專有的金融機構來提供第三方信任來處理的階段。雖然大部分交易,系統都能工作的足夠好,但它還是需要面對基于信任的基礎模型帶來的天生的缺點。 自從金融機構不可避免的開始調解糾紛,完全而不可撤銷的交易就不能真正的實現。調解成本增加了交易成本,限制了實際可行交易的最小規模,同時徹底切斷了為日常小額交易提供服務的可能性,廣義上的成本讓系統失去了為不可撤銷類型的服務提供不可撤銷支付的能力。因為用戶有撤銷支付的可能性,所以需要某個時間段內連續性的信任,這導致商家必須防備他們的客戶,騷擾他們以為了得到更多的他們不再需要的信息。不可避免的,一定比例下的欺詐性交易是可以接受的。雖然使用物理貨幣可以避免這些成本和支付的不確定性,但是沒有商家在不通過可信任的三方的溝通渠道前提下去支付。

  這就是為什么需要一個基于加密證明的電子支付系統取代原來的基于信任的基礎模型,允許任意兩個希望交易的雙方不通過基于信任的第三方來直接支付。經過計算的無效交易將自動被撤銷,以保護賣家遠離欺詐,常規附帶條件的契約,將被機械化的執行,將保護買家變得很簡單。這篇論文中,我們提供了一個基于點對點的分布式時間戳服務器去生成基于時間序列的交易訂單的計算證明方案,從而解決雙重支付問題。只要誠實的節點全體所控制的CPU計算能力的總和,大于聯合攻擊節點計算能力組的總和,該系統就是安全的。

  2 交易

  我們首先定義一個電子貨幣就是一個包含了一串數字簽名的鏈。每一個幣交易者通過用哈希技術對上一個交易信息和下一個擁有者的公共密鑰兩者進行加密,然后進行數字簽名,最后將這些信息添加到這枚電子貨幣的末尾。下一個收款人通過私有密鑰與鏈里的公有密鑰進行簽名驗證,以確認自己是鏈也就是這枚電子貨幣的擁有者。

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

  當然這個流程的問題在于,收款人還是不能驗證幣的某位擁有者是否對這個貨幣進行了雙重花費,通常的解決辦法是引入一個值得信任的中心權威,或者造幣廠來檢查每一筆交易的是否被雙重花費。每一筆交易結束后,貨幣必須由造幣廠回收以發行一個新的貨幣,只有從造幣廠直接發行的貨幣才會被信任為沒有被雙重花費。這個解決方案的災難之處是,整個金錢系統依靠某家公司來運營造幣廠,就像銀行一樣,每一筆交易不得不通過它們。

  我們需要用一個方法來讓收款人知道貨幣的上一個擁有者沒有在更早的任何一個交易里簽名授權以導致雙重花費。我們的目的是,去計算以前的交易,我們不需要關心之后的交易是否對其進行雙重花費。唯一的方法是知道之前所有的交易,才會確認交易不存在。基于造幣廠的模型,造幣廠知道所有的交易,同時決定哪一個交易請求第一時間到達。在沒有可信任的三方下完成這個目的,交易必須公開發布,我們需要一個系統的每個參與者,都同意一個它們已經接受到的單一的訂單歷史。收款人需要通過主要節點認同它們已經第一時間收到了這筆交易來證明每一筆交易。

  3 時間戳服務器

  我們的解決方案從一個時間戳服務器開始,一個時間戳服務器對一組已經被時間戳標示過的數據塊進行哈希加密,然后廣泛公開發布這個哈希,就像新聞或者以前的論壇發帖一樣。明顯的,為了進入哈希里,時間戳證明了數據在這個時間是必須必定存在的,每個時間戳包含了上一個交易的時間戳在它的哈希里,以后每次交易的時間戳都對上一個進行了加強,以此形成了一個鏈。

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

  4 工作量證明

  我們將需要使用工作量證明系統,在點對點的基礎之上構建一個分布式的時間戳服務器,和adam back提出的的哈希現金很像,而不是以前的新聞組及論壇的機制。當數據被哈希加密后,工作量證明用安全散列算法sha-256對一個數據的哈希值進行檢查。哈希從一定數量的0字節開始,檢查的平均工作量隨著0的字節的數量增長而呈指數增長,而校驗只需要執行一次哈希操作。

  為了我們的時間戳網絡可行,我們增加一個不會被重復的隨機數進到數據塊內并執行一定的工作量來找到它,這個數據塊的的哈希已經包含已經所需數量的0字節。CPU處理能力一經被證明它滿足了所需的工作量,不重做所有的工作,這個數據塊將不能被修改。隨后的數據塊被鏈接在其最后,修改數據塊的信息需要把其后所有的數據塊的工作量重做。

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

  這個工作量系統也解決了集體決策誰代表大多數的問題。如果大多數是基于一個IP地址一票的機制,它將被能分配大量IP地址的人所破壞,工作量證明是基于一CPU一票的。大多數決策被最長的鏈代表,也代表了最大工作量效果的投入。如果大多數CPU被誠實節點控制,誠實鏈將最快速的增長,超過任何競爭的鏈。 修改一個過去的塊,一個攻擊者將不得不把塊和之后所有的塊里所有的工作量重做,然后追上超過誠實節點的工作。我們隨后將展示一個慢速攻擊者追上隨后的數據塊的可能性隨數據塊的增加呈指數增加。

  為了抵償硬件增加的速度和節點運行時的變化的收益,工作量證明將被一個移動平均值來確定,即每小時平均生成的數據塊數。如果它們生成的太快,難度也在增加。

  5 網絡

  運行這個網絡的步驟如下:

  1 新的交易被廣播給所有節點

  2每一個節點收集新的交易寫進一個數據塊

  3每個節點發現這個數據塊的工作量的難度

  4 當一個節點證明了它的工作量,它將廣播這個數據塊給所有的節點。

  5節點接受這個數據塊,只有數據塊中所有的交易都是有生效和沒有被支付過的,節點才會接受這個數據塊。

  6 節點通過創建下一個數據塊在數據鏈上,同時把發送節點數據塊的哈希作為創建數據塊的上一個哈希,表示它們接受了這個數據塊。

  節點始終認為最長的數據鏈是正確的,會一直在上面延展。如果兩個節點一起廣播不同版本的數據塊,一些節點先接收到一個或者另一個。在這個例子里,它們會先在第一個接收的數據塊上開始工作,但是儲存另一個作為下一個分支,防止它變的更長。當工作量證明網絡發現其中一個分支變的更長,在短鏈上工作的節點會切換到更長的鏈上,其所屬關系也會被打斷,

  新的交易廣播不需要到達所有節點,它們只需要盡可能到達多的節點,它們將被整合進數據塊中。數據塊廣播也容忍丟棄信息。如果一個節點沒有收到一個數據塊,它將持續請求它,直到它接受到下一個數據塊,并相信它是丟失的那個。

  6 激勵

  根據規則,在數據塊里的第一個交易是一個特定的交易,它創建了一個新的貨幣,由這個數據塊的創建者擁有。這給支持網絡的節點添加了一個激勵,同時提供一個在整個循環里分布式發行貨幣的方法,沒有中心權威去影響它們。穩定的、數量不斷增加的新貨幣和挖金人花費資源添加黃金進如黃金循環系統一樣。在這個例子里,處理器時間和電力是所需要花費的資源。

  激勵也可以通過交易費用獲得。如果交易的一個輸出值小于輸入址,差值就是交易費,它作為激勵被被添加進包含這個交易的數據塊。整個循環的貨幣數量已經被預先設定,同時交易費作為交易的激勵可以完全避免通貨膨脹。

  激勵也可以有助于節點保持誠實。如果一個貪婪的攻擊者有能力集合很多處理器能力超過誠實的節點,他要么選擇從自己的交易里欺詐他人,要么使用它生成新的貨幣。他應該發現遵守規則獲利更多,這樣的規則有利于他聯合其他人賺取新貨幣,超過了他削弱這個系統和損害自身的財富健康的有效性。

  7 回收磁盤空間

  一個貨幣里最后的交易已經被足夠多的數據塊覆蓋,那么這個支付交易之前的數據可以不再被使用以節省磁盤空間。為了在不打斷數據塊的哈希前提下促進它。交易被哈希進默克爾樹(Merkle Tree),這樣只這個數據塊哈希的根需要被包含進來,老的數據塊可以被壓縮進樹的接下的分支而拔除。內部的哈希不需要被存儲。

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

  一個不含交易信息的數據塊頭部大概80字節。如果我們支持每十分鐘生成一個數據塊。80字節*6*24*365=4.2M/每年。2008年,每個通用的計算機都有2G內存。根據摩爾定律預測,每年增長1.2GB,數據頭都被存儲進內存也不是問題。

  8. 簡化的支付驗證

  不需要運行一個完整的網路節點也可以認證支付,一個用戶僅僅需要保存工作量網絡的最長數據鏈的數據塊頭部的復本,他可通過在網絡節點上排隊等待直到他相信他自己已經得到了最長的鏈,并且包含交易的數據塊已經被默克爾分支連接上。他不能檢查他自己的交易,但是通過連接到鏈的某個位置,他能看到網絡節點已經接受了這個數據,并且其后增加的數據塊也證明網絡節點已經接受了它。

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

  例如,這個支付驗證依靠盡可能誠實的節點控制網絡,但是如果網絡被一個擁有大量算力的攻擊者控制,它是會容易受到攻擊的。當網絡節點可以確認它們自身的交易,這個簡單的方法可以被一個攻擊者的編造的交易來欺騙,只要攻擊者擁有超過網絡的算力。當網絡節點偵測到一個無效的數據塊,一個策略會保護反對者,他們將會從網絡節點接收到警告,促使軟件的用戶去下載整個數據塊,以確認被警告交易的一致性。支付頻繁的商家還可以去運行它們自己的節點,以獲得更獨立的安全和更快的確認。

  9 合并和拆分數據

  盡管它可以控制單個貨幣的交易,但針對交易的每一分錢分開處理是很笨的方法。交易包含的多個輸入和輸出,應該允許數值的拆分和合并。通常要么就是從上一個更大的交易里單一輸入,要么就是把多個輸入合并成更小的數字,同時最多只有兩個輸出,一個負責支付,一個負責找零,如果有,則返回給發送者。

  .

  這里需要注意的是輸出端。一個交易從幾個交易而來,同時這些交易從更多交易而來,這不是問題。這里永遠不需要去展開一個交易的歷史完整復本。

  10 隱私

  傳統銀行的模式是給合作伙伴有限的訪問權限,同時通過一個被信任的第三方來調用,以來查看一定級別的隱私。除了這個方法,維護隱私還需要通過打斷信息流的一些地方,通過匿名的公共密鑰,以公開需要的所有的交易。公眾可以看到某人發送給其他人的數字,但是沒有交易人的信息,這個很像股票交易所的信息發布級別,公眾記錄了單比的交易的時間和規模,但是不知道誰交易的。

  作為一個額外的防火墻,同一個擁有者的每一比新交易可以連接一對新的配對密鑰。一些連接還是不可避免的包含多個交易的輸入,這必須暴露同一個擁有者過去的其他輸入,這個風險是如果擁有者的密鑰被暴露了,連接將暴露屬于同一擁有者的其他交易。

  11 計算

  我們假設一個場景,一個攻擊者試圖去生成一個更快的鏈以替代誠實的鏈。甚至如果它完成的比較徹底,它拋開這個系統去隨意改變,例如憑空創造一個值或者拿走從不屬于他的錢,節點不會接受一個無效的支付交易,誠實節點將永遠不會接受包含他們的鏈。一個攻擊者能做的僅僅是可以努力去改變他自己的交易,以從他最近的支付里把錢拿回來。

  誠實鏈和攻擊鏈的之間比賽的特征是一個二項分布的隨機漫步。成功的事件是誠實的節點被一個數據塊擴展,它的領先增加一個點,失敗的事件是攻擊者的鏈擴展一個數據塊,差距減少一個點。

  攻擊者從一個給定的赤字追上成功的可能性和賭徒破產問題相似。假設一個賭徒從一個赤字開始擁有無限的信用,同時無限嘗試的次數去賭以達到盈虧平衡。我們可以計算他達到盈虧平衡的可能性,那也就是一個攻擊者追上誠實的鏈。如下所示。

  p = 誠實節點發現下一個數據塊的可能性

  q = 攻擊者發現下一個數據塊的可能性

  qz = 攻擊者嘗試從z數據塊以后追上的可能性

  我們假設p>q,可能性隨著攻擊者追上數據塊的增加呈指數下降,隨著概率和他做對,如果他不能在早期幸運的趕上,越往后,他的機會會變的很渺茫。

  我們現在思考需要等待多久才能確認這個發送者不能改變交易。我們假設這個發送者是個攻擊者,他想使接收者相信他已經把錢付給了他,然后過一會,他把錢再付給他自己。當發生時,接受者將接收到警告,但是發送者希望它遲些發生。

  接收者在簽名前生成一個新的配對密鑰然后把很快把公鑰給了發送者。這防止發送者在這個時間點前準備一個數據塊鏈并開始持續的工作,直到他幸運的跑到前面,然后在這時執行這個交易。交易一經發出,不誠實的發送者就已經開始在一個并行包含了他交易的替代版本的鏈上秘密工作。

  接收者等待直到這個交易已經被添加進一個數據塊同時Z數據塊已經被鏈接在它的后面。他不知道攻擊者已經制造的數據塊進展的準確數字,但是假設誠實的數據塊按每個數據塊的期望的平均值生成,攻擊者可能的進展的期望值將呈柏松分布。

  為了得到攻擊者在這時追上的概率,我們用柏松分布密度乘以他可能在這個點上追上可能的概率的進展數:

  重新整理避免分布無限循環的尾部求和

  轉換到C代碼...

  運行一些結果,我們可以看到隨著z值的增加,概率呈指數下降。

  求解 P 小于 0.1%...

  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.

  比特幣 (Bitcoin)

更多專題
從“工人”到“工匠”的華麗蛻變

一套沾滿污漬的灰色工作服、一雙久磨泛白的黃色勞保鞋、一頂擦得錚亮的白色安全帽、一副款式陳舊的黑框眼鏡...

臨渙礦“五環五步”治理隱患夯實安全基礎

近年來,臨渙煤礦以“兩個規范”為抓手,大力推行隱患排查整治“五環五步”法,把隱患排查治理拓展到每一個...

钻石水果盘在线客服 体育彩票大乐透预测号 0107金蟾捕鱼游戏下载 快销品业务赚钱么 快速时时彩玩法 极速飞艇开奖记录 天津快乐十分购买平台 安徽快3app在哪里下载 欢乐麻将的纯音乐bgm 14场胜负彩比分直播 河北20选5最新开奖 j最稳赚包六肖网站 快3和值大小技巧稳赚 刷苹果app赚钱软件真的还是假的 宁夏11选5走势图新 内蒙古11选5基本走势图 128棋牌正版下载网址