區(qū)塊鏈中的分割攻擊解析
掃描二維碼
隨時(shí)隨地手機(jī)看文章
在本期中,我們將講述另一種攻擊方式,我們稱(chēng)為“分割攻擊”。這種攻擊方式目前沒(méi)有見(jiàn)其他地方公開(kāi)提到過(guò),是 Conflux 在分析“最重鏈規(guī)則”的安全性時(shí)發(fā)現(xiàn)的。
在上一期介紹平衡攻擊的時(shí)候,我們提到,攻擊者將誠(chéng)實(shí)的節(jié)點(diǎn)分割成 2 個(gè)算力均等社區(qū),利用其對(duì)網(wǎng)絡(luò)的控制能力,讓 2 個(gè)社區(qū)的誠(chéng)實(shí)節(jié)點(diǎn)在不同的子樹(shù)下挖新的區(qū)塊,從而產(chǎn)生兩個(gè)差不多大的子樹(shù)。
本期所講的攻擊方式,在最開(kāi)始的時(shí)候與平衡攻擊類(lèi)似,也是將誠(chéng)實(shí)的節(jié)點(diǎn)分割成若干個(gè)算力差不多的社區(qū),每個(gè)社區(qū)在不同的子樹(shù)下挖區(qū)塊。這里我們以分割成 3 個(gè)社區(qū)為例。
(圖中每一個(gè)紅色圓圈代表一個(gè)的區(qū)塊,攻擊者讓3個(gè)社區(qū)的誠(chéng)實(shí)節(jié)點(diǎn)分別在右側(cè) 3 個(gè)不同的子樹(shù)下貢獻(xiàn)算力)
與此同時(shí),攻擊者會(huì)在 3 個(gè)區(qū)塊的父親區(qū)塊(上圖中左上側(cè)的圓圈)后面再生成一個(gè)區(qū)塊,并在這個(gè)區(qū)塊下面挖塊。一段時(shí)間之后,區(qū)塊之間的結(jié)構(gòu)如下圖所示。(這里我們假設(shè)攻擊者占 40% 全網(wǎng)總算力。)
(圖中方框代表在一段時(shí)間內(nèi)新生成的一些區(qū)塊。其中虛線(xiàn)表示壞人藏起來(lái)沒(méi)有廣播區(qū)塊。藍(lán)色表示好人生成的區(qū)塊)
與平衡攻擊不同,攻擊者并不打算讓 3 個(gè)好人社區(qū)為這 3 棵子樹(shù)誰(shuí)更重爭(zhēng)執(zhí)下去。相反,攻擊者讓之前被藏起來(lái)的孩子成為最重的孩子。
之后,攻擊者如法炮制,重復(fù)上述這個(gè)過(guò)程。
在每一輪中,如果好人平均生成 30 個(gè)區(qū)塊,那么每棵子樹(shù)下平均有 10 個(gè)區(qū)塊。
攻擊者只需要廣播 11 個(gè)區(qū)塊(可能會(huì)因?yàn)殡S機(jī)性略多一些)就可以完成自己的目的。而在同一時(shí)間,攻擊者可以新生成 20 個(gè)區(qū)塊。
這樣攻擊者藏的鏈就會(huì)越來(lái)越長(zhǎng)。而且,這條鏈上的每一個(gè)區(qū)塊最終還會(huì)成為所有誠(chéng)實(shí)節(jié)點(diǎn)所認(rèn)可的主鏈。也就是說(shuō),攻擊者用藏了很久的區(qū)塊控制了主鏈。
如果一個(gè)區(qū)塊被攻擊者藏了很久,后來(lái)又成為了所有誠(chéng)實(shí)節(jié)點(diǎn)所認(rèn)可的主鏈。這是一件非??膳碌氖虑?,攻擊者可能已經(jīng)在這個(gè)區(qū)塊的子樹(shù)中藏了足夠多的區(qū)塊,它可以在任何時(shí)刻將這些藏起來(lái)的區(qū)塊廣播出來(lái),形成一棵權(quán)重很大的子樹(shù),用來(lái)打敗好人的子樹(shù)。
這樣,如果好人子樹(shù)中有交易已經(jīng)被確認(rèn),那么這些被確認(rèn)的交易就會(huì)被逆轉(zhuǎn)。也就是說(shuō),攻擊者完成了“雙花攻擊”。
幸運(yùn)的是,一個(gè)區(qū)塊是不是被藏了很久,雖然在最重鏈規(guī)則下很難判斷,但結(jié)合“樹(shù)圖結(jié)構(gòu)”后,我們有能力去發(fā)現(xiàn)那些被藏了很久的主鏈區(qū)塊。
如果我們相應(yīng)地推遲這個(gè)區(qū)塊之后交易的確認(rèn),就可以避免被“雙花”。
但是,這會(huì)帶來(lái)另一個(gè)問(wèn)題,就是交易遲遲無(wú)法確認(rèn)。總的來(lái)說(shuō),在合理的確認(rèn)規(guī)則之下,“分割攻擊”只能夠做到“存活性攻擊”。
那么,利用樹(shù)圖結(jié)構(gòu),我們是否有能力去探測(cè)這種攻擊呢?探測(cè)到這種攻擊以后,又有什么應(yīng)對(duì)方式呢?我們將在未來(lái)幾期講解。
來(lái)源:?Conflux中文社區(qū)