在何謂區塊鏈(一)提過,如果世界上有太多壞礦工,就不能保障區塊鏈的安全。 那到底要有幾多個壞壙工才會有影響,壞壙工又可以如可攻擊區塊鏈,下面會詳細解釋。
先重溫一下挖礦的基本知識,所謂挖礦,是指壙工之間鬥快解出一條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時代下的新型支付模式
在這個人工智慧的高科技時代,得益於人臉識別技術的發展,它為我們提供了最便捷的支付交易方式 刷臉支付。眾所周知,刷臉支付自誕生以來,就受到了全國人民的廣泛關注。今天的刷臉支付市場意味著乙個新的視窗和新的機遇。面對這種情況,應該怎麼做?接下來讓小白從幾個方面帶大家去了解。一 如何定義刷臉支付?首先要先搞...