十、雙花問題
這個漏洞就是雙花,double spending,不是double flower。
既然有人在搶著記賬、記好的賬本又不能篡改,我們還可以驗證每條消息的真偽,這似乎很完美了啊,但為何還有什么double spending呢?我們舉例說明之。
比如我只有5個比特幣,我先向老張轉賬5btc,同時再向老趙轉賬5btc。這就是雙花,我把5個比特幣化了兩次。這就是所謂的雙花問題,這是一種詐騙行為,如何預防?
正常情況下,一定是先有一條信息被大家打包,然后第二條信息由于與第一條信息沖突而無效。但是,我如果是同時雙花的,也就是一邊廣播:我向老張轉賬5btc,與此同時又廣播:我向老趙轉賬5btc。這樣,就會有兩個礦工分別打包了這兩筆記錄,這就叫做分叉,即同時有兩個區塊生成了。如果要真是如此,大家都去雙花了,5個比特幣能化兩次5個比特幣,豈不就亂套了,比特幣系統成了騙子橫行的世界了。
比特幣的規則是只有最長的區塊鏈得到確認,最長的區塊鏈才會有挖礦獎勵。所以正常大家都會切換到長鏈上挖礦而將短鏈廢棄掉,這樣就會有一筆交易作廢了。所以一般轉賬之后比特幣網絡建議大家等到一個區塊確認了,此時再發貨就比較安全。
我們再以Alice給Bob轉賬來說明。假設Alice只有5個比特幣,但她有兩個地址,地址1和地址2,她先用地址1向Bob支付5個比特幣去購買一杯咖啡,與此同時,Alice又用地址1給自己的地址2轉賬了這五個比特幣,必須注意,一定是同時、非常的同時。如果Alice得逞了,她就等于白喝了一杯咖啡。她可以得逞嗎?假設Alice是很強,她能讓這兩筆交易同時打包在兩個區塊,Bob看到一個區塊確認了,就給發送咖啡了。這時候,Alice為了讓Bob這筆轉賬失效,就必須讓包含轉賬給自己地址那條交易記錄的區塊成為主鏈,那么她就要在那個區塊后面不斷的生成區塊使這條鏈越來越長。Alice要實現雙花,其實很不容易,她必須要實現雙花所形成的兩個鏈條都不廢掉,一直要堅持到拿到Bob的咖啡為止。因為任何有一條區塊鏈廢了、就意味著雙花也就不存在了。比如給自己轉賬的那條鏈失效了,那就意味這Alice真就正轉賬給Bob了。如果給Bob轉賬的那條鏈接廢了,Bob沒收到btc也就不會提供服務、不會給Alice發送咖啡。所以Alice策略應該是先讓Bob那條鏈成為主鏈,這樣Bob就發貨了;Alice一看Bob發貨,于是開始努力加長給自己轉賬的那條鏈,一旦鏈條長度超過了Bob那條鏈,給自己轉賬的就成了主鏈,從而廢掉了Bob那條鏈,這意味著Bob的交易記錄作廢,也就是Bob最終沒有拿到比特幣。
Bob若想萬無一失,就不能急著發貨,要等到自己的鏈條足夠長的時候才發貨。一般來說再等上六個區塊的形成,就已經很保險了。Alice想廢掉已經又加長了六個區塊的長鏈,就必須自己加長自己的短鏈,來超越那個長鏈。為什么非要自己加上呢?因為礦工都會在長鏈上挖礦,只有最長的區塊鏈才能得到確認,才會有挖礦獎勵。Alice要憑一己之力,讓自己的短鏈超過長鏈,有肯能嗎?nothing is impossible。雙花is possible,但前提是Alice的計算能力強大無比,因為區塊由誰所生成,決定于誰最先算出Hash值,也就是要決定于算力——計算的能力。
如果Alice掌握了全網51%的算力,那么她有51%的概率搶奪到下一個區塊的記賬權,當她在對自己有利的那個區塊后繼續生成區塊的時候,她就會讓Bob收不到那5個btc,這就是所謂的“51%攻擊”。這似乎是可行的?但是,Bob聽了我們的節目,他變聰明了,他不是等一個區塊就發貨,而是等了六個區塊的確認才發貨,因為已經生成了六個區塊,那這一定是主鏈,關鍵是礦工也都相信這是主鏈,所以都會在這個鏈上繼續挖礦來獲得獎勵。
Alice為了使Bob的這筆轉賬失效,她必須在對自己有利的那個鏈上連續生成區塊而且趕上主鏈。與全網斗爭搶奪記賬權連續六次,如果算力一般這幾乎不可能,如果算力超強倒是有可能實現。不過如果Alice只為了喝一杯咖啡就如此消耗巨額算力成本似乎不值得。可能發動雙花攻擊的原因是大額轉賬,但是我們可以發現,只要區塊鏈越靠后,安全性越高,比如我等這個區塊鏈確認了10次,那么想要追上主鏈就必須連續搶奪十次記賬權,這個難度是幾何級數上升的。一般而言六次就已經很安全了,所以比特幣系統也認為一筆交易如果確認了六次就算有效了。由于每一個區塊是十分鐘生成,確認六個區塊也就是一個小時,相比于普通幾秒到賬的銀行轉賬,這個確實慢了好多。
我們對雙花問題再說一遍。Alice先有目的的向網絡兩邊散布兩條交易記錄(當然是網絡拓撲結構的兩邊而不是地理結構的兩邊),當兩個區塊2與2a都形成了以后,Bob覺得交易記錄被確認,開始發貨,此時Alice為了讓這條信息失效,必須在對自己轉賬的那個鏈上開始搶奪記賬權力,每一個區塊的生成必須基于上一個區塊的hash值(回顧一下搶奪記賬權力就是暴力嘗試隨機數算出復合規律的hash值),所以Alice就要連續搶奪若干次直到對她有利的這條鏈成為主鏈,使得向Bob轉賬的鏈條成為短鏈,所有短鏈上的交易信息返回待打包的池子,挖礦挖出的比特幣也會返回,也就是吃進去的比特幣再要吐出來。也就是說,一旦對Alice獲得了coffee,然后又將對自己有利的鏈條長度、超過向Bob轉賬的鏈條,那么Bob所獲得的5btc就會被收回,也即是這個交易記錄作廢了因為比特幣規則只對最長鏈挖礦有獎勵。
但是如果Bob等了六個區塊后、依然處于長鏈狀態,然后再發貨就沒有問題了,因為全網算力都會集中在長鏈,一旦長鏈至少有6個區塊的領先,Alice再想要追趕這個長鏈、以便讓這些交易記錄作廢就會非常非常難。即便Alice神通廣大到掌握了全網51%的算力,搶奪記賬權的幾率就是51%,連續六次都成功的概率就是0.51^6=1.7%,這就是所謂51%攻擊,如果僅僅掌握三成算力,那么這個概率就是0.07%了。
版權申明:本內容來自于互聯網,屬第三方匯集推薦平臺。本文的版權歸原作者所有,文章言論不代表鏈門戶的觀點,鏈門戶不承擔任何法律責任。如有侵權請聯系QQ:3341927519進行反饋。