什么是長(zhǎng)程攻擊
掃描二維碼
隨時(shí)隨地手機(jī)看文章
本文中,我們簡(jiǎn)要地討論關(guān)于PoS協(xié)議里,大家公認(rèn)最大的一朵烏云——長(zhǎng)程攻擊( long range attack );內(nèi)容還涵蓋了兩種目前現(xiàn)行的或預(yù)想的解決辦法:弱主觀性( weak subjectivity )和前向安全密鑰( forward-secure keys )。最后,我們提出了一種新的分叉選擇規(guī)則,使得長(zhǎng)程攻擊成本更加高昂;這種分叉選擇可以結(jié)合現(xiàn)有的幾種方案,作為預(yù)防長(zhǎng)程攻擊的額外舉措。
長(zhǎng)程攻擊
在PoW中,使用最長(zhǎng)鏈選擇規(guī)則可以獲得令人非常滿意的屬性:除非惡意攻擊者控制了全網(wǎng)超過(guò) 50% 的算力,不然無(wú)法逆轉(zhuǎn)已確認(rèn)一段時(shí)間的區(qū)塊。
但是在 PoS 中沒有這種特性。尤其是當(dāng)區(qū)塊生產(chǎn)者建完塊且拿回質(zhì)押的代幣后,對(duì)他們來(lái)說(shuō),用于創(chuàng)建區(qū)塊的密鑰再也沒有價(jià)值了;這時(shí)候攻擊者可以嘗試以遠(yuǎn)低于創(chuàng)建區(qū)塊時(shí)質(zhì)押的代幣金額去購(gòu)買這些密鑰。與 PoW 不同,因?yàn)?PoS 沒有出塊之間強(qiáng)制延時(shí)的機(jī)制,所以買到密鑰后,攻擊者能夠在數(shù)分鐘內(nèi)造出一條長(zhǎng)于主鏈的偽鏈,并被分叉選擇規(guī)則所接受。
有兩種方法能夠避免上述問(wèn)題:
弱主觀性( Weak subjecTIvity )
要求全網(wǎng)節(jié)點(diǎn)周期性地檢查最新的區(qū)塊,并拒收那些 “重組了過(guò)分久遠(yuǎn)的記錄” 的區(qū)塊。只要足夠頻繁地檢查區(qū)塊,使得在釋放質(zhì)押代幣的時(shí)間段中,肯定包含一次以上的檢查,那么節(jié)點(diǎn)就永遠(yuǎn)不會(huì)選擇攻擊者創(chuàng)建的最長(zhǎng)鏈,因?yàn)閿呈謴娜〕霰WC金的驗(yàn)證者處購(gòu)買的私鑰,必定只能從 “過(guò)于久遠(yuǎn)” 處開始創(chuàng)建區(qū)塊(因此節(jié)點(diǎn)會(huì)拒絕掉這些區(qū)塊)。
弱主觀性方法的不足之處在于,雖然已經(jīng)存在于網(wǎng)絡(luò)中的節(jié)點(diǎn)不會(huì)被攻擊者欺騙,但是對(duì)于首次加入網(wǎng)絡(luò)的節(jié)點(diǎn)來(lái)說(shuō),他們沒有足夠的信息來(lái)判斷哪條鏈?zhǔn)窍缺粍?chuàng)建的,因此新節(jié)點(diǎn)會(huì)傾向選擇攻擊者創(chuàng)建的較長(zhǎng)鏈。為了避免這種情況,新節(jié)點(diǎn)需要以某種方式在鏈下了解關(guān)于主鏈的知識(shí),這在本質(zhì)上就是要求他們選擇信任網(wǎng)絡(luò)中的某個(gè)主體。
前向安全密鑰( Forward-secure keys )
還有一種方法是要求區(qū)塊創(chuàng)建者在出塊后,在極短的時(shí)間內(nèi)或立刻銷毀他們用來(lái)建塊的密鑰;可以在每次建塊時(shí)創(chuàng)建新的密鑰對(duì),或是通過(guò) 前向安全密鑰 結(jié)構(gòu)(該結(jié)構(gòu)允許在公鑰保持一致的情況下,改變私鑰)來(lái)完成。
這個(gè)方法仰賴于節(jié)點(diǎn)是誠(chéng)實(shí)的,并且嚴(yán)格遵守協(xié)議。因?yàn)橐坏﹨^(qū)塊創(chuàng)建者知道未來(lái)的某個(gè)時(shí)間點(diǎn),可能會(huì)有人要買他們的密鑰,則密鑰價(jià)值不為零,區(qū)塊創(chuàng)建者就沒有動(dòng)機(jī)去銷毀密鑰。且不說(shuō)要求在某個(gè)特定時(shí)間點(diǎn),會(huì)有大比例的區(qū)塊創(chuàng)建者愿意修改他們的文件且移除私鑰并不現(xiàn)實(shí);這種仰賴大多數(shù)參與者 誠(chéng)實(shí)配合 的協(xié)議,與仰賴大多數(shù)參與者是 理性 的協(xié)議,兩者間所帶來(lái)的安全保障并不不同。PoW 就是建立在大多數(shù)參與者是理性的且不會(huì)進(jìn)行勾結(jié)的前提之上的,其分叉選擇規(guī)則和抗女巫攻擊也都依賴這個(gè)假設(shè)。
我們提議的分叉選擇規(guī)則
參考下圖:區(qū)塊 B 在主鏈上足夠前段的位置,所以產(chǎn)生 B 時(shí)大多數(shù)(或所有)的在位驗(yàn)證者都已經(jīng)把保證金取出來(lái)了。
攻擊者能夠接觸這些區(qū)塊生產(chǎn)者,并取得其中 ~2/3 的私鑰;因?yàn)檫@時(shí)候密鑰對(duì)于區(qū)塊產(chǎn)生者來(lái)說(shuō)已經(jīng)沒有價(jià)值,所以攻擊者能以遠(yuǎn)低于實(shí)際建塊質(zhì)押的金額來(lái)買到這些密鑰。
因?yàn)?PoS 系統(tǒng)沒有所謂稀缺資源( 譯者注:PoW 中算力稀缺),攻擊者能夠在非常短的時(shí)間內(nèi)創(chuàng)建一條長(zhǎng)于主鏈的偽鏈。
我們需要一種分叉選擇規(guī)則,使得用戶(包括第一次接入網(wǎng)絡(luò)的用戶)不會(huì)將攻擊者創(chuàng)建的鏈視作主鏈——不論攻擊者構(gòu)建出多長(zhǎng)的偽鏈,以及有多少惡意驗(yàn)證者為其簽名背書。
本文建議的分叉選擇規(guī)則步驟是:從創(chuàng)世區(qū)塊開始,針對(duì)每個(gè)區(qū)塊通過(guò)以下規(guī)則選擇其子塊作為下一個(gè)合法區(qū)塊:
1. 當(dāng)前區(qū)塊被主鏈采用后,對(duì)狀態(tài)進(jìn)行快照。
2. 列出當(dāng)前時(shí)刻,持有代幣的所有賬戶,并做成對(duì)照表(公鑰 → 持有金額)。
3. 對(duì)于每個(gè)候選子塊,根據(jù)對(duì)照表,找出子塊及其各自子樹(子塊后面接著的區(qū)塊)中簽署過(guò)至少一筆交易的公鑰,并驗(yàn)證之。
4. (驗(yàn)證)算出每個(gè)候選子塊及其各自子樹中,簽署過(guò)至少一筆交易的公鑰所轉(zhuǎn)移的代幣總量;選擇轉(zhuǎn)移代幣總量最多的子塊作為合法的下一個(gè)區(qū)塊。
從圖中的例子來(lái)說(shuō),當(dāng)前區(qū)塊是 B ,候選子塊是 C1 和 C2 ;C1 的子樹是所有合規(guī)主鏈上的區(qū)塊, 而 C2 的子樹是攻擊者創(chuàng)建的。
從 B 塊狀態(tài)快照開始,計(jì)算簽署過(guò)至少一筆交易的公鑰所轉(zhuǎn)移的代幣總量(包含代幣轉(zhuǎn)移和質(zhì)押代幣交易),作為主鏈(C1 )的得分;攻擊者創(chuàng)建的鏈( C2 )得分計(jì)算方式相同,但是因?yàn)榇嬖谥胤疟Wo(hù),所有 C2 及其子樹中的交易都是由攻擊者創(chuàng)建的。
從 B 塊狀態(tài)快照開始,假設(shè)在主鏈( C1 )上,計(jì)算簽署過(guò)一次及以上交易的公鑰所轉(zhuǎn)移代幣總量為 p ;而攻擊者創(chuàng)建的鏈( C2 )上,只存在攻擊者買到的密鑰所創(chuàng)建的交易,這些公鑰所轉(zhuǎn)移代幣總量為 q ,則 q 《 p 永遠(yuǎn)成立。
如果攻擊者創(chuàng)建的鏈希望獲得更高的分?jǐn)?shù),則從 B 塊狀態(tài)快照開始計(jì)算, C2 及其子樹中的交易總額必須大于 p ,所以攻擊者還需要取得賬戶中總額大于 (p - q) 的密鑰(而且這些密鑰在主鏈 C1 及其子樹中還不能簽署過(guò)交易)(不然這些額度就計(jì)入了 p)。但攻擊者這時(shí)候就頭疼了,因?yàn)檫@些密鑰持有人還沒有在主鏈進(jìn)行任何交易,所以他們的賬戶在快照狀態(tài)時(shí)還有資金,所以攻擊者無(wú)法用低于快照狀態(tài)中的金額來(lái)取得這些密鑰。
因此,即使攻擊者以低價(jià)取得了截至 B 塊為止,8 成的 “至少在主鏈發(fā)起過(guò)一筆交易的賬戶”,攻擊者仍至少要付出 0.2p 的作惡成本。
請(qǐng)注意,要讓主鏈具備抗分叉性,需要積累大量有效交易后這種分叉選擇規(guī)則才有效,所以該選擇規(guī)則僅適用于面臨長(zhǎng)程攻擊的分叉選擇。該分叉選擇規(guī)則可以結(jié)合經(jīng)典解決方案,先用拜占庭容錯(cuò)型確定性工具(BFT finality gadget)所敲定的區(qū)塊形成一個(gè)區(qū)塊鏈的子集,并在這個(gè)子鏈上執(zhí)行上述分叉選擇規(guī)則;然后基于上述規(guī)則選出的最終區(qū)塊,再使用其他更合適的分叉選擇規(guī)則(如,LMD GHOST)。
結(jié)語(yǔ)
上述分叉選擇規(guī)則為預(yù)防長(zhǎng)程攻擊提供了額外舉措;雖然這種規(guī)則具有一些有趣的特性,但是在投入實(shí)際應(yīng)用前,還有許多研究要做。舉例來(lái)說(shuō),目前還不清楚該規(guī)則是否能夠提供經(jīng)濟(jì)確定性;一切都需要更多長(zhǎng)遠(yuǎn)的分析。
來(lái)源: 以太坊愛好者
?