標題

[閒聊] Deep Reorg Protection 似乎無法自圓其說 (2篇)

看板DigiCurrency數位貨幣板作者kugwa (苦瓜)
時間. (2019-06-08 17:44:46)
推文123則 (2推 0噓 121→)
其實以前就聽過這個機制,只是因為一直想不通為什麼需要,也找不到比較正式的文件,所以就不敢確定是否有區塊鏈真的採用。

而不久前聽說BCH原來有實作這個機制,就覺得還是要深究一下。



Deep Reorg跟普通Reorg沒什麼兩樣,只是分支點是在一個有點久以前的區塊,

而Deep Reorg Protection就是故意不去理會從久遠區塊長出的新分支,即使這個新分支變成最長的。

以BCH來說,最新區塊往回數10個,比這更老的區塊長出的分支都會被忽略掉。



據我所知,Deep Reorg Protection的目的是防止51%攻擊。論點主張,正常Reorg的深度通常只有1頂多2,

從10個之前的區塊突然長出的分支,那一定是惡意發起企圖篡改區塊鏈用的。

但這個說法應無法自圓其說,理由如下。



假設51%攻擊真的發生,出現了Deep Reorg的情境,而實作Deep Reorg Protection的節點則是故意不去Reorg。

考慮事發之後才上線的節點,他們無從判斷那個分支在發生的當下到底是深還是淺。

如果新上線的節點聽信「長的分支是Deep Reorg來的」,而選擇了短的那條,也就是原本就是主鏈的那條,

那麼任何一個人都可以自己隨意開一個很短的分支,然後宣稱

「我這條才是王道!原本比我長的其實都是Deep Reorg來的!」

來欺騙新上線的節點,沒有方法可以分辨到底誰說的才是對的。

又如果新上線的節點直接選了最長的那條,那麼Deep Reorg Protection就變得毫無意義了,因為新上線的節點並不配合。



如果用「這樣也只能騙騙新上線節點而已,很多礦工都是不停機的」來反駁,

那就把51%攻擊改成從深度9的區塊(臨界被判定為Deep Reorg的深度)來長出新的分支,

並且在這個區塊即將變成深度10的時候把長鏈廣播出去,由於網路延遲的關係,

就會有一半的在線節點判定這是Deep Reorg而予以忽略,另一半則判定是正常Reorg而接受新的最長鏈,導致網路分裂。

可以發現,不可能分辨出一個Reorg到底是惡意還是自然發生的,

因為不管把判定為Deep Reorg的深度定為多少,總是能用這種方式讓一些節點以為是惡意一些節點以為是正常。



總之,Deep Reorg Protection似乎是多此一舉的機制。

真的發生51%攻擊導致網路分裂時,對於要統一回哪個分支的決定也沒有幫助。

我認為在PoW體系裡,想靠最長鏈以外的方式決定主鏈,往往只會得到反效果。

就算51%攻擊真的出現的話那也必須接受,畢竟世界上本來就不存在100%不可篡改的記帳神器,即使是中心化的解法亦然。

到頭來,還是只有最長鏈才是PoW體系裡最強而有力的依憑。



https://www.reddit.com/r/btc/comments/ba9z6v/satoshis_opinion_on_reorg_protection/

這個討論串內有中本聰對51%攻擊的解說。

「即使在線節點目睹了整個篡改的過程,他們還是必須將最長鏈視為唯一信仰。」

他對這段的說明,應能印證我的論述,也能感覺得出他應該不會認同Deep Reorg Protection。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.170.109.166 (臺灣)
※ 文章網址: https://pttweb.tw/DigiCurrency/M.1559987089.A.C72
※ 編輯: kugwa (118.170.109.166 臺灣), 06/08/2019 18:02:24
#1rmp4rmp4bear: 我也是這樣想的 06/08 18:49
#2rmp4rmp4bear: Deep reorg感覺像是為了把其他鏈例如BTC, BSV搞掉 06/08 18:51
#3rmp4rmp4bear: 的準備 06/08 18:51
#4DarkerDuck: 交易所的節點哪有可能停機,這也不是為了解決51%攻擊 06/08 20:12
#5DarkerDuck: 只要是本質是PoW類型的幣,就不可能"解決"51%攻擊 06/08 20:13
#6DarkerDuck: 這只能算是為了交易所,所設計的一個防禦機制 06/08 20:14
#7DarkerDuck: 你交易所無論如何,只要確認數設定10 06/08 20:15
#8DarkerDuck: 就一定是達到了finality 06/08 20:15
#9DarkerDuck: 因為超過高度10的reorg幾乎可以保證是51%攻擊 06/08 20:18
#10DarkerDuck: 既然是51%攻擊,就一定是需要整個社群介入的事件 06/08 20:18
#11kugwa: 應該說deep reorg的確通常是由51%攻擊造成的,但是如果51% 06/08 20:18
#12kugwa: 攻擊發生時強制不讓區塊鏈進行deep reorg的話,那只會造成 06/08 20:18
#13kugwa: 網路分裂。 06/08 20:18
#14DarkerDuck: 總不能跟BSV一樣說deep reorg是feature 06/08 20:18
#15kugwa: 抱歉我是回一樓 06/08 20:19
#16DarkerDuck: 你們交易所確認給我設定一千就不會有問題了 06/08 20:19
#17DarkerDuck: 那這樣到底有哪個交易所會認真地把這個幣當成一回事?? 06/08 20:20
#18DarkerDuck: 而最初比特幣節點還挑了6這個參數當作夠安全的參數 06/08 20:20
#19DarkerDuck: 因為經過計算,超過高度6還reorg 06/08 20:21
#20DarkerDuck: 不透過51%攻擊幾乎不可能發生 06/08 20:21
#21DarkerDuck: 假如真的發生超過高度10的reorg,需要整個社群的介入 06/08 20:24
#22DarkerDuck: 寧可先讓網路先分裂,大家決定好哪條才是非攻擊鏈 06/08 20:25
#23DarkerDuck: 學BTC發佈帶有checkpoint的新節點軟體出來 06/08 20:25
#24DarkerDuck: 重新回復到只有單一鏈的狀態,問題解決 06/08 20:26
#25DarkerDuck: 而不是讓交易所白白損失巨大金額 06/08 20:26
#26kugwa: 但這樣不就有模糊的空間了嗎 06/08 20:27
#27kugwa: 到底要多深的reorg才要人為介入判斷 06/08 20:27
#28kugwa: 然後假如大家意見不合又怎麼決定 06/08 20:27
#29kugwa: 以及要聽誰的 06/08 20:28
#30DarkerDuck: 就算本來Bitcoin夠安全的交易也有模糊空間啊 06/08 20:29
#31DarkerDuck: 為什麼要設定6,不設定60?甚至還有零確認的交易。 06/08 20:29
#32DarkerDuck: 本來就不可能有100%的安全性 06/08 20:29
#33DarkerDuck: 就算是BTC,他的所有機制的安全性都是相對安全而已 06/08 20:29
#34DarkerDuck: 至於意見不合要聽誰的,可以去查整個BTC的黑歷史吧 06/08 20:30
#35DarkerDuck: 在中本聰消失後,有太多太多意見不合的時候了 06/08 20:30
#36DarkerDuck: 像是為什麼選擇6當夠安全的確認數 06/08 20:32
#37DarkerDuck: 很顯然也是"假設"惡意節點佔10% 06/08 20:33
#38DarkerDuck: 那選擇6當確認數,可以保證只有0.1%的機率會被婊到 06/08 20:34
#39DarkerDuck: 可直接看中本聰白皮書後面的計算 06/08 20:34
#41DarkerDuck: 這機率比信用卡詐欺還要低,所以被認為"可以接受" 06/08 20:35
#42kugwa: 我知道交易不可能完全finalized 06/08 20:39
#43kugwa: 只是我以為user是在清楚這一點的情況下使用bitcoin 06/08 20:39
#44kugwa: 51%攻擊發生的時候完全必須自認倒楣 06/08 20:39
#45kugwa: 沒想到還有讓社群來介入這招 06/08 20:39
#46kugwa: 說剛剛這個51%攻擊不算數 06/08 20:39
#47kugwa: 感覺好賴皮 06/08 20:39
#48DarkerDuck: 也不用自認倒楣啊 06/08 20:41
#49DarkerDuck: 知道有兩條高度超過10的鏈基本上就是跳警告不會交易了 06/08 20:41
#50DarkerDuck: 反而是這個機制讓交易所受到51%攻擊後不用自認倒楣 06/08 20:42
#51DarkerDuck: 而其實中本聰時代的比特幣節點有所謂的緊急廣播 06/08 20:42
#52DarkerDuck: 只有中本聰和少數早期開發者有廣播私鑰 06/08 20:43
#53DarkerDuck: 告知大家發生攻擊行為或是bug,這樣不就超級中心化賴皮 06/08 20:44
#55DarkerDuck: 反而現在把這個系統移掉了 06/08 20:45
#56DarkerDuck: 真的出包了,大家只好自認倒楣 06/08 20:45
#57DarkerDuck: 可以看1032的alert message就是 06/08 20:47
#58DarkerDuck: URGENT: chain fork, stop mining on version 0.8 06/08 20:48
#59DarkerDuck: 網路分裂啦,還直接跟你講說哪條鏈不要再用再挖了 06/08 20:48
#60kugwa: 看來密碼貨幣終究無法脫離社群的支援獨自運作 06/08 21:18
#61kugwa: 跟我原先以為的定位不同 06/08 21:19
#62kugwa: 板大讓我見識了密碼貨幣更真實的一面 06/08 21:19
#63kugwa: checkpoint到底是不是deprecated 06/08 21:20
#64DarkerDuck: 再偷偷講個黑歷史,為什麼Alert System被移除了 06/08 21:20
#65kugwa: 我看源碼裡還是有檢查checkpoint 06/08 21:20
#66DarkerDuck: 因為Gavin被鬥走後仍然擁有緊急廣播私鑰 06/08 21:20
#67kugwa: 但bitcoin wiki說已經不用了 06/08 21:21
#69DarkerDuck: 但是又不想要更動這個從中本聰時代就有的系統 06/08 21:21
#70DarkerDuck: 所以乾脆移掉 XDDD,加密貨幣仍然脫離不了人性鬥爭 06/08 21:21
#71kugwa: 那Alert System這段內幕是哪裡流出的 06/08 21:23
#72DarkerDuck: 這也不算內幕吧,Gavin被鬥走後就有討論要怎麼解決 06/08 21:24
#73DarkerDuck: 緊急廣播問題,後來討論不出來就整個砍掉啊 06/08 21:24
#74DarkerDuck: 我查到的是Bitcoin Core節點軟體從2014年4月後的更新 06/08 21:31
#75DarkerDuck: 就不再加入新的check point 06/08 21:31
#76DarkerDuck: 通常要有check point是為了硬分叉更新不要選錯鏈 06/08 21:32
#77DarkerDuck: 但現在BTC完全沒有這方面的需要了 06/08 21:32
#78DarkerDuck: 但是舊的checkpoint就留著 06/08 21:32
#79kugwa: 原來如此 06/08 21:44
#80kugwa: 還有一個想問的 06/08 21:44
#81kugwa: 不是有個功能是invalidateblock & reconsiderblock嗎 06/08 21:46
#82kugwa: 前者是手動將某個區塊打上invalid的flag 06/08 21:48
#83kugwa: 當然效果只是作用在本地的block index 06/08 21:49
#84kugwa: 這樣就可以手動讓節點不要走51%攻擊那條鏈 06/08 21:50
#85kugwa: 後者則是把invalid的flag拿掉讓節點根據共識規則重新判斷 06/08 21:51
#86kugwa: 有這功能的話也不需要刻意弄一個deep reorg protection吧 06/08 21:52
#87DarkerDuck: 那這樣就變成各說各話了啊 06/08 21:57
#88DarkerDuck: 現在deep reorg protection就是設下一個共識 06/08 21:58
#89DarkerDuck: 超過高度10的reorg基本上就被判定為51%攻擊 06/08 21:58
#90DarkerDuck: 這個鏈將是invalid,分裂的網路待後續凝聚社群共識 06/08 21:59
#91DarkerDuck: 但你的做法是每個節點自己依照自己的看法判定 06/08 21:59
(DarkerDuck 刪除 DarkerDuck 的推文: 打錯字)
#92DarkerDuck: 那交易所假如設成高度是2就是51%攻擊呢? 06/08 22:01
#93DarkerDuck: 那恐怕就天下大亂了 06/08 22:01
#94DarkerDuck: 更不用說假如每個礦工都自己想設多少就是多少 06/08 22:06
#95DarkerDuck: 那恐怕BCH的區塊鏈天天分叉,完全無法正常運作 06/08 22:07
#96DarkerDuck: 這個功能主要是用在真的有爭議的攻擊上 06/08 22:08
#97DarkerDuck: 譬如之前有人想要取走所有segwit地址的BCH 06/08 22:08
#98DarkerDuck: 反正這個規則很明確,攻擊行為沒有模糊地帶 06/08 22:09
#99DarkerDuck: 但是51%攻擊如你說說是很模糊的 06/08 22:09
#100DarkerDuck: 每個節點判定標準都不一致的話,那後果就是沒有共識 06/08 22:09
#101DarkerDuck: 當然也就不會有單一條的區塊鏈 06/08 22:10
#102kugwa: 我是想說 只要reorg沒有深到觸動社群跳出來 那就都當沒事 06/10 00:13
#103kugwa: 大家就都認最長的 06/10 00:14
#104kugwa: 而有人跳出來質疑有51%攻擊的時候 大家暫且按兵不動 06/10 00:15
#105kugwa: 覺得不是攻擊的人就什麼都不用做 06/10 00:15
#106kugwa: 覺得是攻擊的 那就先用invalidateblock來忽略攻擊鏈 06/10 00:16
#107kugwa: 等大家商量好之後 社群就發個有新checkpoint的更新 06/10 00:18
#108DarkerDuck: 這樣做當然是可以,反正風險就自負而已 06/10 00:19
#109kugwa: 也就是出現爭議的時候才用到invalidateblock 06/10 00:20
#110DarkerDuck: 任何礦工都可以壓在覺得最後會獲得共識的那條鍊上面 06/10 00:20
#111DarkerDuck: PoS會有問題就是驗證者可以雙壓,PoW礦工只能單壓 06/10 00:21
#112DarkerDuck: 因此比較少人承認的那條鏈通常很快就會被拋棄了 06/10 00:22
#113DarkerDuck: 只是這個設計不適用於遭到51%攻擊的狀態下 06/10 00:22
#114kugwa: 所以意思就是 deep reorg protection讓大部分的節點堅持在 06/10 00:38
#115kugwa: 原來的主鏈 然後理想情況下原來的主鏈馬上可以反超變回最長 06/10 00:39
#116kugwa: 而不小心沒觸發deep reorg protection的節點 選錯邊站就是 06/10 00:41
#117kugwa: 很雖就對了 06/10 00:41
#118DarkerDuck: 你一直會錯意,我直接發文好了 06/10 00:42
#119kugwa: 有勞 感恩 06/10 00:55
#120DarkerDuck: deep reorg protection是所有bitcoin abc的節點都會 06/10 01:04
#121DarkerDuck: 觸發,而bitcoin abc的算力佔BCH的大多數 06/10 01:05
#122DarkerDuck: 997字 * 6星 = 5982 PCH 07/12 21:04

同標題文章

DigiCurrency熱門文章