深入比特币原理(一)——比特币白皮书总结与点评
2008年,中本聰發布了比特幣白皮書《一種點對點的電子現金系統》,從此開啟了區塊鏈技術的新天地,雖然中本聰在2011年后銷聲匿跡,但白皮書中涵蓋了中本聰最希望傳遞的比特幣的世界觀,對于每一個區塊鏈入門者都是必讀,以下為個人的總結與點評
1.介紹(Introduction)
基于信任模型的交易:
(1)傳統金融中介增加成本
(2)支付交易可逆,欺詐不可避免
基于密碼學原理:
(1)點對點交易,不存在金融中介
(2)不可回滾的支付交易,防止欺詐
個人點評:本節強調的是目前傳統的中心化金融模型有許多不可避免的問題,可以通過密碼學保證的分布式賬本解決。
2.交易(Transactions)
每一位電子貨幣所有者通過對前一次交易和貨幣接受者的公鑰(pubilc key)簽署一個hash數字簽名,然后發送給下一位所有者。
(1)收款人使用付款人的公鑰(public key)校驗,是否是正確的付款人發送
(2)由于交易中有收款人的公鑰,所以只有收款人使用自己的私鑰才能解鎖并將該貨幣傳遞下去
但以上過程仍然有問題,無法解決雙重支付問題,即貨幣所有者將同一電子貨幣簽名后發送給多個收款人。
傳統金融:通過中介機構判斷并確認用戶是否進行雙重支付
比特幣:通過公開宣布貨幣的所有交易,形成唯一公認的歷史交易序列,由系統內所有參與者認同交易
個人點評:通過非對稱加密的公私鑰,可以解決虛擬貨幣的歸屬權問題,但是同一個貨幣可以由歸屬人付給多個人,也就是雙重支付,僅使用加密在貨幣體系里是不夠的。(這里其實隱含了貨幣體系必須要有人記賬)
3.時間戳服務器(Timestamp server)
對區塊形式存在的一組數據實施隨機散列(HASH)加上時間戳,將區塊連成一個鏈條,形成區塊鏈
個人點評:本節實際上給出了比特幣賬本的雛形,也是區塊鏈(Blockchain)名稱的來源,每一個區塊就是一頁賬本,他們的順序是由時間戳來決定,由Hash函數保障賬本的真實性。
4.工作量證明(Proof-of-Work)
計算一個隨機數(Nonce),將隨機數與區塊頭一起計算隨機散列值(Hash),該散列值要滿足以N個0開頭(N為變量,可通過N來控制計算難度,N越大,難度越大),此即為“挖礦”的內部原理。
工作量證明的用途:
(1)保證區塊鏈(Blockchain)的不可篡改性,由于區塊形成了鏈條,如果要修改區塊,必須重新完成之前所有的工作量,所以隨著區塊鏈高度越高,越舊的區塊越難以篡改。
(2)工作量證明的本質是一CPU一票(與傳統的一IP一票不同,攻擊者要獲得更多的票數需要投入大量的成本),如果大多數的CPU為誠實節點,那么正確的鏈條將以最快的速度延長。
個人點評:上一節的模型能保證賬本的順序和真實性,但是無法阻止人為的創造多個賬本,而這些賬本中只能有一個是被大家認可的,所以必須創造一種共識機制。比特幣的共識機制即為工作量證明(POW),即工作量(Hash計算)最大的那個賬本是大家公認的正確賬本。
5.網絡(Network)
網絡的運行步驟如下:
(1) 新的交易向全網進行廣播;
(2) 每一個節點都將收到的交易信息納入一個區塊中;
(3) 每個節點都嘗試在自己的區塊中找到一個具有足夠難度的工作量證明;
(4) 當一個節點找到了一個工作量證明,它就向全網進行廣播;
(5) 當且僅當包含在該區塊中的所有交易都是有效的且之前未存在過的,其他節點才認同該區塊的有效性;
(6) 其他節點表示他們接受該區塊,而表示接受的方法,則是在跟隨該區塊的末尾,制造新的區塊以延長該鏈條,而將被接受區塊的隨機散列值視為先于新區快的隨機散列值。
兩個節點如果同時完成了工作量證明,并進行廣播,由于網絡傳輸的原因,可能出現兩條一樣長度(工作量)的鏈條,該情況要等下一個工作量證明被發現來判斷哪一條最長。
個人點評:全網的節點(礦工),將通過努力完成工作量證明來爭奪將新區塊寫入區塊鏈的權利(記賬),如果有人先完成并被確認有效,所有節點就會轉向爭奪下一個區塊的寫入權。
6.激勵(incentive)
(1)通過完成工作量證明,可以獲得一定量新的電子貨幣作為激勵
(2)另外一個激勵為交易費,如果比特幣(2100萬枚)全部已進入流通,激勵將完全依靠交易費,使貨幣免于通貨膨脹
激勵系統也有助于鼓勵節點保持誠實,如果一個攻擊者擁有大量的算力,他利用這些算力進行挖礦收益很可能高于攻擊比特幣網絡。
個人點評:網絡節點(礦工)爭奪記賬權相應的必須有一定的激勵,否則沒有人有動力去記賬,這種激勵就是記賬人可以獲得一定量的新比特幣和交易費。(比特幣的產出量為記錄一個塊50枚比特幣,每4年減半,2018年已經經過兩次減半,目前為12.5枚)
7.回收硬盤空間
交易信息構成Merkle樹的形態,通過merkle樹的原理可知,只需要根節點(root)與路徑即可驗證交易的正確性,使得用戶只需要存儲區塊頭(含有Merkle root),在需要時獲取Merkle樹路徑即可校驗一筆交易。
不含全部交易信息的區塊頭(Block header)僅80字節,區塊生成速率約為10分鐘一個,每一年只產生數據4.2MB
個人點評:比特幣的區塊頭始終只有80字節,卻可以包含交易相關信息,即是利用梅克爾樹記錄交易,在區塊頭放入梅克爾根(梅克爾樹我們在后面章節會詳細討論)。
8.簡單的支付確認
在不運行完整網絡節點的情況下,也能夠對支付進行校驗。節點只需保留區塊頭,通過merkle的分支校驗某次交易是否存在即可。
個人點評:早期的比特幣賬本數據量較小,全網節點實際都是全節點(存儲賬本所有數據),但是中本聰在設計初已經預見到賬本容量隨著時間持續膨脹,全節點的負擔將會越來越重。此時可以使用只保留區塊頭的方式,利用梅克爾樹來驗證交易,這樣可以大大減少節點的存儲占用空間。
9.價值的組合與分割(Combining and Splitting Value)
每次發起一次交易,輸入可以有多個,輸出只有兩個:一個用于支付,另一個用于找零
個人點評:比特幣作為貨幣,需要具備可靈活分割合并使用的特性,通過輸入輸出的分割與合并使交易變的非常靈活。
10.隱私(Privacy)
傳統模型:金融中介提供一定的隱私保護
比特幣:通過公鑰生成的地址,交易雖然在全網廣播,但公眾能得到的信息僅為某人將一定數量的比特幣發給了另外一個人,但無法確認這些人是誰。
個人點評:由于比特幣的賬本是全網公開的,所以隱私保護是一個重要課題,比特幣利用公鑰Hash作為交易地址來對外表現交易的輸入輸出過程,這里有兩個好處:
(1)由于公私鑰是隨機生成的,僅知道公鑰Hash并不能知道具體是誰做了交易
(2)某公鑰地址的私鑰持有人,能隨意支配該地址上鎖定的貨幣,但沒有人知道誰是真實的私鑰持有人
11.計算
攻擊者即使擁有了巨大的算力,也僅能更改他自己的交易信息,試圖拿回他剛付給別人的錢(雙重支付)或者拒絕別人的交易信息。無法憑空創造價值或掠奪別人的貨幣。
--后面內容涉及較多數學計算,不再詳述,有興趣的自行翻閱白皮書。
個人點評:工作量證明有一個風險,就是有人如果控制了全網大量的算力(如超過51%),實際上他可以控制大部分的記賬權,對于比特幣網絡將產生風險。但是比特幣的設計將這種風險產生的后果降到了較低的水平:
(1)由于僅有算力,沒有私鑰,無法隨意掠奪別人的貨幣。
(2)雖然他可以拒絕別人的交易計入賬本,但這種破壞實際并不會對別人造成貨幣的損失。
(3)他還可以試圖進行雙重支付,但如果在大額交易中對方進行多個塊(如6個以上)確認來驗證交易,仍然很難完成雙重支付。并且這種攻擊發生會很容易被察覺,比特幣社區可以快速做出應對。
綜上所述,進行51%算力攻擊需要花費巨大的成本,但是獲益其實并不大,如果能掌握51%算力,進行攻擊的收益可能遠不如成為一個誠實節點進行挖礦的收益。當然如果有人以破壞比特幣網絡為目的,并完成51%算力攻擊,勢必會對比特幣產生影響,但并不可能殺死比特幣。
白皮書鏈接:https://github.com/GammaGao/bitcoinwhitepaper/blob/master/bitcoin_en.pdf
作者:Aaron
總結
以上是生活随笔為你收集整理的深入比特币原理(一)——比特币白皮书总结与点评的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 骈文的特点(什么是骈文)
- 下一篇: 怎么创建具有真实纹理的CG场景岩石?