比特幣:一個點對點的電子現金系統 8btc.com | 關注虛擬經濟
獨家贊助商:Bitcoinblogger.com 作者電子郵件:【[email protected]摘要】:本文提出了一種完全採用 P2P 技術實現的電子現金系統,它可以使在線支付由一方直接發起,並支付給另一方,而不需要任何金融機構。中本聰通過時間戳、工作量證明機制、非對稱加密、UTXO 等技術的集大成,而創造了比特幣區塊鏈。
我們還學習了比特幣技術上存在 3 個主要問題,分別是:
1、腳本語言太複雜,開發難度大;
2、生態系統基礎差,缺乏足夠的參與者;
3、腳本語言不符合「圖靈完備」標準,限制了進一步用途。
最後,我們學習了新的虛擬貨幣的產生。因為比特幣算法效率的問題,導致了萊特幣區塊鏈的誕生。另外,為了針對性地解決比特幣區塊鏈存在的擴展性不足等問題,市場又產生了以太坊區塊鏈技術。
儘管數字簽名(數字簽名)部分解決了這個問題,但如果您仍然需要第三方支持來防止重複支付(雙重支出),那麼這樣一個系統將失去其價值。我們(we)提出了一種解決方案,以使現金系統能夠在對等環境中操作,並防止雙重支付問題。(散列)為所有事務添加時間戳(時間戳)並將它們合併到擴展的基於隨機散列的工作量證明中。工作量證明鏈用作事務記錄,除非重新完成所有的工作量證明,否則不能改變最長的鏈,最長的鏈不僅用作觀察到的事件序列,(序列)並被視為來自最大的 CPU 計算能力池只要大多數 CPU 計算能力不打算在對整個網絡的攻擊中合作,誠實的節點將產生超出攻擊者的最長鏈。系統本身需要很少的基礎設施。信息儘可能在整個網絡中傳播,和重新加入網絡,並採用最長的工作量證明鏈作為在該節點離線時發生的事務的證明。
1. 幾乎所有網上交易都依賴金融機構作為可信賴的第三者處理電子付款資料。雖然這些系統在大多數情況下運作良好,它們仍然固有地受制於以信貸為基礎的模式(基於信任的模型)。人們不可能實現完全不可逆的交易,因為金融機構不可避免地會介入協調糾紛。金融中介的存在也會增加交易成本,限制實際最低交易規模和日常小額支付交易,而且潛在的損失是很多商品和服務無法退貨,在沒有不可逆支付手段的情況下,由於退款的可能性,互聯網商務受到很大限制。
它需要交易雙方的信任,此外,由於商家也必須謹慎對待自己的客戶,會向客戶索要完全不必要的個人信息,在實際商業實踐中,一定比例的欺詐客戶也被認為是不可避免的,相關損失作為銷售費用處理,在實物現金的情況下,因為目前還沒有第三方信用中介機構,因此非常需要一種基於密碼而不是基於信用的電子支付系統,允許任何兩方同意直接付款而無需第三方中介的參與。對於那些希望保護買方的人來說,在這種環境下建立通常的第三方擔保機制是容易和愉快的。本文提出了一種對等分佈式時間戳服務器,用於按時間順序生成和記錄電子交易憑證,以解決雙重支付問題。只要誠實節點控制的計算能力之和,系統的安全性超過了合作攻擊者的計算能力的總和。2. 交易我們將電子硬幣定義為如下的數字簽名串:每個所有者通過在前一筆交易和下一個所有者的公鑰上簽署一個隨機散列數字簽名,並將此簽名附加到電子貨幣的末尾,將電子貨幣發送給下一個所有者。收款人可以通過驗證簽名來驗證鏈的所有者。
該過程的問題在於,接收者將難以驗證先前的所有者是否對電子貨幣進行了雙重支付。通常的解決方案是引入可信的第三方機構或類似造幣廠的機構來驗證每筆交易,以防止雙重支付。在每筆交易結束時,電子貨幣由造幣廠回收,該公司發行了一種新的電子貨幣。然而,這種解決方案的問題是,整個貨幣系統的命運完全取決於經營造幣廠的公司,因為每筆交易都要由造幣廠確認,我們需要某種方法讓收款人確保以前的所有者沒有簽署以前的交易。為了做到這一點,我們真正需要關注的是在這個交易之前發生的交易,而不是在這個交易之後是否會有雙重支付企圖。要確保一個交易不存在,唯一的方法是知道所有以前的交易。在 Mint 模型中,鑄幣局知道所有的交易,它決定交易完成的順序。如果你想把第三方中介排除在電子系統之外,那麼交易信息應該公開宣布 1。我們需要整個系統中的所有參與者。存在唯一識別的歷史交易序列。收款人需要確保在交易期間絕大多數節點同意交易是第一次發生。3. 時間戳服務器解決方案從「時間戳服務器」開始。時間戳服務器通過執行隨機散列來對塊形式的一組數據加時間戳,並廣播該隨機散列,就像在新聞或 Usenet2345 上張貼一樣。顯然,時間戳可以證明特定數據必須在特定時間出現,因為相應的隨機散列值只有在它在那個時間存在的情況下才能被獲得。每個時間戳應當在它的隨機散列值中包括先前的時間戳,每個後續時間戳都會加強前一個時間戳,這就形成了一個鏈。
1 W Dai,一組不可追蹤的數字假名用金錢彼此支付並在它們之間執行合同而無需外部幫助(外部輔助的電子現金機制)的方案,「B 貨幣,」http://www.weidai.com/bmoney.txt2 H. Massias,X. S. 阿維拉,和 J.-J. Quisquater,「具有最小信任要求的安全時間戳服務的設計」,在比荷盧信息理論的第 20 次研討會上,1999 年 5 月。3 S. Haber,W. S. Stornetta,「如何對數字文檔加時間戳」,在密碼學雜誌,第 3 卷,第 2 期,第 99-111 頁。1991 年 4 月,D. Bayer,S. Haber,W. S. Stornetta,「提高數字時間戳的效率和可靠性」,以及可靠性)在序列 II:通信、安全和計算機科學中的方法,第 329-334 頁,1993 年。5 S. Haber,W.S. Stornetta,「位串的安全名稱」,第四屆 ACM 計算機和通信安全會議論文集,第 28 - 35 頁,1997 年 4 月。
4. 工作量證明工作量證明要在對等基礎上構建一組分散的時間戳服務器,僅僅像報紙或世界新聞網那樣工作是不夠的。(Adam Back)建議的哈希現金(Hashcash)6. 工作量證明機制涉及在執行隨機哈希操作時掃描特定值。例如,在 SHA-256 中,隨機散列值以一個或多個零開始。隨著零的數量增加,查找解所需的工作量呈指數增加,但只需要一次隨機散列操作來驗證結果。我們向塊中添加一個隨機數(Nonce),該隨機數應使給定塊的隨機散列值出現所需數量的零。我們通過重複嘗試找到該隨機數,直到找到為止。這樣,我們構造了一個工作量證明機制,只要 CPU 消耗的工作量能夠滿足工作量證明機制,除非等價的工作量被再次完成,否則該塊中的信息不能被更改,並且由於後續的塊都鏈接到該塊,要更改該塊中的信息,需要對所有後續的塊重做整個工作量。
同時,工作量證明機制也解決了集體投票中誰是多數的問題,如果決定多數
6 A. Back,「Hashcash - 一種拒絕服務對策」,http://www.hashcash.org/papers/hashcash.pdf,2002 年
數的方式是以 IP 地址為基礎的,一個 IP 地址一票,因此如果有人有權分配大量的 IP 地址,那麼機器的工作量證明機制實質上就是一個 CPU 一票。「多數」的決策被表示為最長的鏈,因為最長的鏈包含了最多的工作。如果大多數 CPU 都是由誠實節點控制的,則誠實鏈將儘可能快地擴展並超過其他競爭鏈。如果攻擊者想要修改現有塊,該塊的工作負載加上該塊之後的所有塊的工作負載必須重做,並最終趕上和超過誠實節點。我們稍後將展示,如果一個速度較慢的攻擊者試圖追上後續的區塊,那麼成功的概率將呈指數級下降。另一個問題是硬件的計算速度在迅速增加,節點參與網絡的程度也在波動。為了解決這個問題,工作量證明的難度將使用移動平均目標來確定。也就是說,難度點是以每小時預定的平均速率生成塊。如果塊生成得太快,則難度增加。5. 網絡運行網絡:
-
新的事務被廣播到整個網絡;
-
各節點將接收到的事務信息進行分塊;
-
每個節點試圖在其自己的塊中找到具有足夠難度的工作證明;
-
當節點發現工作量證明時,它會將其廣播到整個網絡。
-
當且僅當塊中包含的所有事務都有效並且在塊有效之前不存在時,其他節點才同意;
-
其他節點表明他們接受該塊,並且表明接受的方法跟隨塊的結尾,使一個新塊被添加以擴展鏈,並且接受的塊的隨機哈希值被認為在新塊的隨機哈希值之前。節點總是將最長的鏈視為正確的鏈並繼續工作並延長它。如果兩個節點同時廣播不同版本的新塊,其他節點將在不同時間接收到該塊。在這種情況下,他們將在第一次接收到的塊上工作,但也會保留另一條鏈,以防它成為最長的。平局在找到下一個工作量證明之前被打破,並且其中一條鏈最終被證明是較長的,然後在鏈的另一分支上工作的節點將轉向並開始在較長的鏈上工作。新事務不需要到達所有節點,只要它到達足夠的節點,塊的廣播對丟棄的消息是容錯的。
如果一個節點沒有接收到特定的塊,該節點將發現它缺少一個塊,並可以自行請求下載該塊。6. 激勵 協議是每個塊的第一筆交易是專門的,該交易生成一個由塊的創建者生成的交易,這增加了節點支持網絡和發行貨幣而不需要中央權威的動力。該發明提供了一種在持續添加一定量的新貨幣的條件下,將電子貨幣分配到流通領域的方法,這與挖掘黃金並將其注入流通的方式非常相似。CPU 時間和功耗是消耗的資源。另一個激勵來源是交易費用,其中交易的輸出少於輸入。差額是交易費用,這被添加到該塊的激勵中。進入流通,然後激勵機制可以逐漸轉換為完全依賴交易成本,然後貨幣系統可以擺脫通脹膨脹。激勵系統也有助於鼓勵節點保持誠實。如果有一個貪婪的攻擊者可以動員超過所有誠實節點的 CPU 計算能力,那麼他面臨的選擇是:要麼將其用於誠實工作以生成新的電子貨幣,他會發現遵循該規則並誠實工作更有利可圖,因為這些規則允許他擁有更多的電子貨幣,而不是破壞系統並使自己的財富受到損害。7. 回收硬碟空間 如果最近的交易已經包含在足夠的塊中,則可以丟棄該交易之前的數據以回收硬碟空間。為了確保塊的隨機哈希值不被損壞,當交易信息被隨機哈希時,它被構建為一個 Merkle 樹 7,以便只有根被包含在塊的隨機哈希值中。舊塊可以通過修剪樹的分支來壓縮。內部隨機哈希值不需要保存。
7 R.C. Merkle,「公鑰密碼系統的協議」,在 1980 年安全與隱私研討會上,IEEE 計算機學會,第 122-133 頁,1980 年 4 月。S. Haber,W.S. Stornetta,「位串的安全名稱」,在第四屆 ACM 計算機和通信安全會議論文集,第 28-35 頁,1997 年 4 月。H. Massias,X.S. Avila,和 J.-J. Quisquater,「設計具有最小信任要求的安全時間戳服務」,在比荷盧信息理論的第 20 次研討會上,1999 年 5 月。7 R.C. Merkle,「公鑰密碼系統的協議」,(Protocols for Public Key Cryptosystems)在 1980 年安全與隱私研討會上,IEEE 計算機學會,第 122-133 頁,1980 年 4 月。S. Haber,W.S. Stornetta,「位串的安全名稱」,在第四屆 ACM 計算機和通信安全會議論文集,第 28-35 頁,1997 年 4 月。H. Massias,X.S. Avila,和 J.-J. Quisquater,「設計具有最小信任要求的安全時間戳服務」,在比荷盧信息理論的第 20 次研討會上,1999 年 5 月。
區塊標頭沒有交易信息 區塊標頭的大小僅為 80 字節。如果我們將區塊生成率設置為每 10 分鐘一個,那麼每年生成 4.2 MB 的數據位。(80 字節 * 6 * 24 * 365 = 4.2MB)。在 2008 年,PC 系統的典型內存容量為 2GB,摩爾定律預測即使將所有區塊標頭存儲在內存中也不會成為問題。8. 簡化支付確認 用戶需要保留最長工作量證明鏈的區塊標頭的副本,並且可以不斷詢問網絡,直到確信它擁有最長的鏈。對於一個節點來說,檢查交易本身的有效性是不可能的,但通過回溯鏈中的某個地方,它可以看到某個節點已經接受了它,並且附加到它的區塊進一步證明了網絡已經接受了它。
在這種情況下,只要誠實的節點控制著網絡,驗證機制就是可靠的,但是當整個網絡受到計算能力上級的攻擊者的攻擊時,就變得更加脆弱,因為網絡節點可以自己確認交易的有效性,只要攻擊者能夠保持計算能力的優勢,簡化的機制就可以被攻擊者焊接(捏造的)交易欺詐。一種可能的策略是一旦他們發現無效塊就發送警報,並且接收到警報的用戶將立即開始下載被警告有問題的塊或交易的完整信息,這樣就可以判斷出不一致的地方,對於每天都有大量資金收付的業務,可能還是希望運行自己的 complete 節點,以保持更大的獨立完整性和校驗快速性。
9. 價值的組合與分割(合併和分割價值)雖然可以單獨處理電子貨幣,但單獨為每種電子貨幣啟動交易是笨拙的。為了使價值易於聯合收割機和分割,交易被設計為合併多個輸入和輸出。一般來說,一個輸入由一個較大值的前一筆交易組成,或者一個並行輸入由幾個較小值的前一筆交易組成。但是,最多有兩個輸出:一個用於支付,一個用於找零(如果有的話)。應當注意,雖然一個事務依賴於多個先前的事務,每個先前的事務依賴於多個事務,但是這不是問題,因為該機制不需要擴展所有先前事務的歷史。
10. 隱私權
傳統的造幣廠模型為交易參與者提供了一定程度的隱私,因為從可信第三方獲取交易信息的嘗試受到嚴格限制。但向整個網絡廣播交易信息意味著這種方法是無效的。但隱私仍然可以得到保護:保持公鑰的匿名性,公眾只知道某人向另一個人發行了一定數量的錢,但很難將交易與特定的人聯繫起來,即,公眾很難確定這些人是誰,這就像證券交易所公布的信息,每一次股票銷售的時間和數量都有記錄,可供查詢。但是交易雙方的身份並沒有被公開。作為額外的預防措施,用戶可以為每筆交易生成一個新的地址,以確保交易不會被追溯到共同的所有者。但是,由於並行輸入,某種程度的可追溯性是不可避免的,因為並行輸入意味著貨幣屬於同一個所有者,風險在於如果某人的一個公鑰被確定為屬於他,很多其他交易都可以追溯到那個人。
11. 計算假設以下情況:攻擊者試圖以比誠實節點創建鏈更快的速度創建替代區塊鏈。即使這樣,系統也不會完全任由攻擊者擺布,憑空創造價值或掠奪不屬於攻擊者的金錢。這是因為節點不會接受無效交易,而誠實節點永遠不會接受包含無效信息的區塊。攻擊者所能做的,最多,他改變自己的交易信息,並試圖拿回他剛剛支付給別人的錢。誠實鏈和攻擊者鏈之間的競賽可以描述為二進制隨機遊走。成功事件定義為誠實鏈延伸一個區塊,使其領先 + 1,而失敗事件是攻擊者鏈
攻擊者成功填補缺口的概率可以近似為賭徒破產問題,假設一個賭徒有無限的透支信用,並開始進行無限次的下注,試圖填補他的缺口,那麼我們可以計算他填補缺口的概率,即攻擊者趕上誠實鏈的概率,如下所示:=𝑝誠實節點生成下一節點的概率𝑞= 攻擊者生成下一節點的概率𝑞𝑧= 攻擊者最終閉合 z 個塊差距的概率
如果付款人沒有足夠的運氣迅速成功,他成功的機會會隨著時間的推移而變得越來越小。讓我們考慮收款人要等多久才能充分确信付款人已經使交易難以改變。讓我們假設付款人是一個付款攻擊者,他想讓收款人相信他已經付款一段時間了。然後,它立即將付款償還給自己。雖然收款人會在那時發現這一點,但為時已晚。收款人生成一個新的密鑰對,然後有很短的時間將公鑰發送給付款人。這防止了以下情況:付款人提前準備好一條區塊鏈,繼續運行該區塊,直到運氣讓他的區塊鏈超越誠實之鏈,在這種情況下,交易一發出,攻擊者就秘密準備一條包含交易替代版本的平行鏈,收款人隨後等待交易出現在第一個區塊,然後等待 z 個區塊跟隨,此時,他仍然不知道攻擊者已經前進了多少個區塊,但假設誠實的區塊將花費平均期望時間來產生一個區塊,攻擊者的潛在進展是泊松分佈,期望為
在這種情況下,為了計算攻擊者追上的概率,我們將攻擊者已經取得進展的區塊數量的泊松分佈的概率密度乘以攻擊者仍將追上該數量的概率。
通過將其簡化為以下形式,避免對無窮級數求和:
編寫以下 C 代碼:
#包括
雙倍攻擊者成功概率(double q,int z)
sum -= 泊松 *(1 - 幂(q /p,z-k));} 返回總和;}
在此基礎上,我們可以得到以下概率結果,並發現概率隨 z 的值呈指數下降。
12. 結語
我們在這裡提出一種不需要信用中介的電子支付系統。我們首先討論傳統電子貨幣的電子簽名原理。雖然這種系統提供了對所有權的強有力控制,但不足以防止重複支付。為了解決這個問題,
本文提出了一種帶有工作量證明機制的 P2P 網絡,它記錄了交易的公開信息。只要誠實節點能夠控制大部分 CPU 計算能力,攻擊者就很難修改交易記錄。網絡的健壯性在於它的結構簡單,節點之間的大部分工作是相互獨立的,幾乎不需要合作,每個節點不需要識別自己,對交易信息的流動路徑沒有要求,只需要儘可能的傳播,節點可以隨時離開網絡,並且由於它們只需要在離開網絡期間補充工作量證明鏈,所以重新加入網絡非常容易。節點通過它們的 CPU 計算能力來投票確認它們的有效塊,並且他們繼續擴展有效的區塊鏈以表示他們的確認,並且拒絕擴展無效區塊之後的區塊以表示拒絕。
該框架包含 P2P 電子貨幣系統所需的所有規則和激勵措施。