壞礦工的雙重支付攻擊,51 攻擊

2021-09-11 04:56:30 字數 3327 閱讀 9271

在何謂區塊鏈(一)提過,如果世界上有太多壞礦工,就不能保障區塊鏈的安全。 那到底要有幾多個壞壙工才會有影響,壞壙工又可以如可攻擊區塊鏈,下面會詳細解釋。

先重溫一下挖礦的基本知識,所謂挖礦,是指壙工之間鬥快解出一條sha256的不等式:

sha256(tx1/tx2/tx3/…/nonce) < target

其中tx1/tx2/tx3是指區塊內的交易訊息,nonce是礦工是找出的數使得上述不等式成立。

為了找出答案nonce,礦工不停計算sha256,最快找出答案的礦工會公布答案,並將自己挖出的區塊加上現在的區塊鏈上。

偶而會發生兩個礦工同時成功挖出區塊,這候就要比並網路速度了。 如果兩個礦工的區塊都是正確的區塊,則以先到先得的方式來決定。

挖得較慢的礦工如果不忿氣,堅持要基於自己挖出來的區塊繼續挖,如下圖:

全世界的礦工已經基於block c 的結果去挖下乙個區塊,唯獨是加拿大礦工不忿氣,明明挖到了block b 卻因為比其他人慢,所以沒有人理會他的結果。

留意: 正常的礦工只會在最長的區塊鏈上工作,不在最長區塊鏈上的區塊叫做orphan block,孤兒區塊。

所以上圖block b 就是乙個孤兒block。

那麼加拿大礦工死不認輸的性格有沒有可能得到回報呢? 有!

如果加拿大礦工非常幸運,當其他礦工仍未挖出基於區塊c 的下乙個區塊,他獨力找出了基於block b 之後的兩個block,如下圖:

那麼block b/d/e 瞬間成為最長的區塊鏈,block a/c 反而變成孤兒了。

孤兒block的下場是甚麼? 所有記載在孤兒block的交易都不算數,跟沒發生過一樣。只有在最長區塊鏈(longest block chain)上發生的交易才算數。

看到這裡開始感覺到有問題吧?

時光倒流一下,重回到block b 仍然系孤兒區塊的時候,來看看block a 入麵包含了的交易:

上圖block a 包含了一條交易: 加拿大礦工傳送了0.001btc 給咖啡店

現實生活中的位元幣交易通常要等一次confirmation 才算成功。雖然block a 已經包含了買咖啡的轉帳,但為了安全起見,咖啡店可能會等到block c 出現之後才將咖啡交給加拿大礦工。

但是,如果加拿大礦工是壞人,在最後乙個block e 上寫上另一條交易: 用他本來買咖啡的0.001btc 來買大家樂焗豬排飯,而且他有如神助地迅速挖到兩個區塊出來,如下圖:

那麼咖啡店就要虧大本了,因為寫在block a上的交易突然間全部失效,取而代支的時買焗豬排飯的交易。

咖啡店送了咖啡出去,但原本已經到了wallet的bitcoin 卻消失了......

若同乙個bitcoin,可以在多於乙個地方消費,這就是惡名昭彰的double spend attack 雙重支付攻擊。

加拿大礦工要發動這種攻擊,不可能單靠幸運,靠的是算力hash rate。

說到底挖礦就是鬥快計sha256的比賽,只要算得夠快就可以發動攻擊。 何謂之夠快? 這是壞礦工與正義礦工的hash rate 比賽。

假設全世界的礦工加起來每秒可以算100次sha256,其中10次是壞礦工算出來的,那麼壞礦工就佔10% hash rate,正義礦工佔90%。在這種算力分布情況下,每10個新區塊裡面,就有乙個是壞礦工挖出來的。

如果壞礦工的運算力是10%,而咖啡店會等待2次confirmation才送出咖啡的話,壞礦工發動double spend attack的成功機會是5.6%。

如果壞礦工的運算力是10%,而咖啡店會等待6次confirmation才送出咖啡的話,壞礦工發動double spend attack的成功機會是0.05%。

confirm次數越高咖啡店就越安全,因為壞礦工的運算能力始終不及正義礦工。暫時公認是6次confirmation 為最佳。

但如果壞礦工的運算力提公升至40%,而咖啡店仍然等待6次confirmation才送出咖啡的話,壞礦工發動double spend attack的成功機會則提公升至50%。

下圖是壞礦工算力比率,咖啡店等待確認次數,與double spend attack成功機會的關係:

(ref: 

如果壞礦工的運算力提公升至全個網路的51%,會發生甚麼事情?

double spend attack 一定會成功,只是時間問題!這就是51% 攻擊。

這聽上去很恐怖,設計bitcoin的時候已經知道會有這個問題。 礦工/bitcoin developer全部都知道,偶而會有反對bitcoin的人以此攻擊bitcoin的安全性。

但要發動51%攻擊的代價實在太高了…

以2023年4月中計,假設用上antminer s5+,每一部價值2307美金,s5+的hash rate是7722ghash/s,3436w。

光是買礦機你就要花上9,198,641,021美金,還未計礦機電費! 假設電費是每千瓦時0.05美金,每天電費已經要16,440,327美金,是每天!(ref: 

還有租地方放置礦機呢? 冷氣費呢? 要同時cool down 上千萬部螞蟻礦機可不是簡單的事花上上百億美金發動一次51%攻擊,然後呢?

同乙個bitcoin 可以多花一次吧...然後呢?

最懷的情況是,所有人都知道51%攻擊發生了,然後世人對bitcoin的瞬間信心消失,「原來用bitcoin消費是這麼沒保障的啊"...

bitcoin 價值歸0

然後你花上百億買回來的礦機就可以送到堆填區啦^_^~

歷史上有沒有發生過成功的51% attack呢? 有,不過不是bitcoin。

2023年4月初,有黑客發現verge (另一種加密貨幣)的掘礦演算法中有bug,令他可以短時間內挖出大量區塊(1秒1個區塊),模擬了51% hash rate的情況。(ref: 

原理跟51% attack非常相似,不同之處是他無需購置大量礦機,只是偽做了區塊上的timestamp。

verge team 3小時內透過硬分叉hardfork 排除了攻擊期間生成的區塊。 但verge不算是甚麼出名的加密貨幣,所以hard fork的影響還不算很大。

上面提到壞礦工算力比率,咖啡店等待確認次數,與double spend attack成功機會的關係。

計算這個機會率需要統計學的知識,特別系poisson distribution泊松分布,及discrete time markov chain 馬可夫鏈。

在中本聰所寫的bitcoin white *****,chapter 11詳細解釋了算力分布與雙重支付攻擊的關係。(ref: 

設p = 正義礦工占全網路的算力比率

q = 壞礦工占全網路的算力比率

(p+q=1)

咖啡店會等待z次confirmation才送出咖啡,

然後用poisson distribution,其中λ=z*(q/p)

λ是指每挖出乙個新區塊的時候,壞礦工從後追上區塊的機會。

如果現時壞礦工落後了z個block,用上面這算式就可以計算出壞礦工從後趕上的機會率。

位元幣中的雙重支付問題

本質 位元幣是基於utxo的交易模式,每次交易都只是檢查前一次交易的合法性。例如b是乙個惡意節點,前一次交易 a b 是合法的,現在b已經向c支付了一定量的金額了 這筆金額是從a b中取得 但是b還想用這筆金額向d再支付一次,d只是檢查了一下 交易a b 是合法的,就接受了。以上的描述就是我理解的d...

自己理解的位元幣雙重支付

用乙個位元幣多次支付。發給a的交易成為交易a放在未確認的交易池 傳送b的交易成為交易b放在未確認的交易池 a先寫入區塊鏈驗證有效,這時b就驗證無效 但如果兩個交易驗證,區塊鏈就會產生兩個分支,等待下乙個區塊在哪個分支上先出現,區塊鏈分支更長的那乙個就是確認的那個,另乙個分支就無效,當然如果再次兩個分...

刷臉支付 5G時代下的新型支付模式

在這個人工智慧的高科技時代,得益於人臉識別技術的發展,它為我們提供了最便捷的支付交易方式 刷臉支付。眾所周知,刷臉支付自誕生以來,就受到了全國人民的廣泛關注。今天的刷臉支付市場意味著乙個新的視窗和新的機遇。面對這種情況,應該怎麼做?接下來讓小白從幾個方面帶大家去了解。一 如何定義刷臉支付?首先要先搞...