15分鐘讀懂中本聰比特幣白皮書開始裝逼(2)

15分鐘真讀不完……@@

上次說到

如果你在發送文件『波多野結衣教學視頻第二講第三小節』時,用哈希函數做一個摘要(可以理解為『壓縮』),把『波多野結衣教學視頻第二講第三小節』壓縮成『波視節』三個字,然後用你的私鑰XXOO把『波視節』三個字加密成『ABP』這3個字母,把『ABP』這3個字母放在你發出去的文件旁邊,這3個字母就能證明這個文件是你簽署的。

為什麼呢?

因為私鑰加密的東西只有公鑰能解密,所以如果我收到了你發給我的一個包裹,裡面包括兩個文件,一個寫著『原文件』,一個寫著『我用私鑰加密過』,我用你的公鑰解密後者,得到了和『原文件』一樣的東東,我就可相信這個東西是你發的了,對么?

回到上面說的例子,我用你的公鑰123456解密『ABP』,得到了『波視節』三個字。然後再同樣把你發給我的『波多野結衣教學視頻第二講第三小節』用哈希函數做一個摘要,也得到了『波視節』三個字。居然一樣!那我相信這東西就是你做的!

就這樣,這個莫名其妙的『ABP』在這件事情上就成為了你的數字簽名,可以證明這事兒是你認的。

可是,可是,發個文件,這樣做沒問題,你把『波多野結衣教學視頻第二講第三小節』發給張三和我,皆大歡喜。可如果這是100塊錢呢?你只有100塊,可是你發給張三之後,又發給我,我們倆都查了你的數字簽名也查不出錯,你就可以把100塊錢花兩遍!這就是經典的『雙花』問題(記得裝逼時要說是『雙花』,這樣別人聽不懂會顯得技術更高深一點哈)。

一般的解決辦法就是引入一個第三方,你給我100塊的時候其實是把錢打給它,它重新印張新錢打給我,有第三方管著,這樣就使得你100塊錢只能花一次。

我們不搞第三方,直接用這個nb的去中心化網路搞定。我們就認定『先發生的交易為大』——如果你先給張三錢,再給我錢,整個網路就會把錢給張三。那麼我們需要解決的問題就變成了:網路怎麼知道哪筆交易先發生呢?答案是『都記下來』。

每一筆交易都必須全網廣播,所有參與的節點必須就所有交易的『先來後到』達成共識,形成一個大家都認可的歷史賬本。而每個人在收錢的時候,則需要網路中大部分節點給他確認說『對對對,這錢是首先打給你的,之前沒打給過別人』。

你給任何人的每一分錢,都必須昭告天下,然後全天下都拿出小本本把這事兒記下來,同時還看一下表把發生的時間記下來。因為可能有人離你近,有人離你遠,所以每個人記下來的時間還不一樣,最後他們自己會去對答案,少數服從多數,把大家的記錄統一起來。

好了,到這裡……我們也僅僅是把幾個名詞解釋了一下,還是沒有說這一小節(真的是一小節,中本聰論文里半頁紙而已)的核心:『A同學要轉錢給B同學怎麼辦呢?簡單,他把上一個『轉賬交易』和B同學的公鑰放在一塊兒,簽名哈希一下,貼到他所有的那個幣的鏈尾上,就搞定啦。收款人可以通過檢查簽名來驗證這個鏈的所有權。』

還記得上一篇說的么——『我們管一串數字簽名鏈條叫做一個數字幣』。

最開始的時候,幣是中本聰同學的。如果他要把錢轉給你,應該怎麼辦呢?他會在這個錢上加一個數字簽名,寫上『這個錢我給XXX了』,然後把這句話廣播出去,讓所有人都記下來。

具體怎麼做呢?他會把『中本聰的錢』這個信息,加上你的公鑰123456,一起哈希成一個摘要——比如哈希成了『ABC』,然後用自己的私鑰把『ABC』加密——比如加密成了『KYC』,然後把『KYC』貼到『中本聰的錢』這個鏈的尾巴上,就好了。

因為中本聰同學的公鑰也是公開的(比如是246789),所以所有人都可以拿著246789去解密KYC,得到ABC。然後任何人都可以把『中本聰的錢』和你的公鑰123456拼到一起哈希壓縮一下得到ABC。兩個都是ABC,大家就覺額這事兒沒錯,中本聰確實把錢給了你。

之後你怎麼把錢給我呢?你全網吆喝一聲『我把這錢給Mars啦』,然後用把『中本聰給錢給XX』(上一個交易)和我的公鑰(假設是112233)放一塊兒哈希壓縮成KYF三個字母,再用自己私鑰OOXX把字母加密成KKY三個字母,把KKY放在『我把這錢給Mars啦』這句話旁邊當做簽名。所有人都可以拿著你的公鑰123456去檢查,用123456解密KKY,得到KYF。大家只需要看把『中本聰給錢給XX』和112233放一塊是不是也能得到KYF三個字母,就能驗證這筆付款是不是經過了你授權。

寫了這麼多才解釋了不到兩頁紙的白皮書,我也是醉了……

擔心還是寫太複雜了(沒辦法呀,要把加密原理說清楚的話……),再通俗簡單一點講一遍吧。比特幣世界裡的錢,可以理解為一個活頁本,第一頁寫的是『中本聰的錢』,第二頁寫的是『中本聰把錢給XXX啦』和中本聰的親筆簽名,第三頁寫的是『XXX把錢給YYY啦』和『XXX』的簽名……每次交易都會在這個活頁本上再加上一頁,讓這個錢的上一個主人寫上把錢給了誰,以及附加上簽名,這樣就使得鈔票得以流轉起來。

如果有壞人想作弊,他自己copy一個活頁本,在給我的本子上加一頁『我把錢給Mars啦』然後簽名;在給你的本子上加一頁『我把錢給XXX啦』然後簽名。我們怎麼發現這筆錢被花了兩遍呢?

中本聰同學給出的方法是『讓網路中所有人都來做記錄和見證』,當壞人給我的本子上加上一頁『我把錢給Mars啦』然後簽名時,系統會把這張活頁紙發給網路中所有的人,並且問他們『這個簽名對么?』&『他之前把這個錢給過別人么』,網路中所有人各自查自己的賬本給出答案,最後得出共識結論說『簽名對』&『錢之前沒花過』,然後我就收到了這個錢,所有人也都把這張活頁紙copy一份存到自己的賬簿中。

等壞人再給你同一張錢時,系統會再次把這張寫著『我把錢給XXX啦』的活頁紙發給網路中所有人,網路中大部分人已經收到並且保存過『錢給Mars』的前一張活頁紙,所以都反饋說『簽名真的,可這個已經在更早的時候花過啦!』拒絕接受這個交易。這樣你就不會收到錢,也不會給壞人發貨之類的,不會有損失。

很多地方為了簡單還是講得不是很嚴謹……不過我覺得應該也不重要:P

如果我說我寫了這麼多,才cover了中本聰同學白皮書的一頁半內容,你會不會覺得很崩潰@@。

還好一共只有8頁^_^。

歡迎讚賞,認識我的人打個Bitcoin給我就好啦~:P


推薦閱讀:

2018B2B內容營銷白皮書完整版(附中英文雙版下載)

TAG:比特幣Bitcoin | 中本聰 | 白皮書 |