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





