作者kugwa (闇黑圣饥魔)
看板DigiCurrency
标题[闲聊] Deep Reorg Protection 似乎无法自圆其说
时间Sat Jun 8 17:44:46 2019
其实以前就听过这个机制,只是因为一直想不通为什麽需要,也找不到比较正式的文件,所以就不敢确定是否有区块链真的采用。
而不久前听说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://webptt.com/cn.aspx?n=bbs/DigiCurrency/M.1559987089.A.C72.html
※ 编辑: kugwa (118.170.109.166 台湾), 06/08/2019 18:02:24
1F:推 rmp4rmp4bear: 我也是这样想的 06/08 18:49
2F:→ rmp4rmp4bear: Deep reorg感觉像是为了把其他链例如BTC, BSV搞掉 06/08 18:51
3F:→ rmp4rmp4bear: 的准备 06/08 18:51
4F:→ DarkerDuck: 交易所的节点哪有可能停机,这也不是为了解决51%攻击 06/08 20:12
5F:→ DarkerDuck: 只要是本质是PoW类型的币,就不可能"解决"51%攻击 06/08 20:13
6F:→ DarkerDuck: 这只能算是为了交易所,所设计的一个防御机制 06/08 20:14
7F:→ DarkerDuck: 你交易所无论如何,只要确认数设定10 06/08 20:15
8F:→ DarkerDuck: 就一定是达到了finality 06/08 20:15
9F:→ DarkerDuck: 因为超过高度10的reorg几乎可以保证是51%攻击 06/08 20:18
10F:→ DarkerDuck: 既然是51%攻击,就一定是需要整个社群介入的事件 06/08 20:18
11F:→ kugwa: 应该说deep reorg的确通常是由51%攻击造成的,但是如果51% 06/08 20:18
12F:→ kugwa: 攻击发生时强制不让区块链进行deep reorg的话,那只会造成 06/08 20:18
13F:→ kugwa: 网路分裂。 06/08 20:18
14F:→ DarkerDuck: 总不能跟BSV一样说deep reorg是feature 06/08 20:18
15F:→ kugwa: 抱歉我是回一楼 06/08 20:19
16F:→ DarkerDuck: 你们交易所确认给我设定一千就不会有问题了 06/08 20:19
17F:→ DarkerDuck: 那这样到底有哪个交易所会认真地把这个币当成一回事?? 06/08 20:20
18F:→ DarkerDuck: 而最初比特币节点还挑了6这个参数当作够安全的参数 06/08 20:20
19F:→ DarkerDuck: 因为经过计算,超过高度6还reorg 06/08 20:21
20F:→ DarkerDuck: 不透过51%攻击几乎不可能发生 06/08 20:21
21F:→ DarkerDuck: 假如真的发生超过高度10的reorg,需要整个社群的介入 06/08 20:24
22F:→ DarkerDuck: 宁可先让网路先分裂,大家决定好哪条才是非攻击链 06/08 20:25
23F:→ DarkerDuck: 学BTC发布带有checkpoint的新节点软体出来 06/08 20:25
24F:→ DarkerDuck: 重新回复到只有单一链的状态,问题解决 06/08 20:26
25F:→ DarkerDuck: 而不是让交易所白白损失巨大金额 06/08 20:26
26F:→ kugwa: 但这样不就有模糊的空间了吗 06/08 20:27
27F:→ kugwa: 到底要多深的reorg才要人为介入判断 06/08 20:27
28F:→ kugwa: 然後假如大家意见不合又怎麽决定 06/08 20:27
29F:→ kugwa: 以及要听谁的 06/08 20:28
30F:→ DarkerDuck: 就算本来Bitcoin够安全的交易也有模糊空间啊 06/08 20:29
31F:→ DarkerDuck: 为什麽要设定6,不设定60?甚至还有零确认的交易。 06/08 20:29
32F:→ DarkerDuck: 本来就不可能有100%的安全性 06/08 20:29
33F:→ DarkerDuck: 就算是BTC,他的所有机制的安全性都是相对安全而已 06/08 20:29
34F:→ DarkerDuck: 至於意见不合要听谁的,可以去查整个BTC的黑历史吧 06/08 20:30
35F:→ DarkerDuck: 在中本聪消失後,有太多太多意见不合的时候了 06/08 20:30
36F:→ DarkerDuck: 像是为什麽选择6当够安全的确认数 06/08 20:32
37F:→ DarkerDuck: 很显然也是"假设"恶意节点占10% 06/08 20:33
38F:→ DarkerDuck: 那选择6当确认数,可以保证只有0.1%的机率会被婊到 06/08 20:34
39F:→ DarkerDuck: 可直接看中本聪白皮书後面的计算 06/08 20:34
41F:→ DarkerDuck: 这机率比信用卡诈欺还要低,所以被认为"可以接受" 06/08 20:35
42F:→ kugwa: 我知道交易不可能完全finalized 06/08 20:39
43F:→ kugwa: 只是我以为user是在清楚这一点的情况下使用bitcoin 06/08 20:39
44F:→ kugwa: 51%攻击发生的时候完全必须自认倒楣 06/08 20:39
45F:→ kugwa: 没想到还有让社群来介入这招 06/08 20:39
46F:→ kugwa: 说刚刚这个51%攻击不算数 06/08 20:39
47F:→ kugwa: 感觉好赖皮 06/08 20:39
48F:→ DarkerDuck: 也不用自认倒楣啊 06/08 20:41
49F:→ DarkerDuck: 知道有两条高度超过10的链基本上就是跳警告不会交易了 06/08 20:41
50F:→ DarkerDuck: 反而是这个机制让交易所受到51%攻击後不用自认倒楣 06/08 20:42
51F:→ DarkerDuck: 而其实中本聪时代的比特币节点有所谓的紧急广播 06/08 20:42
52F:→ DarkerDuck: 只有中本聪和少数早期开发者有广播私钥 06/08 20:43
53F:→ DarkerDuck: 告知大家发生攻击行为或是bug,这样不就超级中心化赖皮 06/08 20:44
55F:→ DarkerDuck: 反而现在把这个系统移掉了 06/08 20:45
56F:→ DarkerDuck: 真的出包了,大家只好自认倒楣 06/08 20:45
57F:→ DarkerDuck: 可以看1032的alert message就是 06/08 20:47
58F:→ DarkerDuck: URGENT: chain fork, stop mining on version 0.8 06/08 20:48
59F:→ DarkerDuck: 网路分裂啦,还直接跟你讲说哪条链不要再用再挖了 06/08 20:48
60F:→ kugwa: 看来密码货币终究无法脱离社群的支援独自运作 06/08 21:18
61F:→ kugwa: 跟我原先以为的定位不同 06/08 21:19
62F:→ kugwa: 板大让我见识了密码货币更真实的一面 06/08 21:19
63F:→ kugwa: checkpoint到底是不是deprecated 06/08 21:20
64F:→ DarkerDuck: 再偷偷讲个黑历史,为什麽Alert System被移除了 06/08 21:20
65F:→ kugwa: 我看源码里还是有检查checkpoint 06/08 21:20
66F:→ DarkerDuck: 因为Gavin被斗走後仍然拥有紧急广播私钥 06/08 21:20
67F:→ kugwa: 但bitcoin wiki说已经不用了 06/08 21:21
69F:→ DarkerDuck: 但是又不想要更动这个从中本聪时代就有的系统 06/08 21:21
70F:→ DarkerDuck: 所以乾脆移掉 XDDD,加密货币仍然脱离不了人性斗争 06/08 21:21
71F:→ kugwa: 那Alert System这段内幕是哪里流出的 06/08 21:23
72F:→ DarkerDuck: 这也不算内幕吧,Gavin被斗走後就有讨论要怎麽解决 06/08 21:24
73F:→ DarkerDuck: 紧急广播问题,後来讨论不出来就整个砍掉啊 06/08 21:24
74F:→ DarkerDuck: 我查到的是Bitcoin Core节点软体从2014年4月後的更新 06/08 21:31
75F:→ DarkerDuck: 就不再加入新的check point 06/08 21:31
76F:→ DarkerDuck: 通常要有check point是为了硬分叉更新不要选错链 06/08 21:32
77F:→ DarkerDuck: 但现在BTC完全没有这方面的需要了 06/08 21:32
78F:→ DarkerDuck: 但是旧的checkpoint就留着 06/08 21:32
79F:→ kugwa: 原来如此 06/08 21:44
80F:→ kugwa: 还有一个想问的 06/08 21:44
81F:→ kugwa: 不是有个功能是invalidateblock & reconsiderblock吗 06/08 21:46
82F:→ kugwa: 前者是手动将某个区块打上invalid的flag 06/08 21:48
83F:→ kugwa: 当然效果只是作用在本地的block index 06/08 21:49
84F:→ kugwa: 这样就可以手动让节点不要走51%攻击那条链 06/08 21:50
85F:→ kugwa: 後者则是把invalid的flag拿掉让节点根据共识规则重新判断 06/08 21:51
86F:→ kugwa: 有这功能的话也不需要刻意弄一个deep reorg protection吧 06/08 21:52
87F:→ DarkerDuck: 那这样就变成各说各话了啊 06/08 21:57
88F:→ DarkerDuck: 现在deep reorg protection就是设下一个共识 06/08 21:58
89F:→ DarkerDuck: 超过高度10的reorg基本上就被判定为51%攻击 06/08 21:58
90F:→ DarkerDuck: 这个链将是invalid,分裂的网路待後续凝聚社群共识 06/08 21:59
91F:→ DarkerDuck: 但你的做法是每个节点自己依照自己的看法判定 06/08 21:59
(DarkerDuck 删除 DarkerDuck 的推文: 打错字)
92F:→ DarkerDuck: 那交易所假如设成高度是2就是51%攻击呢? 06/08 22:01
93F:→ DarkerDuck: 那恐怕就天下大乱了 06/08 22:01
94F:→ DarkerDuck: 更不用说假如每个矿工都自己想设多少就是多少 06/08 22:06
95F:→ DarkerDuck: 那恐怕BCH的区块链天天分叉,完全无法正常运作 06/08 22:07
96F:→ DarkerDuck: 这个功能主要是用在真的有争议的攻击上 06/08 22:08
97F:→ DarkerDuck: 譬如之前有人想要取走所有segwit地址的BCH 06/08 22:08
98F:→ DarkerDuck: 反正这个规则很明确,攻击行为没有模糊地带 06/08 22:09
99F:→ DarkerDuck: 但是51%攻击如你说说是很模糊的 06/08 22:09
100F:→ DarkerDuck: 每个节点判定标准都不一致的话,那後果就是没有共识 06/08 22:09
101F:→ DarkerDuck: 当然也就不会有单一条的区块链 06/08 22:10
102F:→ kugwa: 我是想说 只要reorg没有深到触动社群跳出来 那就都当没事 06/10 00:13
103F:→ kugwa: 大家就都认最长的 06/10 00:14
104F:→ kugwa: 而有人跳出来质疑有51%攻击的时候 大家暂且按兵不动 06/10 00:15
105F:→ kugwa: 觉得不是攻击的人就什麽都不用做 06/10 00:15
106F:→ kugwa: 觉得是攻击的 那就先用invalidateblock来忽略攻击链 06/10 00:16
107F:→ kugwa: 等大家商量好之後 社群就发个有新checkpoint的更新 06/10 00:18
108F:→ DarkerDuck: 这样做当然是可以,反正风险就自负而已 06/10 00:19
109F:→ kugwa: 也就是出现争议的时候才用到invalidateblock 06/10 00:20
110F:→ DarkerDuck: 任何矿工都可以压在觉得最後会获得共识的那条链上面 06/10 00:20
111F:→ DarkerDuck: PoS会有问题就是验证者可以双压,PoW矿工只能单压 06/10 00:21
112F:→ DarkerDuck: 因此比较少人承认的那条链通常很快就会被抛弃了 06/10 00:22
113F:→ DarkerDuck: 只是这个设计不适用於遭到51%攻击的状态下 06/10 00:22
114F:→ kugwa: 所以意思就是 deep reorg protection让大部分的节点坚持在 06/10 00:38
115F:→ kugwa: 原来的主链 然後理想情况下原来的主链马上可以反超变回最长 06/10 00:39
116F:→ kugwa: 而不小心没触发deep reorg protection的节点 选错边站就是 06/10 00:41
117F:→ kugwa: 很虽就对了 06/10 00:41
118F:→ DarkerDuck: 你一直会错意,我直接发文好了 06/10 00:42
119F:→ kugwa: 有劳 感恩 06/10 00:55
120F:→ DarkerDuck: deep reorg protection是所有bitcoin abc的节点都会 06/10 01:04
121F:→ DarkerDuck: 触发,而bitcoin abc的算力占BCH的大多数 06/10 01:05
122F:推 DarkerDuck: 997字 * 6星 = 5982 PCH 07/12 21:04