背景:2008年,國際金融危機下,人們因為金融系統的崩潰,從而失去工作,甚至有人傾家蕩產, 這時候,有一個網路極客看到這一幕幕人間慘劇,心裡暗罵:為什麼華爾街這幫傢伙造的孽需要全球來買單? 我要改變這種情況.
於是,這位現代俠客開始了他的計劃,他先是在2008年在網路上釋出<比特幣:一種點對點的電子現金系統>,一場偉大的社會實驗就此開始.
比特幣的實質是去中心化的電子記賬系統.
通常來講我們會透過銀行進行記賬, 銀行是以國家來為其背書的.所以大家都願意去相信銀行,並且把錢存在裡面.
比特幣的設計原理規避了銀行這種中心化的架構.
基本原理說明:
比如現在有A\B\C\D 四個人, 如果互相之間發生交易(如A給B10個比特幣,B給C3個比特幣,etc.),會把資訊公開告訴所有人,然後每個人都要進行記賬. 那麼問題來了:
1.ABCD憑什麼要記賬
2.最後以誰的賬本為準
3.如何防偽?
4.如何防止雙重支付?
5.如何防止篡改?
接下來一個一個來看中本聰同學是如何解決這些問題的.
1.ABCD憑什麼要記賬
記賬有獎勵,想讓人做某件事情,就是讓他有獎勵.人性哪.
1)記賬的人會得到手續費,比如A付給B10塊錢,C記的賬,C會從中得到一定的手續費.
2)打包獎勵,只能有一個人完成打包,打包會有人得到獎勵. 完成打包的人會得到50個比特幣(BTC)的獎勵
打包 注:中本聰設計賬本記錄要在10分鐘左右完成一個打包,打包的結果我們稱為區塊(區塊內約有4000條交易記錄) 據以上,可以算出比特幣大概有多少個, 20*6*24*365*4*1+1/2+(1/2)^2+....)=2100萬個
2.最後以誰的賬本為準
工作量證明(Proof of work) 簡單理解就是,系統會出一個很難的數學題,如果誰先做出來了,就可以獲得獎勵.但是這個數學題非常難,難到只能透過窮舉法,一個一個試出答案,試答案的過程我們就叫做挖礦.
引申:雜湊函式sha256("美女")=256位的二進位制數
這個函式的特點在於,你隨便輸入什麼,都能很快的得到256位的二進位制數.
舉個類比的例子說明:對於X^5+LOG2X=Y, 如果你輸入X=a, Y
快就能算出來,但是給你Y,讓你算X,就會難得多.而雜湊函式就比這個還要難很多.
挖礦原理:
D-D-D-D-…
以上每個D代表一個區塊,每個區塊的裡面包含的資訊: 前塊頭部+賬單資訊+時間戳+隨機數=字串(先不要管字串怎麼來的)
對字串進行雜湊運算 HASH=SHA256(字串)=256位的二級制數
對256位的二級制數, 通常會要求前n位為0(通常設定難度即設定n的大小,調整n的大小來控制出塊時間),如果誰先試出來這個結果,就有資格去打包區塊. 這個幸運兒就能再把一個新的D(區塊)接到上面的區塊鏈中.並獲得相應獎勵.
要怎麼算出來這個256位數字. 就需要挖礦的人(礦工)不停的進行試以上公式中的隨機數.直到試出來.
注意,每個人在計算的時候難度是不一樣的,因為每個人記錄的賬單資訊和時間戳及個人資訊都不一樣.但是一般來講,誰的算力更強,即試得更快更多,誰挖到的機率就大.
3.如何防偽?
先從身份認證說起,傳統的身份認證方式有簽名\指紋\人臉等,但是不夠安全,現實中易被偽造
如何解決這個問題呢?
電子簽名!
怎麼來的: 隨機數-->私鑰-->公鑰-->地址
公鑰和地址可以公開,比如你想讓人轉錢給你,可以把公鑰和地址給他. 但是私鑰要保密,不能給!
私鑰可以算出公鑰,但是公鑰算不出來私鑰,密碼學上這種關係稱為 非對稱加密
透過例項來理解:
比如A給B轉1個比特幣,A會對這個資訊<A to B 1 BTC>進行HASH雜湊運算得到一個摘要,然後利用私鑰對摘要進行加密得到密碼. 然後A要對全網進行廣播這個資訊<A to B 1 BTC>+<公鑰>+<密碼>
比如C聽到廣播後, 會進行驗證這條資訊是不是真實發生的. C會對<A to B 1 BTC>進行雜湊得到摘要1,同時用A提供的<公鑰>+<密碼>得到摘要2,如果摘要1=摘要2,就說明這條資訊確實是A用自己的私鑰加密出來的. 如果不一樣,就說明這條資訊是偽造的,不是A發起這筆交易的
4.如何防止雙重支付?
1)首先要理解餘額檢查-追溯法,比如你要付錢給別人,至少要證明有足夠的錢. 比如A給B轉1個比特幣, 那麼在歷史的區塊鏈上就可以看到過往的記錄,看是否A在歷史上得到過1個比特幣.
2)什麼是雙重支付,也叫雙花,就是同一筆錢你用了兩次,比如A同時發出兩條訊息1-A 付錢給B 1個BTC, 2-A 付錢給C1個BTC. 網路上接收到這兩個訊息的人時間不一樣. 此時比如D先接收到1-A 付錢給B 1個BTC並且算出了數學題,然後打包區塊並接上鍊.此時1-A 付錢給B這條資訊會被確認,而 2-A 付錢給C1個BTC就會被放棄.
5.如何防止篡改?
先來理解最長鏈原則,如果網路中有A和B幾乎同時算出了數學題並進行打包上鍊後怎麼辦,此時鏈上會有兩個分叉,這個時候我們透過時間來解決,看兩條鏈過一段時間後哪一個最長,最長鏈的那條會有越來越多的人站位直到最後所有人拋棄那條短的鏈
理解之後我們再來看如何防止篡改
比如A之前發生過一筆交易A to B 1個比特幣,但是A想對這條記錄進行篡改怎麼辦?
回到我們的鏈來 D1-D2-D3-D4-…
比如A想篡改的這筆交易發生在D2區塊,他需要從D1往後開始篡改,這個工作量會很大,相當於一人對抗全世界.理論上如果A的計算能力超過所有人,他是可以完成篡改的. 但是這種機率會很小,首先沒有人有如此大的計算能力,至少在可預見的未來沒有;其二,如果他有這麼大的計算能力,他可以繼續挖礦賺錢(除非他是瘋子或者科學怪人)否則不會去做分叉.
總結,透過以上五個問題的解決,中本聰同學探索出了一條不需要銀行等中間商從而實現人人認可的記賬方案.這是一個偉大的發明.而且即將對未來的人類社會造成巨大的影響. 比特幣只是區塊鏈的一個應用,猶如電燈之於電力的發明. 實際上底層技術是區塊鏈技術,這個技術會大大降低人與人,點對點的信任成本.從而降低社會執行的成本.
其實還有很多細節的問題沒有提到,感興趣的同學可以瞭解 拜占庭將軍問題-如何解決惡意節點從而保證資訊的一致性等.
文章內容借鑑李永樂老師影片內容,並加以個人理解.僅用作學習與分享,不做任何商業用途.希望將區塊鏈的知識分享給有緣人.
閣閣