STAR BIT Select STAR BIT 精選

  • 今日情報
  • 獨立觀點
  • STAR BIT 精選

比特幣是什麼?讓發明人中本聰的論文告訴你(下)

banner

Inside 2017-06-09

  • 中本聰
  • Blockchain
  • 技術

隨著比特幣今年暴漲,開始看到有更多人對用區塊鏈技術實現的加密貨幣產生興趣,所以就趁著連假把比特幣發明人 -- 中本聰 於 2008 年發表的 比特幣白皮書 重新翻譯,提供給大家參考!此篇為論文的後半部分,前半部分在 上一篇 。 白皮書的內容為當初中本聰建構比特幣時的架構,現今的比特幣系統與白皮書有部分出入,詳情可參考 比特幣網站 及相關論壇。 若內容有任何錯誤或疑問,非常歡迎大家指正及回饋:) 《Bitcoin: A Peer-to-Peer Electronic Cash System》 — Satoshi Nakamoto 七、 回收磁碟空間(Reclaiming Disk Space) 當一個貨幣的最新交易被整合進足夠數量的區塊中,則可丟棄在此交易之前的資料以節省磁碟空間。為了不破壞區塊的 hash,交易資訊會被 hash 至一顆 Merkle Tree 中,且只有根包含在區塊 hash 中。舊的區塊接著可藉由去除樹的分支來壓縮,內部的 hash 也不需要被保存。 ▲回收磁碟區(Reclaiming Disk Space) 不含交易資訊的區塊標頭(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) 傳統銀行的模式是藉由限制交易的參與者及信任的第三方取得資訊的權限來達到一定程度的隱私,但若公開發佈所有交易就牴觸了上述的方法,但仍可藉由保持公開金鑰的匿名性來維持隱私。大眾可以看到某人傳了一筆金額給另一人,但卻無法得知這筆交易對應到誰。這和股票交易所釋出的交易資訊是同樣等級的,也就是可以知道交易發生的時間與交易量,但無法得知交易的兩方是誰。 作為額外的預防措施,一對新的金鑰應該讓每筆交易避免被鏈結到同一個擁有者。有些鏈結仍不免為多重輸入的交易,這也代表這些輸入被同一人所擁有,這樣的風險在於一旦擁有者的金鑰被揭露,這些鏈結可能也會同時揭露了來自這個擁有者的其他交易。 十一、計算(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 運算能力來進行投票,表決對有效區塊的驗證,以不斷延長有效的區塊鏈來表示接受,而以拒絕在無效的區塊之後延長來表示拒絕。這個共識機制包含了一個端對端的電子貨幣系統所需要的所有規則及獎勵機制。 [參考資料] W. Dai, “b-money,” http://www.weidai.com/bmoney.txt, 1998. 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. S. Haber, W.S. Stornetta, “How to time-stamp a digital document,” In Journal of Cryptology, vol 3, no 2, pages 99–111, 1991. 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. 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. A. Back, “Hashcash — a denial of service counter-measure,” http://www.hashcash.org/papers/hashcash.pdf, 2002. R.C. Merkle, “Protocols for public key cryptosystems,” In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122–133, April 1980. W. Feller, “An introduction to probability theory and its applications,” 1957. [註 1] 對於中本聰這篇論文中提到的攻擊者與誠實鏈之間的競爭分析,此篇 論文 提出了修正與更新。

比特幣是什麼?讓發明人中本聰的論文告訴你(上)

banner

Inside 2017-05-31

  • 中本聰
  • Blockchain
  • 技術

原文《Bitcoin: A Peer-to-Peer Electronic Cash System》,譯文《比特幣:端對端電子現金系統 I》刊登於 Medium,INSIDE 獲授權轉載。譯者林聖祐,準資科所學生,期盼能透過資料認識世界,用資料改變世界。 Photo credit: 林聖祐 隨著比特幣今年暴漲,開始看到有更多人對用區塊鏈技術實現的加密貨幣產生興趣,所以就趁著連假把比特幣發明人 -- 中本聰 於 2008 年發表的 比特幣白皮書 重新翻譯,提供給大家參考!此篇為論文的前半部分,下半部分在 下一篇 。 白皮書的內容為當初中本聰建構比特幣時的架構,現今的比特幣系統與白皮書有部分出入,詳情可參考 比特幣網站 及相關論壇。 若內容有任何錯誤或疑問,非常歡迎大家指正及回饋:) 《Bitcoin: A Peer-to-Peer Electronic Cash System》 — Satoshi Nakamoto 零、 摘要 完全以端對端(peer-to-peer)技術實現的電子現金系統允許線上支付可以不必透過金融機構而直接從某一方傳送。雖然 數位簽章(digital signature) 解決了部分的問題,但若需要信任的第三方才能避免雙重支付(double-spending)的話,這個系統就沒有價值了。我們提出了一個端對端的網路來解決雙重支付的問題,此網路透過以下方式對每一筆交易做 時間戳記(timestamp),也就是將每一筆交易 雜湊(hash) 到一個「基於雜湊的工作量證明」(hash-based-proof-work)組成的一條不斷延伸的鏈(chain)上,除非重新完成所有工作量證明,這些紀錄將不能被更改。最長的鏈不僅扮演了一連串目擊事件的證明,也證明了它來自於一個 CPU 運算能力很大的池。只要多數的 CPU 運算能力都由不會聯合攻擊網路的節點(node)所控制的話,誠實的節點就會產生一條最長且超越其他攻擊者的鏈。這個網路本身需要的基礎建設很少,訊息會依據最大努力原則(best effort basis)廣播出去,而節點可自由選擇離開或重新加入網路且接受最長的工作量證明所組成的鏈作為節點離開時所發生的交易事件之證明。 ㄧ、介紹 網際網路的商業應用幾乎都仰賴金融機構作為處理電子支付之信任的第三方。雖然系統在大多數情況下都能運作良好,但這類系統仍有以信任為基礎的模式這項固有的缺點。由於金融機構無法避免出面調解爭議,因此完全不可逆的交易並不真的可行。因為調解成本而提高的交易成本,將會限制最小的實際交易規模、限制了日常小額支付、失去為不可逆之服務進行的不可逆支付的能力進而造成更廣泛的成本。可逆性的服務讓信任的需求增加,商人必須更加警惕自己的客戶,因此會向他們索取完全不必要的個人資訊。一定比例的詐騙可以被接受為無法避免的。以上這些成本及支付的不確定性在使用實體貨幣時皆可避免,但透過一個缺乏第三方信任的溝通渠道進行支付的機制並不存在。 我們所需要的是一個以加密證明取代信任的電子支付系統,且允許任何達成共識的雙方能夠直接交易,而不需信任的第三方參與。計算不可逆(computaionally impractical to reverse)的交易可以避免賣方受騙,而常規性托管機制(routine escrow mechanisms)則可以輕易地讓買方被保護。在這篇論文中,我們透過一個端對端的分散式時間戳記伺服器去產生按時間排序的交易之計算證明進而解決了雙重支付的問題。只要誠實的節點能夠共同合作去控制比攻擊者族群更多的 CPU 運算能力,這個系統就會是安全的。 二、交易(Transactions) 我們定義一顆電子貨幣為一串數位簽章。每位擁有者為前一個交易及下一位擁有者的 公開金鑰(public key) 簽署一個雜湊的數位簽章,並將之加入一顆貨幣的尾端,透過上述的方式將貨幣發送給下一位擁有者。收款者可以透過檢查簽章(signature)來驗證該鏈的擁有者。 ▲交易(Transactions) 這個過程的問題在於收款者無法驗證擁有者是否對這顆貨幣進行雙重支付。一般解法為導入一個信任的中央權威機構或是造幣廠來驗證每一筆交易,以防止雙重支付。在每一筆交易之後,貨幣必須送回造幣廠以發行新貨幣,且只有直接從造幣廠發行的貨幣才會被信任為沒有雙重支付。然而,這個解法的問題在於整個金錢系統的命運皆仰賴在像銀行一樣會經手每筆交易的造幣廠公司。我們需要一個方法讓收款者知道前一位擁有者並沒有簽署更早發生的交易,由於我們計較的是在此之前發生的交易,因此不用在意在此之後是否有雙重支付。證實交易存在的唯一方法是去意識到所有交易的發生,而在以造幣廠為基礎的模式中,造幣廠必須意識到所有交易並決定交易完成的先後順序。為了在沒有信任的第三方的之情況下達到目的,交易必須被公告,且我們需要一個讓所有參與者在他們接收的順序上達成共識的系統。收款者需要確保在交易期間絕大多數的節點都認同該交易是首次出現。 三、時間戳記伺服器(Timestamp Server) 我們提出的解法先由時間戳記伺服器說起。時間戳記伺服器會將由很多交易組成的區塊(block)所對應之雜湊加上時間戳記,並如同在報紙或 Usenet 中發送的方法將雜湊進行廣播。時間戳記證明了資料在進入雜湊時必然存在。每個時間戳記應將前一個時間戳記加入其雜湊中,之後的每一個時間戳記都和前一個時間戳記進行增強 (reinforce),而形成了一條鏈。 ▲時間戳記伺服器(Timestamp Server) 四、 工作量證明(Proof-of-Work) 為了在端對端的基礎上去實現一個分散式時間戳記伺服器,我們需使用一個類似 Adam Back 提出的 Hashcash 技術的工作量證明系統,而非像報紙或 Usenet 的發送方法。工作量證明包括掃描一個數值,以 SHA-256 安全雜湊演算法(Secure Hash Algorithm)為例,雜湊值以一個或多個 0 開始。平均而言,隨著 0 的數目上升,所需之工作量將呈指數增加,且可藉由執行一次雜湊運算即完成驗證。 在我們的時間戳記網路中,我們藉由增加區塊中 nonce 的數量直到提供區塊所對應之雜湊足夠數量的 0 之 nounce 值被發現來完成工作量證明。一旦 CPU 的貢獻擴大到足以滿足工作量證明,除非重新完成一定的工作量否則該區塊無法被更改。當後來的區塊在此之後被鏈結上,若想更改區塊,則需要完成之後所有區塊的工作量。 ▲工作量證明(Proof of Work) 工作量證明也解決了多數決代表的問題。如果多數是建立在一個 IP 位址對應一票的基礎上,則會被任何可以擁有許多 IP 者所推翻。工作量證明本質上是一個 CPU 對應一票。多數決代表為最長的鏈,因為最長的鏈包含了最大的工作量。如果大多數的 CPU 運算能力是由誠實的節點所控制,則此誠實的鏈將會成長為最快速且超越任何一條競爭者的鏈。若要修改先前的區塊,攻擊者必須重新完成該區塊及在它之後的所有區塊的工作量證明,並趕上且超越誠實節點之工作量。我們稍後會說明較慢的攻擊者趕上的機率會隨著之後的區塊增加而呈指數消減。 為了解決因硬體速度的增加及節點參與網路的程度起伏之問題,工作量證明的難度是由每小時平均產生之區塊數量而決定。如果區塊的產生越快速,則難度也會隨之增加。 五、網路(Network) 以下是網路運作的步驟: 新的交易會向所有節點廣播 每個節點會蒐集加入區塊的新交易 每個節點負責為其區塊找到一條夠困難的工作量證明 當節點找到工作量證明後,會向所有節點廣播 節點只有在節點中的所有交易為有效且尚未存在過時,才會接受區塊為有效的 節點會使用已接納之區塊的雜湊作為之前的雜湊來創造鏈上的新區塊,來表示接受該區塊 節點始終會將最長的鏈視為正確的且持續延長。若有兩個節點同時廣播兩個不同版本的新區塊,部分節點可能會先接收到其中一種。在這種情況下,節點會先處理先接收到的區塊,但也會保存另一條分支鏈以免它變成最長的鏈。當下一個工作量證明被發現且其中一條鏈被證實為較長的一條時,這樣的僵局會被打破,此時,原本在另一條分支鏈上工作的節點會轉而處理較長的這條鏈。 新交易的廣播並不一定要觸及所有節點,只要這些交易廣播到足夠多的節點,不久後這些交易就會被整合進一個區塊。區塊的廣播同樣可以容許漏掉訊息,若某個節點沒有接收到特定區塊,當這個節點接收到下一個區塊時,就會認知到它遺漏了一個區塊並可提出自己下載該區塊的請求。 六、 獎勵(Incentive) 按照慣例,區塊中的第一個交易較特別,因為它產生了一顆由該區塊建立者所擁有的新貨幣。這激勵了節點去支持整個網路,且在沒有中央權威機構發行貨幣的情況下,提供了初期貨幣流通的方法。新貨幣數量的穩定增加和礦工為了增加黃金流通而耗費資源去挖礦類似。而在我們的案例中,耗費的資源是 CPU 運算時間和消耗的電力。 獎勵也可以來自於交易手續費。交易的輸入值減掉輸出值即為交易的手續費,提供交易所在之區塊的獎勵。一旦既定數量的貨幣進入流通,獎勵機制就可以完全依靠交易手續費且能免於通貨膨脹。 獎勵機制也有助於鼓勵節點保持誠實。若有貪婪的攻擊者能夠裝備比所有誠實節點還要多的 CPU 運算能力,那麼他將面臨以下選擇:進行雙重支付的攻擊或是用於誠實工作來產生新貨幣,他將會發現遵循規則將是更有利可圖的,因為比起破壞系統及自身財產的合法性,遵守規則能夠使他擁有更多的電子貨幣。

  • 1
  • 2

近期活動

  • Module D: 如何迎戰數位金融時代資訊安全的新考驗 (共2班次)
  • 無痛上手公司網站架設與人才招募管理(開源且資料自主的 Odoo)
  • 【資策會MIC】洞察顧客需求!10/14 剖析行銷心法:消費者行為解密

匯率轉換器

熱門貨幣

1
icon BITCOIN
lineGraph
  • 漲跌幅(24h) -0.21042%
  • 價格 $10700.31
  • 成交量(24h) $18,489,735,600
2
icon ETHEREUM
lineGraph
  • 漲跌幅(24h) -0.22483%
  • 價格 $355.15
  • 成交量(24h) $5,755,880,375
3
icon TETHER
lineGraph
  • 漲跌幅(24h) -0.04095%
  • 價格 $1
  • 成交量(24h) $28,679,008,875
4
icon XRP
lineGraph
  • 漲跌幅(24h) -0.21598%
  • 價格 $0.239939
  • 成交量(24h) $1,348,481,020
5
icon BINANCE COIN
lineGraph
  • 漲跌幅(24h) 1.99656%
  • 價格 $28.97
  • 成交量(24h) $410,089,260
6
icon BITCOIN CASH
lineGraph
  • 漲跌幅(24h) -0.47699%
  • 價格 $225.76
  • 成交量(24h) $1,918,257,783
7
icon POLKADOT
lineGraph
  • 漲跌幅(24h) -2.28027%
  • 價格 $4.31
  • 成交量(24h) $99,686,911
8
icon CHAINLINK
lineGraph
  • 漲跌幅(24h) 0.34648%
  • 價格 $9.79
  • 成交量(24h) $761,495,182
9
icon BITCOIN SV
lineGraph
  • 漲跌幅(24h) 3.8183%
  • 價格 $176.49
  • 成交量(24h) $638,145,337
10
icon CARDANO
lineGraph
  • 漲跌幅(24h) 0.4329%
  • 價格 $0.099322
  • 成交量(24h) $425,160,303

貪婪指數

Crypto Fear & Greed Index

礦工費 & 處理時間 (Ethereum)

  • gas fastest

    Fastest

    ~m

    Gas Price (gwei):NaN

  • gas fast

    Fast

    ~m

    Gas Price (gwei):NaN

  • gas slow

    Slow

    ~m

    Gas Price (gwei):NaN

  • 礦工費越高將會加快您的交易處理速度

本網站不支援IE,請使用Chrome瀏覽器以達最佳瀏覽效果。