比特幣自私礦工攻擊
❶ 詳解比特幣的「51%攻擊」
剛接觸比特幣的時候,都聽過「51%攻擊」這個概念。簡單來說,就是如果某個節點擁有超過全網51%的算力,將能夠實現雙重支付、撤銷交易等操作,讓比特幣網路崩潰。
那麼,這個51%攻擊是什麼實現的?
假設一個場景,A用10比特幣向B購買一樣商品,步驟如下:
(1)A支付給B 10BTC;
(2)B收到10BTC確認收款後發貨(一般認為6次確認後交易就不可逆轉);
(3)A隨即創建另一筆交易,將同樣的10BTC支付給自己。
顯然,A想要撤銷第一筆交易,不用花錢就得到B的商品。為了達到這個目的,A進行了雙重支付,將同樣的10BTC支付給B和自己。在正常的比特幣網路中,一旦第一筆交易經過6次確認後就幾乎不可更改,後續的交易數據將繼續打包成新的區塊依次鏈接下去。可是,如果A用戶擁有51%的算力,情況將會發生有趣的變化,A可以實現雙重支付的目的。
具體過程如下:
假設第一筆交易被打包到100號區塊,當後面再增加5個區塊後,6次即可確認該交易,區塊如下圖所示:
這時,A又發起了一次給自己10BTC的交易。如果A向全網廣播,這筆交易不會被處理(因為找不到要花費的UTXO,10BTC支付給B的事實已經被全網確認了),所以A選擇不廣播,而是對主鏈進行「分叉」,生成另外一個100號區塊,並在其中打包第二筆交易,如下圖:
由此,產生了兩條子鏈。簡單描述起見,第一筆交易所在的叫C1,第二筆交易所在的叫C2。其他礦工繼續在C1上打包數據,而A則在C2上挖礦,兩條鏈開始賽跑。由於A具有超51%的算力資源,很快,C2的長度就會超過C1,如下圖:
這時,按照比特幣的最長鏈優先原則,其他礦工也會自動轉到C2上,使C2變成了主鏈。C1則會被拋棄,之前打包在C1上的所有交易(包括第一筆A支付給B 10BTC的交易),都會變為無效。結果是A不花一分錢就擁有了屬於B的商品,這就是「51%攻擊」。
當然,要真正實現51%攻擊是非常困難的,在比特幣網路中幾乎是不可能的,因為這需要消耗巨大的成本,跟攻擊成功後獲取到的收益相比,完全是得不償失。
51%攻擊能帶來的收益是非常有限的,只能做到:
1、修改自己的交易記錄,如雙重支付;
2、阻止確認部分或全部交易。
而下面這些即使是51%攻擊也沒法做到的:
1、憑空生成比特幣;
2、修改每個區塊產生的比特幣數量。
因此,51%攻擊成本巨大,收益卻很小,僅能實現「雙重支付」而已,所以51%攻擊很多時候又被稱為「雙花攻擊」。「雙花」是數字貨幣要解決的第一個核心問題,比特幣通過共享賬本和工作量證明共識機制比較完美地解決了這個問題。
❷ 區塊鏈裡面什麼是51%攻擊
簡單解釋下,51%攻擊又叫大多數攻擊,是指惡意礦工控制了區塊鏈網路50%以上的哈希率(hashrate,即算力),隨後對網路發動攻擊,接管區塊鏈網路讓不法分子得以逆轉交易、停止支付或者防止新交易予以確認。
詳細有關51%攻擊可以在 密碼財經網路了解,
❸ 比特幣出現漏洞,手把手帶你發起攻擊,萬一暴富了呢
針對所有的支付系統,有一種攻擊方式叫作 雙花攻擊 。所謂雙花攻擊就是指一筆資金被花費多次,攻擊者先將資金轉出,獲得收益後通過攻擊的手段撤銷該筆轉賬,讓資金重新回到攻擊者的賬戶上。那麼我們能否對比特幣發起雙花攻擊並從中獲利呢?答案是肯定的!下面讓我帶你一起對比特幣系統發起攻擊。
在帶領大家發起攻擊之前,我們需要先了解一下比特幣的轉賬原理,這是我們發起攻擊的預備知識。
在比特幣系統中,用戶想要發起一筆轉賬,首先要把轉賬信息組裝好,就像填寫銀行支票一樣,寫好付款方賬戶,收款方賬戶,轉賬金額,然後使用加密技術對轉賬信息簽名,我們把這種簽名好的轉賬請求叫作交易。交易被比特幣系統處理以後,付款方的賬戶就會被扣除指定金額,收款方的賬戶就會增加指定金額。
用戶的交易會被發送給比特幣系統中的節點,節點收到交易後將其放在一個新的區塊中,然後對這個區塊進行哈希計算,也就是之前文章所說的計算數學題。哪一個節點優先計算出了這個區塊的數學題答案,就獲得了這個區塊的打包權,被這個節點打包進區塊的交易就相當於成交了,然後所有的節點會在新區塊的基礎上開始計算下一個區塊的數學題。
知道了比特幣的轉賬原理,下面我們就來看一下比特幣的漏洞到底在哪裡!
剛才我們說誰先算出答案誰負責打包區塊,那如果有兩個節點同時做出了同一個區塊的答案該怎麼辦呢?為了解決這個問題,比特幣系統設計了一個特殊的機制,叫作最長鏈原則。
通過上面的描述我們可以看出,比特幣的這條鏈是有可能分叉的,分叉以後會以最長的鏈為准,那麼在較短的分叉上的區塊就被廢棄了。 這不正為我們攻擊比特幣系統帶來了可能性嗎!
你可能已經想到了,既然比特幣系統只認最長的那條鏈,我們是不是可以通過這樣的方式對比特幣進行雙花攻擊:
至此,你之前轉出的比特幣還在你的賬戶上,並且得到了你想要的東西,所以你的攻擊成功了。
對比特幣的攻擊真的這么簡單嗎?答案當然是否定的!雖然我們說可以通過上述方法對比特幣發起攻擊,但是攻擊是要付出代價的。
所以,如果你想要創建一個新的分叉,並且超過主鏈的區塊長度,那麼你需要比主鏈上所有節點的計算速度加在一起都要快。要想實現這樣的結果,唯一的做法就是你要收買比特幣系統中超過51%的節點算力,這就是比特幣的51%攻擊原理。
想要攻擊比特幣系統並不是不可能,但是需要付出的代價可能遠遠超過作惡所獲得的收益。在比特幣系統中,節點越多,算力越強,攻擊比特幣系統的成本就越高,比特幣系統就越安全。比特幣越安全,它的價值就越高,就會吸引更多的節點加入來競爭比特幣獎勵。更多的節點進一步促進了系統的安全性,這是一個正向循環。
51%攻擊不只是針對比特幣的,所有採用 工作量證明共識演算法 的區塊鏈都面臨著這個問題。對於已經日趨成熟的比特幣系統來說,攻擊比特幣確實是不劃算的,而且隨著系統節點的越來越多,攻擊比特幣幾乎成為了不可能的事情。但是一些新的鏈,在其剛起步的時候節點和算力還不多,這種攻擊確實是真實有效的,並且這種攻擊事件時有發生。
❹ 比特幣之挖礦與共識(二)
比特幣共識機制的第三步是通過網路中的每個節點獨立校驗每個新區塊。當新區塊在網路中傳播時,每一個節點在將它 轉發到其節點之前,會進行一系列的測試去驗證它。這確保了只有有效的區塊會在網路中傳播。
獨立校驗還確保了誠實 的礦工生成的區塊可以被納入到區塊鏈中,從而獲得獎勵。行為不誠實的礦工所產生的區塊將被拒絕,這不但使他們失 去了獎勵,而且也浪費了本來可以去尋找工作量證明解的機會,因而導致其電費虧損。
當一個節點接收到一個新的區塊,它將對照一個長長的標准清單對該區塊進行驗證,若沒有通過驗證,這個區塊將被拒 絕。這些標准可以在比特幣核心客戶端的CheckBlock函數和CheckBlockHead函數中獲得
它包括:
為什麼礦工不為他們自己記錄一筆交易去獲得數以千計的比特幣?
這 是因為每一個節點根據相同的規則對區塊進行校驗。一個無效的coinbase交易將使整個區塊無效,這將導致該區塊被拒 絕,因此,該交易就不會成為總賬的一部分。礦工們必須構建一個完美的區塊,基於所有節點共享的規則,並且根據正 確工作量證明的解決方案進行挖礦,他們要花費大量的電力挖礦才能做到這一點。如果他們作弊,所有的電力和努力都 會浪費。這就是為什麼獨立校驗是去中心化共識的重要組成部分。
比特幣去中心化的共識機制的最後一步是將區塊集合至有最大工作量證明的鏈中。一旦一個節點驗證了一個新的區塊, 它將嘗試將新的區塊連接到到現存的區塊鏈,將它們組裝起來。
節點維護三種區塊:第一種是連接到主鏈上的,第二種是從主鏈上產生分支的(備用鏈),最後一種是在已知鏈中沒有 找到已知父區塊的。在驗證過程中,一旦發現有不符合標準的地方,驗證就會失敗,這樣區塊會被節點拒絕,所以也不 會加入到任何一條鏈中。
任何時候,主鏈都是累計了最多難度的區塊鏈。在一般情況下,主鏈也是包含最多區塊的那個鏈,除非有兩個等長的鏈 並且其中一個有更多的工作量證明。主鏈也會有一些分支,這些分支中的區塊與主鏈上的區塊互為「兄弟」區塊。這些區 塊是有效的,但不是主鏈的一部分。 保留這些分支的目的是如果在未來的某個時刻它們中的一個延長了並在難度值上超 過了主鏈,那麼後續的區塊就會引用它們。
如果節點收到了一個有效的區塊,而在現有的區塊鏈中卻未找到它的父區塊,那麼這個區塊被認為是「孤塊」。孤塊會被 保存在孤塊池中,直到它們的父區塊被節點收到。一旦收到了父區塊並且將其連接到現有區塊鏈上,節點就會將孤塊從 孤塊池中取出,並且連接到它的父區塊,讓它作為區塊鏈的一部分。當兩個區塊在很短的時間間隔內被挖出來,節點有 可能會以相反的順序接收到它們,這個時候孤塊現象就會出現。
選擇了最大難度的區塊鏈後,所有的節點最終在全網范圍內達成共識。隨著更多的工作量證明被添加到鏈中,鏈的暫時性差異最終會得到解決。挖礦節點通過「投票」來選擇它們想要延長的區塊鏈,當它們挖出一個新塊並且延長了一個鏈, 新塊本身就代表它們的投票。
因為區塊鏈是去中心化的數據結構,所以不同副本之間不能總是保持一致。區塊有可能在不同時間到達不同節點,導致節點有不同的區塊鏈全貌。
解決的辦法是,每一個節點總是選擇並嘗試延長代表累計了最大工作量證明的區塊鏈,也就 是最長的或最大累計工作的鏈(greatest cumulative work chain)。節點通過累加鏈上的每個區塊的工作量,得到建立這個鏈所要付出的工作量證明的總量。只要所有的節點選擇最長累計工作的區塊鏈,整個比特幣網路最終會收斂到一致的狀態。分叉即在不同區塊鏈間發生的臨時差異,當更多的區塊添加到了某個分叉中,這個問題便會迎刃而解。
提示由於全球網路中的傳輸延遲,本節中描述的區塊鏈分叉自動會發生。
然而,倒三角形的區塊不會被丟棄。它被鏈接到星形鏈的父區塊,並形成備用鏈。雖然節點X認為自己已經正確選擇了獲勝鏈,但是它還會保存「丟失」鏈,使得「丟失」鏈如果可能最終「獲勝」,它還具有重新打包的所需的信息。
這是一個鏈的重新共識,因為這些節點被迫修改他們對塊鏈的立場,把自己納入更長的鏈。任何從事延伸星形-倒三角形的礦工現在都將停止這項工作,因為他們的候選人是「孤兒」,因為他們的父母「倒三角形」不再是最長的連鎖。
「倒三角形」內的交易重新插入到內存池中用來包含在下一個塊中,因為它們所在的塊不再位於主鏈中。
整個網路重新回到單一鏈狀態,星形-三角形-菱形,「菱形」成為鏈中的最後一個塊。所有礦工立即開始研究以「菱形」為父區塊的候選塊,以擴展這條星形-三角形-菱形鏈。
從理論上來說,兩個區塊的分叉是有可能的,這種情況發生在因先前分叉而相互對立起來的礦工,又幾乎同時發現了兩個不同區塊的解。
然而,這種情況發生的幾率是很低的。單區塊分叉每周都會發生,而雙塊分叉則非常罕見。比特幣將區塊間隔設計為10分鍾,是在更快速的交易確認和更低的分叉概率間作出的妥協。更短的區塊產生間隔會讓交易清算更快地完成,也會導致更加頻繁地區塊鏈分叉。與之相對地,更長的間隔會減少分叉數量,卻會導致更長的清算時間。
2012年以來,比特幣挖礦發展出一個解決區塊頭基本結構限制的方案。在比特幣的早期,礦工可以通過遍歷隨機數 (Nonce)獲得符合要求的hash來挖出一個塊。
難度增長後,礦工經常在嘗試了40億個值後仍然沒有出塊。然而,這很容 易通過讀取塊的時間戳並計算經過的時間來解決。因為時間戳是區塊頭的一部分,它的變化可以讓礦工用不同的隨機值 再次遍歷。當挖礦硬體的速度達到了4GH/秒,這種方法變得越來越困難,因為隨機數的取值在一秒內就被用盡了。
當出現ASIC礦機並很快達到了TH/秒的hash速率後,挖礦軟體為了找到有效的塊, 需要更多的空間來儲存nonce值 。可以把時間戳延後一點,但將來如果把它移動得太遠,會導致區塊變為無效。
區塊頭需要信息來源的一個新的「變革」。解決方案是使用coinbase交易作為額外的隨機值來源,因為coinbase腳本可以儲存2-100位元組的數據,礦工們開始使用這個空間作為額外隨機值的來源,允許他們去探索一個大得多的區塊頭值范圍來找到有效的塊。這個coinbase交易包含在merkle樹中,這意味著任何coinbase腳本的變化將導致Merkle根的變化。
8個位元組的額外隨機數,加上4個位元組的「標准」隨機數,允許礦工每秒嘗試2^96(8後面跟28個零)種可能性而無需修改時間戳。如果未來礦工穿過了以上所有的可能性,他們還可以通過修改時間戳來解決。同樣,coinbase腳本中也有更多額外的空間可以為將來隨機數的擴展做准備。
比特幣的共識機制指的是,被礦工(或礦池)試圖使用自己的算力實行欺騙或破壞的難度很大,至少理論上是這樣。就像我們前面講的,比特幣的共識機制依賴於這樣一個前提,那就是絕大多數的礦工,出於自己利益最大化的考慮,都會 通過誠實地挖礦來維持整個比特幣系統。然而,當一個或者一群擁有了整個系統中大量算力的礦工出現之後,他們就可以通過攻擊比特幣的共識機制來達到破壞比特幣網路的安全性和可靠性的目的。
值得注意的是,共識攻擊只能影響整個區塊鏈未來的共識,或者說,最多能影響不久的過去幾個區塊的共識(最多影響過去10個塊)。而且隨著時間的推移,整個比特幣塊鏈被篡改的可能性越來越低。
理論上,一個區塊鏈分叉可以變得很長,但實際上,要想實現一個非常長的區塊鏈分叉需要的算力非常非常大,隨著整個比特幣區塊鏈逐漸增長,過去的區塊基本可以認為是無法被分叉篡改的。
同時,共識攻擊也不會影響用戶的私鑰以及加密演算法(ECDSA)。
共識攻擊也 不能從其他的錢包那裡偷到比特幣、不簽名地支付比特幣、重新分配比特幣、改變過去的交易或者改變比特幣持有紀錄。共識攻擊能夠造成的唯一影響是影響最近的區塊(最多10個)並且通過拒絕服務來影響未來區塊的生成。
共識攻擊的一個典型場景就是「51%攻擊」。想像這么一個場景,一群礦工控制了整個比特幣網路51%的算力,他們聯合起來打算攻擊整個比特幣系統。由於這群礦工可以生成絕大多數的塊,他們就可以通過故意製造塊鏈分叉來實現「雙重支 付」或者通過拒絕服務的方式來阻止特定的交易或者攻擊特定的錢包地址。
區塊鏈分叉/雙重支付攻擊指的是攻擊者通過 不承認最近的某個交易,並在這個交易之前重構新的塊,從而生成新的分叉,繼而實現雙重支付。有了充足算力的保證,一個攻擊者可以一次性篡改最近的6個或者更多的區塊,從而使得這些區塊包含的本應無法篡改的交易消失。
值得注意的是,雙重支付只能在攻擊者擁有的錢包所發生的交易上進行,因為只有錢包的擁有者才能生成一個合法的簽名用於雙重支付交易。攻擊者在自己的交易上進行雙重支付攻擊,如果可以通過使交易無效而實現對於不可逆轉的購買行為不予付款, 這種攻擊就是有利可圖的。
攻擊者Mallory在Carol的畫廊買了描繪偉大的中本聰的三聯組畫(The Great Fire),Mallory通過轉賬價值25萬美金的比特幣 與Carol進行交易。在等到一個而不是六個交易確認之後,Carol放心地將這幅組畫包好,交給了Mallory。這時,Mallory 的一個同夥,一個擁有大量算力的礦池的人Paul,在這筆交易寫進區塊鏈的時候,開始了51%攻擊。
首先,Paul利用自己礦池的算力重新計算包含這筆交易的塊,並且在新塊里將原來的交易替換成了另外一筆交易(比如直接轉給了Mallory 的另一個錢包而不是Carol的),從而實現了「雙重支付」。這筆「雙重支付」交易使用了跟原有交易一致的UTXO,但收款人被替換成了Mallory的錢包地址。
然後,Paul利用礦池在偽造的塊的基礎上,又計算出一個更新的塊,這樣,包含這 筆「雙重支付」交易的塊鏈比原有的塊鏈高出了一個塊。到此,高度更高的分叉區塊鏈取代了原有的區塊鏈,「雙重支付」交 易取代了原來給Carol的交易,Carol既沒有收到價值25萬美金的比特幣,原本擁有的三幅價值連城的畫也被Mallory白白 拿走了。
在整個過程中,Paul礦池裡的其他礦工可能自始至終都沒有覺察到這筆「雙重支付」交易有什麼異樣,因為挖礦程序都是自動在運行,並且不會時時監控每一個區塊中的每一筆交易。
為了避免這類攻擊,售賣大宗商品的商家應該在交易得到全網的6個確認之後再交付商品。或者,商家應該使用第三方 的多方簽名的賬戶進行交易,並且也要等到交易賬戶獲得全網多個確認之後再交付商品。一條交易的確認數越多,越難 被攻擊者通過51%攻擊篡改。
對於大宗商品的交易,即使在付款24小時之後再發貨,對買賣雙方來說使用比特幣支付也 是方便並且有效率的。而24小時之後,這筆交易的全網確認數將達到至少144個(能有效降低被51%攻擊的可能性)。
需要注意的是,51%攻擊並不是像它的命名里說的那樣,攻擊者需要至少51%的算力才能發起,實際上,即使其擁有不 到51%的系統算力,依然可以嘗試發起這種攻擊。之所以命名為51%攻擊,只是因為在攻擊者的算力達到51%這個閾值 的時候,其發起的攻擊嘗試幾乎肯定會成功。
本質上來看,共識攻擊,就像是系統中所有礦工的算力被分成了兩組,一 組為誠實算力,一組為攻擊者算力,兩組人都在爭先恐後地計算塊鏈上的新塊,只是攻擊者算力算出來的是精心構造 的、包含或者剔除了某些交易的塊。因此,攻擊者擁有的算力越少,在這場決逐中獲勝的可能性就越小。
從另一個角度 講,一個攻擊者擁有的算力越多,其故意創造的分叉塊鏈就可能越長,可能被篡改的最近的塊或者或者受其控制的未來 的塊就會越多。一些安全研究組織利用統計模型得出的結論是,算力達到全網的30%就足以發動51%攻擊了。全網算力的急劇增長已經使得比特幣系統不再可能被某一個礦工攻擊,因為一個礦工已經不可能占據全網哪怕的1%算 力。
待補充
待補充
❺ 首個比特幣勒索病毒製作者落網,這個病毒有多大傷害
一旦電腦中了這種比特幣勒索病毒,電腦上的所有文件數據就會被強行加密,如果不向病毒製作者以比特幣的形式交付“贖金”,那麼這些文件就別想解密找回來了,而即便這次交了贖金解了密了,下次可能還會被“光顧”——也就是說,這種病毒對於“重視數據”的用戶、尤其是企業用戶來說,所能造成的危害之大是難以估量的。
二、如何規避比特幣勒索病毒的危害?比特幣勒索病毒始一現世,立刻就在全球范圍引起了軒然大波,各大網路安全機構、知名殺毒軟體都開始重視這個問題。
網路上有不少關於“手動設置防火牆來關閉電腦的敏感埠,從而抵禦比特幣勒索病毒”的教程帖子,但是這類方法更適用於比較懂電腦的“非小白人士”,就比如我這樣的三流程序員,這種方法就比較適合我,我連殺毒軟體都用不上。
但是對於普通大眾而言,可能就需要換一個更簡單的方式去應對了。
如今距離比特幣勒索病毒現世已是幾年過去,為了幫助用戶的電腦對抗比特幣勒索病毒攻擊,很多殺毒軟體都已經有了一定的防禦機制,就比如360就推出了一個“反勒索服務”,如果你的電腦在安裝了360的情況下你的數據還被比特幣勒索病毒給加密了,那麼360會為你代償贖金並為你恢復數據。
不懂電腦的用戶可以選擇安裝殺毒軟體來為你防禦這類病毒,但是具體選哪種殺軟,就看個人的愛好了。
❻ 「51%攻擊」是什麼它是比特幣最大的威脅
所謂51%攻擊,就是利用比特幣使用算力作為競爭條件的特點,使用算力優勢撤銷自己已經發生的付款交易。
如果有人掌握了50%以上的算力,他能夠比其他人更快地找到開采區塊需要的那個隨機數,因此他實際上擁有了絕對哪個一區塊的有效權利。
他能夠:
1、修改自己的交易記錄,這可以使他進行雙重支付
2、阻止區塊確認部分或者全部交易
3、阻止部分或全部礦工開採到任何有效的區塊
❼ 礦機挖幣是騙局嗎
❽ 什麼是51%算力攻擊
關注比特幣的朋友,想必聽過51%算力攻擊這個詞,它到底是什麼意思呢,發起這種攻擊之後能做哪些「壞事」呢?
01
什麼是51%算力攻擊?
在比特幣網路中,採用PoW共識機制來解決如何獲得記賬權的問題,採用「最長鏈共識」解決如何記賬的問題。
所謂51%的攻擊,就是利用比特幣網路採用PoW競爭記賬權和「最長鏈共識」的特點,使用算力優勢生成一條更長的鏈「回滾」已經發生的「交易行為」。
51%是指算力佔全網算力的51%,比特幣網路需要通過哈希碰撞來匹配隨機數從而獲得記賬權,算力衡量的是一台計算機每秒鍾能進行哈希碰撞的次數。
算力越高,意味著每秒鍾能進行越多次的哈希碰撞,即獲得記賬權的幾率越高。
在理論上,如果掌握了50%以上的算力,就擁有了獲得記賬權的絕對優勢,可以更快地生成區塊,也擁有了篡改區塊鏈數據的權利。
02
這種攻擊能做哪些壞事?
在了解了51%算力攻擊之後,你肯定好奇,這種攻擊能做哪些壞事。
實際上,當惡意攻擊者持有比特幣全網佔比比較高的算力時,即使尚未達到51%的比例,也可以製造相應的攻擊,比較典型的就是雙花問題。
假設A擁有51%的算力,在區塊高度1127時,A轉給B一個比特幣的記錄被礦工打包。
待交易確認後,A依靠51%的算力優勢在區塊高度1126後重新生成了一條「更長的鏈」,並在區塊高度1127處又將該BTC轉給C且該交易記錄被打包,即該鏈包含了A將一個比特幣轉給C的記錄。
根據「最長鏈共識」,包含給C轉賬記錄的鏈成為主鏈,則A轉給B的一個比特幣則為「無效支付「。
若掌握了51%的算力,除了可以修改自己的交易記錄外,還可以阻止區塊確認部分交易,以及阻止部分礦工獲得有效的記賬權。
但是,擁有51%的算力也不是萬能的,無法修改其他人的交易記錄,也不能阻止交易的發出,更不能憑空產生BTC。
03
實例分析
我們可以用一筆虛擬交易來說明51%算力攻擊問題:
1.攻擊者擁有私鑰privKey0001,私鑰擁有對應可花費比特幣10000個
2.當前區塊的高度是88888
3.攻擊者與商戶交易了10000個比特幣,在商戶看到88889區塊中包含了此次交易後,坐上飛機駕駛員位置,開走了商戶一架飛機。
4.攻擊者因為擁有較高算例,從88888區塊再次計算區塊(此時,排除自己的10000個比特幣買飛機的交易),迅速的計算出了88889/88890/88891/88892......區塊,其它節點拉取最長鏈節點的區塊,同步了攻擊者的含有惡意攻擊的區塊信息。
5.因為攻擊者買飛機的交易沒有被區塊包含,因此,可以再次到商戶那裡買上一架飛機開走。
上面這個例子就是典型的51%算力攻擊成功後,所產生的雙花問題。
04
51%算力攻擊真的有人做嗎?
理論上來說,要執行51%算力攻擊,首先需要擁有比網路其他礦工更強的算力。
這意味著要有非常多的挖礦設備,大量挖礦設備本身就會消耗大量的資金。
而且除了設備,還需要大量的電力能源消耗。
由於電價上漲以及能源需求的增加,在過去幾年裡獲得足夠的電力來運營礦場變得愈發地困難。
當比特幣網路還很小的時候,或許有可能獲得足夠的電力來運行提供51%算力的設備,但隨著時間的推移,比特幣網路消耗的電力持續增長,攻擊者需要獲得大量電力才能成功執行攻擊,這種可能性也就越來越小。
發動算力攻擊也是為了有利可圖,但從經濟角度來看,51%算力攻擊的成本太高,利潤太少,無法產生大量資金,並且會有受到重大損失的風險。
由於所涉及的成本和風險,進行51%攻擊確實沒有任何意義,而誠實挖礦則有利可圖的多。
05
在攻擊面前的風險規避
雖然51%算力攻擊可以撤銷交易,但不可以在沒有私鑰的情況下,控制私鑰對應的比特幣地址,因此不能無(私鑰)中生有交易。
所以對於51%算力攻擊,交易支付者不僅不需要過度擔心,而且在別人進行51%算力攻擊時,你也有可能做一次雙花商家。
但是交易接收者可就沒有那麼好的運氣了,因此為了避免被別人51%算力攻擊,可以多等幾個區塊生成後再進行交易。
但是反過來想一下,51%算力攻擊是很不值得的一件事情。
攻擊是為了利益,既然攻擊者持有了這么高的算力,誠實的挖礦帶來利益是不是更好?
而且攻擊必然打擊投資者對比特幣系統信心,這對攻擊者來說未必是一件好事。