什么是比特幣51%攻擊
我之前寫的一篇文章
hashcash在比特幣中的應(yīng)用
有過這樣的描述:
A偽造了一筆交易,把錢有退回給自己因篇。如果要被整個網(wǎng)絡(luò)認(rèn)可這筆交易,A必須自己生成一個比原來的鏈長的區(qū)塊鏈并把這筆交易加入鏈中涛浙。但事實(shí)上刘绣,這幾乎是無法做到的。一臺計(jì)算機(jī)甚至要花幾年的時間去”猜”一個區(qū)塊紫谷,而整個網(wǎng)絡(luò)中的計(jì)算機(jī)的力量只要幾分鐘就可以解出來齐饮。個人要想偽造一筆交易達(dá)到雙重支付s要跟整個比特幣網(wǎng)絡(luò)競爭。你的計(jì)算速度再快笤昨,也不可能快過整個網(wǎng)絡(luò)祖驱。
這里的整個網(wǎng)絡(luò)主要是指那些大型的挖礦節(jié)點(diǎn)。說白了就是偽造者的算力是非常渺小的瞒窒,幾乎不可能一直偽造交易捺僻。
那么從理論上(基本上也只在理論上存在)想象這么一種情況,某個大boss網(wǎng)羅了比特幣網(wǎng)絡(luò)中的幾個大型的挖礦節(jié)點(diǎn)根竿,統(tǒng)治了比特幣網(wǎng)絡(luò)51%的算力陵像。大boss意圖攻擊比特幣系統(tǒng)就珠。
基于上面的假設(shè),我們從幾個方面分析所謂的51%攻擊:
能否攻擊成功
這個幾乎是肯定的醒颖。了解比特幣系統(tǒng)的人都知道妻怎,系統(tǒng)基于去中心化能達(dá)成交易的共識,一個前提就是泞歉,
絕大多數(shù)的礦工逼侦,都會通過誠實(shí)挖礦來維持整個比特幣系統(tǒng)
這些礦工占據(jù)了大部分的算力,如果他們要偽造交易簡直太容易了腰耙,那就意味著整個比特幣網(wǎng)絡(luò)的主區(qū)塊鏈都是偽造的榛丢。
就好像央行或者美聯(lián)儲要偽造交易,那太容易了挺庞。
如何攻擊
舉個例子:
Alice 和 Bob之間使用比特幣完成了一杯咖啡的交易晰赞,因?yàn)槭切☆~交易,Bob在收到Alice的轉(zhuǎn)賬通知(不是交易確認(rèn)的通知选侨,只是表面發(fā)起了交易)就給Alice提供了咖啡掖鱼。
正常情況下,這筆交易會馬上被放入交易池等待挖礦節(jié)點(diǎn)把自己加入一個新的區(qū)塊并開始努力"挖礦"援制。
假設(shè)Alice就是那個大boss戏挡,擁有網(wǎng)絡(luò)51%的算力,他真的不愿意為這筆咖啡付錢(有錢人也可能很小氣)晨仑,于是他開始攻擊了褐墅。
網(wǎng)絡(luò)上很多節(jié)點(diǎn)都收到了這筆交易并加入?yún)^(qū)塊準(zhǔn)備運(yùn)算了,Alice也同樣開始貢獻(xiàn)算力洪己,但是在開始之前他把區(qū)塊里的這筆交易改了妥凳,本來這是一筆Alice付款給Bob的交易,被改成Alice轉(zhuǎn)給自己的一筆交易了(更改很容易码泛,只要把接收地址和簽名改掉即可)猾封。
Alice開始嘗試用這個偽區(qū)塊進(jìn)行計(jì)算(計(jì)算正確后這個快會被加入主塊中),因?yàn)閾碛?1%的算力噪珊,Alice比別的節(jié)點(diǎn)更容易優(yōu)先計(jì)算成功晌缘,導(dǎo)致一個偽造的區(qū)塊加入了主鏈。現(xiàn)在網(wǎng)絡(luò)中有兩個區(qū)塊鏈:
其中一個是原來的主鏈痢站,另一個是比主鏈高出一個區(qū)塊的偽造鏈磷箕。
按照區(qū)塊鏈的原則,更高的這個鏈就代替了原有的鏈成為后面的主鏈阵难。這筆偽造的交易就被所有節(jié)點(diǎn)認(rèn)可成為了"真實(shí)的交易"岳枷。
這是Bob就會一直收不到錢,但是咖啡已經(jīng)給出去了。
如何防范攻擊
防范51%攻擊可以從兩方面看空繁,
一方面是本身這種情況只存在理論中殿衰。
絕大多數(shù)的礦工,都會通過誠實(shí)挖礦來維持整個比特幣系統(tǒng)
這個并不是靠著礦工的人品去保證的盛泡,而是從他們的角度考慮的利益最大化闷祥。首先礦工挖礦有比特幣獎勵,早期運(yùn)算一個區(qū)塊可以獲得50個比特幣的獎勵傲诵,后面這種獎勵會越來越少凯砍,但是交易手續(xù)費(fèi)又是一個新的獎勵方式。
如果他們集體偽造交易拴竹,用戶對比特幣失去了信心悟衩,沒人在去使用比特幣。那么礦工偽造了交易盜取比特幣就失去了意義栓拜。
從另一方面看座泳,如果真有這樣的51%攻擊,建議是收款方等到全網(wǎng)的 6 個確認(rèn)之后再交付商品菱属。按照10分鐘一個區(qū)塊的速度钳榨,也只需一個小時就可以保證你的錢是否基本肯定收到。
注意這里用的是基本肯定纽门,不過等的時間越長這筆交易越安全是肯定的。
原理其實(shí)也很簡單营罢。對于Alice來說赏陵,假設(shè)他要偽造的區(qū)塊就是最后一個,他只需要計(jì)算一次成功就可以了饲漾,但是如果他要篡改交易的那個區(qū)塊后面的區(qū)塊有六個蝙搔,他就要重新計(jì)算六個區(qū)塊,難度大很多考传。